Pushing any Messages to anywhere from Your Agent, an agent-friendly CLI for pushing messages.
Now pushc supports adapters:
- HTTP webhook
- NapCat for QQ
Copy this to your agent.
Install pushc skill from https://github.com/yjl9903/pushc
Or use skills CLI.
npx skills add https://github.com/yjl9903/pushcOr install pushc CLI manually.
npm install -g pushcAgent regularly checks 前橋ウィッチーズ official sources and sends notifications via QQ.
CRON prompt:
Monitor @maebashiwitches and its website. Use pushc to send important updates and images separately to
qq:event.
Result:
For example, when the 2nd anniversary Live merchandise preorder opens, the agent runs:
pushc send --target qq:event "前橋ウィッチーズ 2 周年 Live 更新
- 商品事前通販已开始,8 月 2 日截止
- https://x.com/maebashiwitches/status/2080578986950746216"
pushc send --target qq:event \
--attachment ./events/maebashi-witches/2026/assets/2nd-live-goods.jpgYour QQ will receives a text summary followed by separate image messages.
Example .pushc/config.toml:
[adapters.bark]
type = "webhook"
url = "https://api.day.app/push"
[adapters.bark.request]
content_type = "application/json"
[adapters.bark.request.body]
device_key = "${BARK_DEVICE_KEY}"
body = "{{message}}"
title = "{{title:-pushc}}"
group = "{{param.group:-pushc}}"
level = "active"
[adapters.bark.response.body]
"/code" = { equals = 200 }
[adapters.qq]
type = "napcat"
base_url = "ws://127.0.0.1:3001"
access_token = "${NAPCAT_TOKEN}"
max_attachment_bytes = 33554432
[adapters.qq.targets.qq-group]
group_id = "123456789"
[adapters.qq.targets.qq-friend]
user_id = "987654321"Example .pushc/.env:
BARK_DEVICE_KEY=replace-with-your-bark-device-key
NAPCAT_TOKEN=replace-with-your-napcat-tokenPass short messages as arguments:
pushc send --target bark \
--title "Build completed" \
--param group=releases \
"Production deployment succeeded"Preview the request without sending it:
pushc send --target bark \
--dry-run --json \
--title "Build completed" \
--param group=releases \
"Production deployment succeeded"Read a literal UTF-8 text file:
pushc send --target qq:qq-group --file ./report.txtJSON and TOML files can describe the target and ordered content:
target = "qq:qq-group"
title = "Build completed"
[param]
group = "message-default"
environment = "production"
[[content]]
type = "text"
text = "Report:"
[[content]]
type = "attachment"
source = "./report.pdf"pushc send --file ./message.toml --param group=releasesCLI params override matching message-file params; environment remains production.
Send local or remote attachments:
pushc send --target qq:qq-group \
--attachment ./screenshot.png \
--attachment https://example.com/report.pdfAttachment support and source interpretation depend on the selected adapter.
Or pipe it through stdin:
git log -1 | pushc send --target barkList configured targets:
pushc targetsUse adapters with PushClient:
import { PushClient } from '@pushc/core';
import { WebhookAdapter } from '@pushc/adapter-webhook';
const client = new PushClient();
client.adapters.register(
'bark',
new WebhookAdapter({
url: 'https://api.day.app/push',
request: {
content_type: 'application/json',
body: {
device_key: process.env.BARK_DEVICE_KEY!,
body: '{{message}}',
title: '{{title:-pushc}}',
group: '{{param.group:-pushc}}',
level: 'active'
}
}
})
);
await client.send('bark', {
title: 'Production',
content: '{{title}} build completed for {{param.environment}}',
param: new Map([
['environment', 'production'],
['group', 'deployments']
])
});
await client.destroy();MIT License © 2026 OneKuma