Feedback → issues
Issues labelled feedback are where feedback is remembered: each links the original messages, and later messages in the same thread are added as comments.
What gets filed
Section titled “What gets filed”| channel | starts an issue | added as a comment |
|---|---|---|
| Matrix | a message that mentions the bot | any later message in the same thread |
Bluesky thread, mentions |
any message | later messages in the same thread |
Bluesky search, author |
never (read them for the overall mood) | — |
| GitHub Discussions | never (agents file what’s actionable) | — |
Never, on any channel:
[agent]messages (accounts listed inagents, or your own 🤖 reports) don’t start an issue, even when they name the bot. They’re still added as comments to an issue that already exists.- Private Matrix rooms go into a repo’s issues only if the room’s topic names that repo.
Each issue quotes the messages with author, date and link. Text is made inert: @names don’t ping GitHub users, and HTML comments can’t hide text.
Idempotent
Section titled “Idempotent”Every quoted message carries a hidden marker (<!-- feedbai:item=… -->). Before filing, feedbai reads the repo’s feedback issues and comments, so a message is never filed twice. Overlapping runs are safe: schedule it as often as you like.
Ways to run it
Section titled “Ways to run it”The hosted hub (nothing to run; invite-only for now, ask in #feedbai): install the feedbai GitHub App on the repo (it can write issues and read feedbai.config.json, never your code), and commit feedbai.config.json. Every 10 minutes the hub files from the channels it can read (public Matrix rooms its bot is in, Bluesky threads), using its own accounts. See the hub.
By hand or from an agent:
feedbai issues --dry-run # what would be filedfeedbai issues # file it; default window --since 1dIt needs a GitHub token (GH_TOKEN, GITHUB_TOKEN, or a gh login) and the repo (GH_REPO, GITHUB_REPOSITORY, or the git remote).
GitHub Actions, with your own bot: copy .github/workflows/feedbai.yml (hourly, feedbai issues --since 2h) and add the bot’s secrets to the repository: FEEDBAI_MATRIX_TOKEN, FEEDBAI_MATRIX_USER. For Bluesky mentions, also pass FEEDBAI_BLUESKY_IDENTIFIER and FEEDBAI_BLUESKY_PASSWORD in the workflow’s env. Without a Matrix token the workflow skips, so it doesn’t run alongside the hub.
Closing the loop
Section titled “Closing the loop”When a feedback issue is fixed (closed by a pull request or commit, e.g. “Fixes #42”, or labelled fixed), the hub replies once where the feedback was given, in the same thread:
🤖 This is fixed, thank you for telling us: https://github.com/you/repo/issues/42
and notes the reply on the issue. Closing it any other way (answered, duplicate, not planned) sends nothing. It’s the same short text every time, never written by a model or copied from anyone’s message. Matrix for now (the hub’s bot must be in the room, which it is if it filed the message); Bluesky and feedback records next. Only issues closed in the last week are answered, so turning it on never answers old ones in a burst. To turn it off, set "replies": false on the project in feedbai.config.json.
An agent in the loop: feedbai triage
Section titled “An agent in the loop: feedbai triage”The hub’s automatic filing copies every message that mentions its bot, with no judgment. With an agent in the loop (architecture), the project’s own agent decides what becomes an issue:
feedbai triage > plan.json # a model proposes: kinds, issues to file, ✅ to addfeedbai triage --apply plan.json # plain code acts: files the issues, reacts ✅- The model is one slot, any OpenAI-compatible API: OpenRouter, a local model, or a provider’s key (
FEEDBAI_TRIAGE_ENDPOINT,FEEDBAI_TRIAGE_MODEL,FEEDBAI_TRIAGE_KEY). Without one, nothing is filed: triage in an agent session instead (feedbai, thenfeedbai file), with whatever agent you already use. - It follows the project’s guidelines,
.feedbai/guidelines.md, written by its maintainers (ours). - It can’t do anything but propose. It sees numbered messages, never links. Its answer is checked: only messages it was given, no bots’ messages, known kinds, plain-text titles, at most 5 issues per run. Anything else is dropped. Acting on the plan is plain code (
feedbai file,feedbai react). - In CI, the two steps run in separate jobs with different powers, and with no secrets to create:
.github/workflows/feedbai-agent.yml. Read → triage (a model, no secrets) → act (plain code, no model). GitHub provides the token for issues; the model’s key, if any, is the only secret (in the triage job only); for the Matrix room, the read and act jobs prove to the hub which repository they are (a short-lived token signed by GitHub,id-token: write), and the hub’s bot reads and ✅s for them, in rooms whose topic names the repository (github.com/owner/name, the room admins’ consent). - Set
"filing": "agent"on the project infeedbai.config.jsonso the hub stops copying mentions for that repo; it still posts the “This is fixed” replies.
Show your project on feedbai’s home page
Section titled “Show your project on feedbai’s home page”Set "listed": true on the project in feedbai.config.json (public repository, GitHub App installed) and it appears in “The loop, live” on the home page: its name, the kinds of channels it listens to, and how many feedback issues were filed and fixed in the last 30 days, linking to them. Never room names, queries or anything people wrote. Off by default; remove the line to leave.