For the team
Ask the code in Slack, not the engineer in the meeting
The question is small, the answer is in the code, and the only person who knows is in a meeting. That round trip is the slowest component in your system, and the compiler has nothing to do with it.
Ask the way you’d ask a colleague.
- Ask in a channel you are already in. Mention the bot with the question as you would type it to a colleague. Nobody installs anything or creates an account.
- Watch it take the question. The bot reacts to your message and posts a placeholder in the thread.
- Read the answer and its footer. The placeholder edits itself into the answer. The footer names the project, the commit, the branch, and the mode.
- Argue with it in the thread. Colleagues reply as normal. A follow-up mention in the same thread continues the same conversation, including the messages people typed in between.
- Take the answer somewhere. It quotes real file paths, so the engineer who picks it up starts from a line number rather than a description.
@PRCHD does a declined card retry, and how many times?
eyes · PRCHD
Working on it…
Yes — declines classified as soft (issuer timeout, insufficient funds) are retried up to 3 times with exponential backoff at 1m, 5m, and 30m. Hard declines (stolen card, invalid number) are never retried.
The retry budget is per charge, not per customer, and it is enforced in billing/retry_policy.rb rather than at the gateway.
So a customer sitting in a 402 loop sees three attempts, not one. That is what support has been describing.
@PRCHD does that budget survive a gateway webhook replay?
It does. The counter Ben is describing lives on the charge record, not on the request, and the webhook handler is idempotent on the gateway’s event id — a replay reloads the same charge and reads the same count.
The one gap: a replay that arrives after the charge is archived is logged and dropped without touching the counter, in billing/webhooks/gateway.rb:214.
The channel is the grant.
Who can ask is simply who is in the channel. The operator binds one Slack channel to one project, at the machine; everyone in it has the same reach, and removing someone from the channel removes them from the product. Binding is also an export decision — an answer may quote code from that project, which is exactly why it is an action taken at the machine rather than in Slack.
A mention opens an Act-mode inquiry in that project’s checkout. Act reads the code and leaves the repository unchanged. It can still call the tools the project exposes, so “file that as a bug” is a legitimate answer to a question. The question reaches the agent exactly as typed — people paste stack traces and crash dumps, and nothing is rewritten, prefixed, or echoed back.
A channel can pin the model and reasoning effort its answers use, so a high-traffic support channel and a deep-research channel need not spend the same. Replies queue in a durable outbox with backoff, and mentions posted in the last fifteen minutes while the computer was offline are answered on reconnect; an older one gets a “missed” reply instead of a stale run.
Every answer names the commit it was read from.
An answer you can date is an answer you can trust.— answered from payments-api @ 4f2c9ab (main) · Act mode is the difference between this and a wiki page that was right in March. The answer came from the working tree at a named commit, on a computer the team owns, and anyone in the thread can check it out and look.
The thread is the unit of memory. A follow-up mention joins a discussion already in progress rather than restarting, so the second question can say “that budget” and mean what Ben said two messages earlier. Long answers split at paragraph boundaries across up to four messages, then say so rather than trailing off.
Where the thread stops.
A thread shows one “working on it”, then the answer. The placeholder edits itself into the reply. A long run looks quiet while it is thinking; its progress stays out of the thread.
Only bound channels get answers. A mention anywhere else is recorded in the audit trail and left unanswered, so a room that did not opt in stays quiet. Asking happens in channels: the bot’s messages tab is read-only, and a turn starts from a mention, never from a plain reply in a thread.
Slack is words, not widgets. A mention and one slash command are the entire vocabulary — no buttons, modals, home tab, or message shortcuts. On reconnect, channel-level mentions are read back; a follow-up posted inside a thread while the computer was offline is not.
An inquiry answers and leaves no branch behind. Work that changes files is a stored recipe, started with /prchd run from a private channel the operator enabled for runs. A public channel can never be runs-enabled, and the channel supplies input text only — the mode and the target stay the recipe’s.
The channel is the boundary: there are no PRCHD accounts, roles, or per-person permissions. If your compliance story requires per-person roles inside the tool, this is not that tool.
Let the code answer. Let the engineers keep coding.
One computer, every project, one Slack workspace. For most of the team, all of PRCHD is a channel they are already in.