For the team

Ask the repository.
It answers from HEAD.

The answer is in the code, and today getting it means interrupting an engineer. Install PRCHD once on a computer your team already owns and bind a Slack channel to a project. Anyone in that channel can then ask the code directly, from the Slack they already use — and the answer comes back stamped with the commit it was read from.

One computer · every project · one Slack workspace

#paymentsSlack
  1. Tom Harding10:42

    @PRCHD does a declined card retry, and how many times?

    eyes · PRCHD

  2. PRCHDAPP10:42

    Working on it…

  3. PRCHDAPP10:43

    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.

What actually changes

The slowest component was never the compiler.

It is the round-trip to the one person who has the context. Every “does our webhook retry?” becomes an interrupt, a thread, a meeting, or a wiki page that is wrong by Thursday.

TodayWith a team host
“Who knows the payments code?” — find them, wait, interruptAsk in #payments; the answer lands in the thread while the engineers keep coding
A crash report sits in a queue until someone triages itThe crash fires a webhook, and the triage recipe your team wrote reads the real code and files the story
The weekly report is somebody’s Sunday eveningA scheduled recipe writes it and posts it
An exec’s question travels down three layers and backThe exec asks in a channel and reads the answer
Answers come from a wiki that describes last quarter’s codeAnswers come from HEAD, footed with the commit they were read from
Giving someone answers means giving them repository accessChannel membership is the whole grant
Automation lives in CI YAML and can only run testsAutomation is a prompt with a posture, so it can do judgement work

Today the fastest way to get this answer is to interrupt the person who knows.
With a team host, the question still gets asked, and the person who knows keeps coding.

Who can ask

Your codebase stops being a thing only engineers can query.

Ask · Run · React

Ask a question, run a recipe, or let an event start one.

Ask

Mention @PRCHD in a bound channel with the question you would have taken to an engineer. An agent reads the real checkout, uses the team’s own tools, and answers in the thread.

  • Footed with the project, commit, branch, and mode
  • Follow-ups in the thread continue the conversation
  • Nothing on disk changes

Act-mode inquiry in the project root

Run

The jobs your team repeats, written once as recipes with a fixed posture. Start one from a private channel, a cron schedule, or a webhook.

  • Work-mode recipes leave a branch to review
  • The run announces itself and threads its result
  • Everything settles into a durable record

/prchd run <recipe>: <input>

React

When something happens elsewhere — a crash, an alert, a red build, a ticket moving — a webhook trigger turns it into a run.

  • Sealed to your computer’s key on arrival
  • Verified by a function you wrote
  • Deduped, rate-limited, deleted as the run starts

Trigger URL → verifier → recipe

The footer

An answer you can date is an answer you can trust.

A wiki page can’t tell you when it stopped being true. Every answer here names the project, the commit, the branch, and the mode it was read under, so nobody has to ask how current it is.

  • The question reaches the agent exactly as typed
  • A follow-up in the same thread joins a discussion already in progress
  • A mention in a channel that is not bound is silent, and recorded
  • A channel can pin the model and reasoning effort its answers use

Read the whole exchange →

#payments-engSlack
  1. Sam Prescott09:12

    /prchd run Repro harness: PROD-882

  2. PRCHDAPP09:12

    Running Repro harness in payments-api — asked by @sam

  3. PRCHDAPP09:31

    Reproduced. A failing test now covers the decline path that drops the retry counter when the issuer returns a 402 without a decline code.

    branch  prchd/repro-prod-882
    tests   1 failing (spec/billing/retry_policy_spec.rb:88)
    kept    worktree — there is work to review

The four ways work arrives

One recipe. Four ways to fire it.

Work reaches the team host four ways, and two of them start on their own. Every one ends in the same place: a real agent session, on real code, on the team’s own computer, recorded in a durable event log.

01

Someone asks

A mention in a bound channel opens an Act-mode inquiry in that project’s checkout.

  • Reacts, posts “Working on it”, edits the answer in
  • Follow-ups in the thread continue the same conversation
  • The question reaches the agent exactly as typed
02

Someone runs a recipe

/prchd run announces itself in the channel and threads its result under that announcement.

  • Runs need a private channel the operator enabled
  • The channel supplies input text; mode and target stay the recipe’s
  • Every run is announced in the channel with who started it
03

Something happened

When an event happens elsewhere, a webhook trigger starts the run: one project, one recipe, and one verifier bound to a URL.

  • The service seals every delivery on arrival
  • Your verifier runs before any prompt does
  • Repeats dedupe; failures dead-letter and stay replayable
04

It’s Tuesday at 9

For the jobs that should just happen: five-field cron in the host’s timezone, per project, at minute granularity.

  • A slow run joins the one in flight rather than stacking
  • A window missed while asleep is skipped, not backfilled
  • The prompt can interpolate the last successful run

A webhook never points at your computer

  1. 01The eventA crash, an alert, a red build, a ticket movingtheir system
  2. 02Sealed on arrivalECIES over P-256; ciphertext at restPRCHD service
  3. 03Collected outboundThe host polls for it — triggers need no inbound portyour computer
  4. 04Your verifierFresh process, 2 s, the exact transmitted bytesyour computer
  5. 05The recipeA stored prompt under its own posture, with your variablesyour computer
  6. 06The deliverableA story filed, a branch left, a summary postedyour computer

What the agent can actually reach

It can look before it answers.

A chatbot over an index answers from a stale copy of the words. The agent here has the repository itself, a shell, a browser, and the team’s other systems.

The real working tree
The checkout itself, as it is on disk. The agent reads files, follows imports, and reads the git history to see how the code got that way.
Commands and processes
A Work-mode recipe can install, test, build, start the dev server, and read the output. “Is this actually broken?” gets settled rather than argued.
A browser
A built-in server drives a browser already on the computer: open a page, click through it, read the console, screenshot what it sees. Ships off; enabled per project.
Slack itself
A second built-in server lets a run post its own report — list channels, find a person, post, DM, edit, upload. Ships off; enabled per project.
Whatever the team plugs in
The tracker, the crash reporter, the warehouse, the docs platform. Configured on the agent CLI, per project root — which is why any MCP server that exists today already works.
Secrets, sealed and write-only
Per-project environment values are Keychain-sealed. The processes that need them receive them, and no surface, log line, or event can read one back.

Three postures

Chosen before the run starts, so it can finish with nobody watching.

ModeYour repositoryTools with effectsTypical use
PlanReads onlyNone attachedResearch, proposals, design review
ActReads onlyYes — file a ticket, post, browse, queryEvery Slack question; triage that files a story
WorkWrites, runs, commitsYesRecipes that produce a branch

Act leaves your repository exactly as it found it, and still gets things done in your other systems.

The channel is the grant

Joining the channel is the whole onboarding.

Access works the way your Slack already does. Membership of a bound channel is the entire grant, and every member of it has the same reach. Add someone to the channel and they can ask; remove them and they are removed from the product.

Public channels can never run anythingSlack Connect channels are refusedOne project, one Slack workspaceRead the mechanism →

Bindings are re-checked, not assumed

  • A private channel made public loses its run permission automatically
  • A channel that became externally shared is unbound
  • Every reconnect re-reads each binding against Slack’s own answer

A permission granted on Monday lasts only as long as the condition it was granted under.

What teams write

If your team does it twice, write it down once.

Triage, reports, first-pass reviews: the jobs that repeat are the ones that wait longest for someone to find time. Everything below is a recipe a team writes for itself — a prompt plus a posture, run by the same engine — and adding one takes a minute.

The trigger cookbook — when X happens, do Y

The eventThe verifier’s jobWhat runsWhat the team sees
Crash reportedCheck signature, drop below-threshold, dedupe on issue idTriage recipe (Act)A story in the tracker, a summary in #incidents
Error spike or alert firesVerify, extract service and severity as variablesBlast-radius recipe (Act)Which code, which deploy, who to wake
CI build goes redVerify, dedupe on run idFailure-analysis recipe (Act)Cause and suspect commit in the build channel
Ticket moved to Ready for devVerify, extract ticket keyImplementation recipe (Work)A branch and a draft PR waiting
Ticket filed with a labelVerify, extract summaryGrooming recipe (Act)Acceptance criteria and a scope estimate on the ticket
Pull request openedVerify, extract numberReview recipe (Work)An anchored GitHub review
Release tag pushedVerify, extract tagRelease-notes and docs recipesNotes drafted, docs PR opened
Analytics anomalyVerify, extract metric and windowCorrelation recipe (Act)The deploys and diffs that line up
Dependency advisoryVerify, extract package and versionReachability recipe (Act)Filed only if this codebase reaches the path
Support ticket tagged possible bugVerify, extract ticket bodyQualifier recipe (Act)A real story, or a correct answer for the reply
Form submissionVerify, extract the bodyIntake recipe (Act)Deduped against existing tickets, filed or linked
Uptime check failsVerify, dedupeDiagnostic recipe (Act)Recent changes to the failing path, posted

Reports nobody has to write

Each is one recipe on one cron line, delivering into a channel through the Slack notifier. Because a prompt can interpolate the last successful run of the same recipe, a report can honestly say since last time instead of guessing at a window.

Daily

  • What merged yesterday, in plain language
  • What needs a human
  • Overnight failures
  • New crash groups matched to code
  • Flaky-test movement

Weekly

  • Shipped and in flight, for leadership
  • Review latency and PR ageing
  • Test-gap report on the modules that actually change
  • Dependency drift
  • Documentation drift
  • Design-system drift
  • Dead code and stale feature flags
  • Security posture delta

Monthly

  • Architecture health assessment
  • Instrumentation audit
  • Onboarding-doc refresh
  • Performance regression trend
  • The board-deck engineering summary
Host dashboard showing a trigger with its last deliveries: ran, ignored, and rejected with a reason

Who gets what

Every role has a question it used to take to an engineer.

For most of the team, the whole product is a Slack channel they are already in. Pick a role to see its question, and what changes when the code answers it.

Product managers

@PRCHD is the export limit still 500 rows, and where is it enforced?

Product questions get answered from the code, without booking an engineer.

Engineering managers

@PRCHD what’s changed on main since Friday, and what’s risky in it?

The status an engineering manager currently assembles by asking five people assembles itself.

Founders and CTOs

@PRCHD how hard would it be to support a second currency?

Leadership gets ground truth directly, at 22:00, without pulling anyone off anything.

Support and QA

@PRCHD a customer says CSV export drops the last row — is that possible in the current code?

The first-line answer comes from the code, names its commit, and takes a minute.

On-call and incident response

@PRCHD this stack trace [paste] — which commit last touched the line it dies on?

The alert arrives already triaged, attributed, and written up.

Designers

@PRCHD are the new empty states live on main, and what do they look like?

Design QA happens against the real app, without waiting for a build or an engineer.

Data and analytics

@PRCHD signups dropped 12% on Tuesday — did anything ship that touches the signup path?

Analytics questions and code questions become one investigation.

Docs and technical writing

@PRCHD is the rate-limit number in our docs the number in the code?

Doc drift gets caught on a schedule, not by a customer.

Security and compliance

@PRCHD which endpoints skip the auth middleware?

Security questions get answered from the code, not from a spreadsheet of what someone believed it did.

The limits

Know where it stops before you install it.

Every product has edges. These are ours, stated plainly, so you can plan around them before the first channel is bound.

  • macOS on Apple Silicon

    The host runs there today. There is no Windows, Linux, or Intel build yet.

  • Slack is the identity model

    Access is channel membership, with the same reach for every member. If your compliance story needs per-person roles inside the tool, this is not that tool.

  • The Slack app is yours

    Installed into your Slack workspace from a published manifest. Socket Mode apps can’t be listed in the Slack Marketplace, so setup is paste-two-tokens rather than one-click.

  • Asking happens in channels

    The bot’s messages tab is read-only. A mention dispatches a turn; a plain reply never does.

  • Model access is yours

    PRCHD drives the agent CLIs your team already signs in. It resells no model access.

  • Tools come through the agent

    Third-party tools reach the agent through its own configuration; PRCHD has no MCP client. The range is as wide as the agent’s, and none of it is ours to certify.

  • Usage in tokens, not dollars

    Token and context usage are reported. Monetary cost is not.

  • A trigger runs a stored recipe

    The recipe the operator bound to it, under that recipe’s posture. A trigger can’t name its own prompt, mode, or target, and that limit is the point.

  • Slack is words, not widgets

    A mention and one slash command are the whole vocabulary. There are no buttons, modals, home tab, or message shortcuts.

  • One placeholder, then the answer

    A thread shows one “Working on it”, then the answer edits itself in. A long run stays quiet while it works.

  • The first real delivery is the test

    A trigger has no test button. Its URL is live immediately and answers every delivery as ignored until its verifier exists.

  • The verifier’s isolation is a contract

    Your own code runs in its own short-lived process, with common globals removed to catch accidents. It guards against slips in code you wrote, not against code you didn’t.

Where your code lives

The computer you own is the computer that runs.

Repositories, worktrees, prompts, transcripts, diffs, command output, attachments, environment values, and the event log stay on the computer you installed PRCHD on — the one that already has your code and your tools. The agent works there, so there is nothing to copy into a hosted environment and nothing uploaded to be indexed.

One small public service handles what a computer with no open port can’t do on its own: it enrolls your computer’s identity, forwards short push notifications, and holds webhook deliveries until your computer collects them. Each delivery is sealed to your computer’s public key the moment it arrives, so the service only ever holds ciphertext, and it is never in the path of your work.

Your checkout stays where it isOutbound only — nothing listensRead the mechanisms →

Standing watch

The code already knows.
Let the whole team ask it.

One person installs it in an afternoon, on one computer, for every project. Everyone else is already in the channel.