OneBot 11 × ACP

qq-ai-bot

A production-grade open-source QQ ↔ AI bot scaffold built for self-hosted NapCat / LLOneBot deployments and ACP-compatible local agents. It keeps transport, session orchestration, and agent execution clearly separated so the repo feels more like infrastructure than a one-off chat demo.

A common real-world shape is to put DeepSeek or another local / self-hosted model runtime behind an ACP-compatible agent, and let qq-ai-bot handle the QQ / OneBot transport, session reuse, progress streaming, and deployment-facing glue.

Node.js 22+ TypeScript OneBot 11 NapCat / LLOneBot ACP DeepSeek-ready Persistent sessions Progress streaming Docker

If this repo already saved you OneBot / ACP wiring time: the shameless fast path is to tip ¥9.9 / ¥19.9. If you want something concrete back, jump straight to the ¥29.9 quick read or ¥99 async packaging pass for your own bot / agent repo.

Newest install surface: a public CasaOS app-store PR is now open, so the repo is also being packaged as a more homelab-friendly browser-first install path instead of only “clone compose and figure it out”.

Stable release signal: the repo now ships both a stable image tag ghcr.io/happysnaker/qq-ai-bot:v0.1.7 and the moving mainline tag ghcr.io/happysnaker/qq-ai-bot:latest, so directory / app-store / homelab writeups can reference a non-moving version without giving up a newest-build path.

New hardware signal: both public image paths now ship linux/amd64 and linux/arm64, so this stack is no longer only an x86 story — ARM NAS / mini-PC / SBC homelab installs are now part of the real public path too.

Tester ask: QEMU arm64 smoke is green, but a real physical ARM / CasaOS / NAS / SBC report is still missing. Start with the 15-minute ARM / CasaOS tester pack.

Copy/paste pitch if you share this repo: OneBot 11 + ACP + persistent sessions + progress streaming + Docker demo + ARM/CasaOS tester pack.

Live ecosystem signal

  • Public OneBot ecosystem placementqq-ai-bot now appears in the OneBot ecosystem application cases list instead of living only on its own README
  • Why that matters — this gives the repo one third-party ecosystem anchor that is native to the QQ / OneBot audience, not just generic AI-awesome lists
  • Official OneBot discussion is live — the repo is now also posted in the official OneBot “应用 / SDK” discussions, so people browsing the protocol community itself can discover it without leaving GitHub
  • NapCat community thread is live — the repo is now also posted in NapCatQQ Show and tell so operators already in that ecosystem can discover it without leaving GitHub
  • NapCat docs integration landedqq-ai-bot is now also documented in NapCat community resources / integration docs, which is stronger than only having a showcase thread
  • LLOneBot docs PR is openqq-ai-bot is now also proposed for the official LLOneBot docs as a framework integration path
  • Docker Compose sample PR is open — a concrete NapCat + qq-ai-bot sample PR is now proposed to Docker's Compose samples repo, which is a better fit than generic awesome-list spray
  • AwesomeHomelab PR is openqq-ai-bot is now also proposed to AwesomeHomelab, which is a cleaner homelab-facing discovery path than another generic AI list
  • CasaOS app-store PR is openqq-ai-bot is now also proposed to CasaOS-AppStore-Play as a NapCat WebUI + bundled bridge stack, which is the cleanest current path toward real homelab installs
  • Chinese discovery surfaces are live — the repo is now also circulating through public recommendation / weekly threads such as HelloGitHub, GitHubDaily, 阮一峰周刊, 老胡周刊, and developer-plus weekly, so discovery is no longer only GitHub-native protocol communities
  • Stable + moving image paths are live — the repo now ships both ghcr.io/happysnaker/qq-ai-bot:v0.1.7 and ghcr.io/happysnaker/qq-ai-bot:latest, so self-hosted directories can point to a stable version while operators who want the newest default-branch build still have a moving tag
  • Multi-arch image is live — both public image paths now expose linux/amd64 and linux/arm64, with arm64 QEMU smoke automation keeping the homelab / NAS / SBC install story honest while real physical-host reports collect in issue #26
  • ACP protocol discussion is live — a protocol-facing question based on qq-ai-bot's richer-media boundary is now posted in the official ACP discussions
  • ACP docs listing mergedqq-ai-bot is now included in the official ACP clients documentation under Messaging
  • Operational honesty — the public deployment matrix now separates “repo-owned stronger paths” from “documented but not overclaimed” paths, which makes the project feel more serious
  • Community proof threadsShow and tell and deployment matrix Q&A are open so real deployment reports can accumulate in public
  • LLOneBot community thread is live — there is now a matching LLOneBot Show and tell post for the users who operate closer to that stack
  • Best short pitchOneBot 11 + ACP + persistent sessions + progress streaming + Docker demo

The goal is to make this repo look like a living integration surface with ecosystem references and user feedback loops, not a dead side project.

ARM / CasaOS tester path

The project already has multi-arch GHCR images and passing GitHub Actions QEMU arm64 smoke. The remaining proof gap is a real physical ARM / CasaOS / NAS / SBC report from an operator environment.

  • Already proven: `v0.1.7` image, Docker publish, CI, CodeQL, and arm64 QEMU smoke are green.
  • Still needed: physical ARM host or CasaOS app-store flow with redacted evidence.
  • Good testers: Raspberry Pi, Orange Pi, ARM NAS, CasaOS host, or real `linux/arm64` Docker host.
  • Support note: use qq-ai-bot #26 arm64 if you want to fund this validation instead of testing it yourself.

Public-safety rule: do not post QQ credentials, login QR screenshots, OneBot tokens, private group/user IDs, private chat content, or unblurred local/IP details.

Why this repo exists

  • keep QQ transport logic independent from any specific model vendor
  • reuse an ACP-style local agent bridge instead of hard-wiring one chatbot backend
  • preserve session continuity per private chat or group conversation
  • stream plan / tool / progress events back into QQ without inventing a custom protocol
  • make the repo feel like a real bot infrastructure scaffold, not a fragile demo
  • leave room for Telegram / WeChat / Feishu-style channel adapters later
  • support local self-hosted agent workflows and operationally cleaner deployments
  • give OneBot + ACP users a faster starting point than wiring everything from scratch

System shape

High-level view of how transport, session orchestration, and ACP execution stay separated.

qq-ai-bot architecture overview

What the user actually sees

A real strength of this repo is that it can stream progress updates back into QQ instead of only dumping a final answer.

qq-ai-bot progress streaming demo

Recent updates

  • v0.1.0 released — public release with OneBot 11 transport, ACP bridge, Docker demo, and observability surfaces
  • v0.1.1 released — patch release that adds lightweight inbound replay dedupe and exposes duplicate-drop metrics
  • v0.1.2 released — adds per-interaction correlation IDs across receive / dedupe / ACP dispatch / progress / reply so one noisy turn is easier to trace end to end
  • v0.1.3 released — stages richer-media fallback handling so file / audio / video-like attachments are no longer silently ignored before the agent sees any warning
  • v0.1.4 released — stabilizes the public Docker image tag for directories and homelab writeups
  • v0.1.5 released — adds latency histograms for stronger runtime observability
  • v0.1.6 released — adds a Postgres-backed session-store option for longer-running deployments
  • v0.1.7 released — adds the public arm64 image-smoke workflow and verifies the tag image through GitHub Actions
  • Deployment matrix published — public docs now separate stronger reverse-path defaults from forward-mode / platform combinations that are only documented support
  • New FAQ + Discussions flow — common setup mistakes now route through FAQ and Q&A instead of vague issues
  • DeepSeek-ready positioning — public docs now explicitly describe the common DeepSeek-backed local-agent deployment path
  • Show-and-tell thread is live — community deployments can now collect in one public place instead of being scattered in ad-hoc comments
  • Replay guard landed — the bridge now has a lightweight inbound dedupe layer to reduce obvious OneBot replays before they become duplicate ACP calls

This page is maintained as a live project-facing landing page rather than a one-time README mirror.

Why this repo looks worth betting on

  • released as v0.1.0 with CI, Docker publishing, and build metadata now exposed in status endpoints
  • v0.1.1 adds a replay-dedupe guard and makes duplicate-drop behavior visible in metrics
  • v0.1.2 adds per-interaction correlation IDs so operators can grep one user turn across receive, dedupe, progress, and reply logs
  • v0.1.3 makes richer-media limitations honest in runtime behavior by surfacing unsupported file / audio / video segments to the prompt layer
  • v0.1.5 adds latency histograms, v0.1.6 adds Postgres session storage, and v0.1.7 adds public arm64 image-smoke evidence
  • deployment-matrix.md now says explicitly which routes are stronger repo-owned paths and which are only documented compatibility paths
  • richer-media stage 1 now makes the repo safer to demo because unsupported attachments no longer create the illusion that the agent already consumed them
  • /metrics now exposes Prometheus-style runtime counters for connection state, traffic, ACP calls, and conversation gauges
  • has a public roadmap instead of pretending the current shape is the final shape
  • actively invites contributions on session storage, richer media, and stronger runtime visibility
  • better than a throwaway demo: it already has architecture notes, quickstart docs, and health endpoints
  • best next high-signal OSS work here is Redis session store, richer media, and tracing / deeper observability
  • if you want your own bot repo packaged this clearly, the blunt paid read starts at ¥29.9

Useful links: roadmap · contributing · help wanted issues

What you get today

  • OneBot 11 reverse and forward WebSocket modes
  • private chat + group mention triggers
  • persistent conversation sessions keyed by QQ conversation
  • image download and pass-through into the ACP agent flow
  • progress message streaming from plan / tool events
  • health and readiness endpoints
  • mock ACP agent for local integration work
  • ESLint, typecheck, tests, and GitHub Actions
  • Docker packaging for cleaner deployment
  • clear extension path for richer media and stronger observability

Quick start

  1. Clone the repo and install dependencies with npm install.
  2. Copy .env.example to .env.
  3. Start with the mock ACP agent first to validate the bridge path.
  4. Point NapCat / LLOneBot at the reverse WebSocket endpoint and run npm run dev.

Full config examples, deployment details, and the session / progress model live in the repository README and architecture doc.

Who this is for

  • engineers building self-hosted QQ bot infrastructure
  • developers experimenting with ACP-compatible local coding / chat agents
  • people who want a better starting point than mixing transport code and model code together
  • maintainers who want a clearer architecture before adding Redis, tracing, or moderation logic
  • hackers exploring multi-channel bot infrastructure after starting from QQ / OneBot
  • anyone who wants a modern repo that feels more like middleware / orchestration than a toy bot

Support

If qq-ai-bot saved you OneBot + ACP plumbing time, the cleanest support path is a small direct tip or support via the support page. Best payment note: qq-ai-bot.

  • ¥9.9 / ¥19.9 — thank-you tip if this repo saved you setup or wiring time
  • Best payment noteqq-ai-bot or qq-ai-bot setup
  • Fastest path — scan WeChat Pay / Alipay on the support page
  • ¥29.9 deploy read — best if your bot technically runs but the token / WS / Docker / landing-page story is still muddy
  • ¥29.9 quick read — one blunt paragraph + top 3 fixes for your own bot / README / landing page
  • ¥99 async review — GitHub profile, pinned repos, README cleanup, or one focused landing page
  • Public intake guardrail — do not paste private logs, credentials, QR codes, payment screenshots, internal URLs, or raw live integration output in public issues; use sponsor / paid-support intake replies first
  • Route by audience — use the sponsor prospect pipeline to choose the right proof, CTA, support note, and guardrail for homelab testers, bot builders, curators, sponsors, and paid-review customers; then use the sponsor conversion scorecard to decide Hot / Warm / Nurture / No-send before posting
  • Best fit — if you want your own AI / infra repo to feel less toy-like and more hireable

If you want broader GitHub / README packaging feedback for your own bot, agent, or infrastructure repo, the lightweight async review options are on the review page.

Best use of the ¥29.9 path: “I already have a bot repo, but it still looks toy-like / messy / too student-ish.” That is the highest-conversion case for this page.

Best use of deploy read: “The repo technically runs, but the deploy story still feels janky: token mismatches, reverse WS confusion, Docker layout, and project-page credibility are all half-solved.”

If you want to preview the tone first: open the deploy-read sample before buying.

Best email subject if you came from this page: Quick read | qq-ai-bot inbound | repo link or Async review | qq-ai-bot inbound | repo link.

If payment evidence is needed: keep payment screenshots out of public issues; move them to email / private chat and keep the public thread on repo links, proof links, and support notes.

Typical turnaround: the ¥99 async-review path is usually answered within 72 hours, often faster for simple README / landing-page passes.

Copy/paste promo pack

If you want to share qq-ai-bot in a QQ / OneBot group, submit it to a weekly newsletter, or send it to a friend without rewriting the pitch every time, copy one of these.

Shortest line

OneBot 11 + ACP + persistent sessions + progress streaming + Docker demo

Chinese version

qq-ai-bot 是一个面向 OneBot 11 / NapCat / LLOneBot 的 QQ ↔ AI 自托管脚手架。它把 QQ 消息入口、ACP agent bridge、会话持久化、进度回传和 Docker demo 整理成了一个更像 bot 基础设施的仓库,而不是只会聊天的玩具 demo。

English version

qq-ai-bot is a self-hosted QQ ↔ AI bot scaffold for OneBot 11 / NapCat / LLOneBot and ACP-compatible agents, with persistent sessions, progress streaming, and a Docker demo. It is positioned as bot infrastructure / integration glue rather than another toy chat UI.

Homelab / CasaOS tester ask

Need one real ARM/CasaOS tester for qq-ai-bot.

CI/QEMU arm64 smoke is green, but I still need a physical ARM/NAS/SBC/CasaOS report.

Tester pack:
https://github.com/happysnaker/qq-ai-bot/blob/main/docs/public/arm64-casaos-tester-pack.md

Outreach kit:
https://github.com/happysnaker/qq-ai-bot/blob/main/docs/public/homelab-outreach-kit.md

Best 3-link pack

Repo: https://github.com/happysnaker/qq-ai-bot
Project page: https://happysnaker.github.io/qq-ai-bot/
Outreach kit: https://github.com/happysnaker/qq-ai-bot/blob/main/docs/public/homelab-outreach-kit.md

Best framing for maintainers / curators: call it a QQ / OneBot bridge, bot scaffold, or self-hosted bot infrastructure project. Do not flatten it into “just another chatbot”. If posting to homelab/CasaOS communities, lead with the tester ask and keep the QEMU-vs-physical-host caveat explicit.

Fast curator update line after tester pack: Now ships stable + latest multi-arch images, passing arm64 QEMU smoke, and a 15-minute ARM/CasaOS tester pack for real physical-host reports.

Tip in 10 seconds

If this repo already saved you an hour of wiring, debugging, or README archaeology, do not overthink it. Scan one of these, leave qq-ai-bot or qq-ai-bot setup as the note, and you're done. If you are not sure whether to tip, inspect proof, buy a deploy-read, or fund qq-ai-bot #26 arm64, use the 10-second support router first. If you want something concrete back, use the ¥29.9 quick read or ¥99 async review path instead.

WeChat Pay

Fastest path for a direct ¥9.9 / ¥19.9 thank-you tip if qq-ai-bot saved you setup time.

WeChat Pay QR code for qq-ai-bot support
Alipay

Same shortest path. Best payment note: qq-ai-bot, qq-ai-bot setup, or bot repo read.

Alipay QR code for qq-ai-bot support

Roadmap tie-in: direct support helps keep work moving on physical ARM/CasaOS validation, Redis session storage, richer media, tracing, and the next production-grade polish round.

Fastest homelab inbound path: if you came from CasaOS, Docker, AwesomeHomelab, or a self-hosted roundup, start with the tester pack; the best support note is qq-ai-bot #26 arm64.

Public issue privacy rule: no private logs, credentials, QR codes, payment screenshots, internal URLs, or raw live integration output in public issues.

Low-friction promo ask: if you share this repo in a QQ / OneBot / self-hosted AI group, the most useful link is the project page plus the note OneBot 11 + ACP + /metrics + Docker demo.

Best 3-link promo pack: repository + project page + Docker quickstart.

July offer: the first paid request this month gets one extra public page / README in the same async pass.