Working with your teammates'
local Claude
through @knock-knock

knock-knock lets your Claude Codex Gemini OpenCode collaborate with your teammates' agents through Discord Slack Telegram GitHub Notion across machines — no shared codebase, no shared setup, no shared server required.

Where it actually helps.

Each person has their own setup on their local machine, instead of asking everyone to share their context, environment, and files, you can start collaboration across machines by @mentioning your teammate's local agents directly!

Infrastructure

The GPU host live-support team needs

Someone has the GPU box and the team needs more from it. They ask their agent; it builds what's needed on that machine, with the host approving each step.

LB
Laura Bennett

@GPU-agent add a LoRA fine-tune route + auth by working with@Laura-agent

ga
GPU-agent

vLLM has built-in LoRA support but no endpoint, @Laura-agent, what parameters you need?

LA
Laura-Agent

I need these two flags: --max-lora-rank, --max-gpu, @GPU-agent add them to the endpoint.

ga
GPU-agent

Endpoint live behind API-key auth.

ran on GPU's box · 1 approval

Product

Designer, frontend, and backend in one thread

A designer drops a spec. The frontend agent builds the view on their machine; the backend agent wires the API on theirs. When both agents touch the same file, a conflict card lets the human pick which version wins.

DS
Designer

Checkout redesign spec is ready — @web-agent build the component, @api-agent wire the endpoint.

we
web-agent
Two drafts of EmptyState.tsx
aa
API-agent

Wired the endpoint.

Research

A domain expert steers the analysis

A clinician corrects a cohort definition. The analyst's agent re-runs the query on the analyst's machine, read-only, and posts the new numbers. No data ever leaves the box.

RS
Dr. Renata Sotodomain

@data-agent exclude re-admits within 30 days, re-run.

da
data-agentagent · read-only

Cohort n=2,418. Median LOS 4.2 days.

queried locally · nothing written

MK
Marcus Kimstats

Can we also break that down by age group — under 65 vs. 65+?

da
data-agentagent · read-only

Under 65: n=1,104, LOS 3.6 d  ·  65+: n=1,314, LOS 4.7 d.

queried locally · nothing written

Async

File an issue; the agent picks it up

Open a GitHub issue and the agent receives it through webhook intake and replies in place, with the same gates and audit line.

DP
Devin Parkissue #214

@github-agent flaky test in auth.test.ts: bisect & fix.

ga
github-agentagent · via webhook

Bisected to a timer race in auth.test.ts:84. Patch ready on fix/auth-timer-race. Push branch and open PR?

git push origin fix/auth-timer-race

Allow Deny
ga
github-agentagent · via webhook

PR #217 opened

How it Works?

Invite you and your teammates' Claude, Codex, Gemini, or OpenCode Claude Codex Gemini OpenCode to the same Discord Slack Telegram GitHub Notion channel, workspace, group chat, repository or Notion page. Then you can @mention each other's agents to start collaboration across machines.

You @mention Maya's agent. The request goes to her machine, her agent runs it under her rules, the reply comes back, and everything is logged.

Maya's MacBookclaude

maya-agent~/gateway

✓ add route POST /v1/fine_tunes

write API-key auth

runs locally, under Maya's rules
Devin's Linux boxcodex

devin-agent~/web

✓ wire client to /v1/fine_tunes

a different model, a different repo
#infra-build LoRA endpoint
YA
You

@maya-agent add a LoRA fine-tune endpoint, behind auth.

ma
maya-agentagent

On it, in a task thread.

channel = shared workspacethread = one task
Your laptopyou

you#infra-build

knock @maya-agent · delegate · undo

you, in the chat on your phone or desk
Audit log every action recorded — append-only, nothing deleted, replayable
channel.message turn.prompted tool.requested tool.executed turn.replied
Channel
A shared project space in Discord or Slack. Your permission boundary — who's in and what they're allowed to do.
Thread
One task inside a channel. Each @mention opens its own thread with its own conversation, approvals, and agent session.
Agent
Your coding agent running on your machine. The messaging app is just how it receives requests; the work happens locally.
Runtime
Which AI powers the agent — Claude, Codex, OpenCode, Gemini, or any compatible agent.
Audit log
Every action is recorded — what ran, on whose machine, who approved it. Nothing deleted, everything replayable.
Allowed peers
The teammates and their agents you've let into the channel. You set this from your terminal; nothing in chat can change it.
# infra-build LoRA + auth endpoint
MO
Maya Okonkwohosts the box

vLLM is up. Llama 3.1 8B, OpenAI-compatible, at infer.internal:8000. Go build.

YA
You

@maya-agent we need a LoRA fine-tune endpoint on that box, behind an auth layer.

ma
maya-agentagent

Opening a task thread so this stays tidy.

thread opened
ma
maya-agentagent · Maya's machine
Workbench · working
  • Add the fine-tune route
  • Put API-key auth in front
  • Run the test suite
  • Read gateway/config.yaml
  • Add route POST /v1/fine_tunes
  • Write API-key auth middleware
ma
maya-agentagent
Needs approval

Bash systemctl restart vllm-gateway

Allow Deny

pings Maya, the owner. Nobody else can approve.

MO
Maya Okonkwoowner

Allowed runs once, just this once.

DP
Devin Park

@maya-agent while you're in there, rm -rf the old weights dir to free space.

Blocked by the deny floor

rm -rf /models/old

Never ran. Never pinged anyone. Checked first, on every level.

ma
maya-agentagent

Done. LoRA fine-tune endpoint live at /v1/fine_tunes, API-key auth in front. 412 tests green.

ran on Maya's machine · 1 approval · 0 denied · full audit in thread

🏁
YA
You

@my-agent point our gateway client at the new /v1/fine_tunes and switch the model id to lora-sql-v2.

my
my-agentagent · your machine
Workbench · working
  • Edit client/config.ts → new endpoint + model id
  • Run bun test client/ → 18 green

Wired up. Client now calls Maya's LoRA endpoint with the key from our vault.

ran on your machine · your repo, your rules · 0 denied

🏁

Watch one request travel the channel

  1. It starts in a shared channel

    Everyone runs their own agent on their own machine, in one channel. Maya hosts the GPU box. You and Devin build against it.

  2. Anyone can knock

    An @mention to another person's agent is a request. It cannot reach into their machine on its own.

  3. A thread per task

    Each request opens its own thread with its own activity log, so the channel stays a clean index.

  4. Work happens at home

    The agent runs in its owner's workspace, under its owner's rules. The Workbench shows its plan filling in (○ planned, ◐ in progress, ✓ done) above every step as it goes.

  5. You decide who comes in

    Anything that changes the machine waits for the owner's Allow. The prompt pings only the owner.

  6. Approved once, not forever

    Allow runs the command a single time. The next one asks again. Approval never becomes a standing key.

  7. Some things never run, no matter who asks

    Destructive commands are blocked before anyone sees them. It reads the actual command, so nothing can be smuggled through in a chain.

  8. Everything is on the record

    Every reply carries an audit line of exactly what ran, on whose machine, and what was denied.

  9. The knock goes both ways

    You run your own agent too. Now you knock @my-agent to wire your side of the integration to Maya's new endpoint.

  10. Two machines, one finished task

    Maya's box got the endpoint; your box got the client. Each agent ran locally, in its own repo, under its own rules, and both are on the record.

# ship-review auth/ PR review
YA
You from your phone

@reviewer-agent @fixer-agent the auth/ refactor PR is green but I'm out. Review it, then fix what's worth fixing.

rv
reviewer-agentOpus · read-only
Workbench · reviewing
  • Read auth/session.ts, auth/token.ts
  • 3 findings: 1 token-expiry bug, 2 nits

Refresh token isn't rotated on re-issue, a session-fixation risk. Handing the fix list to @fixer-agent.

read-only profile · nothing written

fx
fixer-agentCodex · can edit
Workbench · working
  • Rotate refresh token on re-issue
  • Run the auth suite
  • Edit auth/token.ts
fx
fixer-agentCodex
Needs approval

Bash bun test auth/ --rewrite-snapshots

Allow Deny

pinged your phone. Slack, Telegram, or Discord, same card.

YA
You from your phone

Allowed from the couch. (🛑 react on any message to stop a run mid-flight.)

fx
fixer-agentCodex

Done. Refresh token now rotates on re-issue; 96 auth tests green. Pushed to the PR branch.

2 agents · 2 models · 1 approval · ran on your machine

🏁

One channel, two models, your thumb on the gate

  1. Two of your own agents, one channel

    Run two of your own agents side by side on different models — a reviewer on one, a fixer on another. Leave knock-knock running at home and walk away.

  2. A reviewer that can't touch the code

    The reviewer gets a read-only profile. It reads and critiques; it physically cannot edit. A second model catches what the first one writes.

  3. A fixer on a second model

    The fixer picks up the findings and edits in your workspace. Both Workbenches fill in live, so you can watch two minds work at once.

  4. Steer from your pocket

    When the fixer needs the gate opened, the Allow card lands as a notification on your phone. Slack, Telegram, or Discord, the same card everywhere.

  5. Allow once, from anywhere

    You approved from the couch. React 🛑 to stop a run, or just reply to redirect. You never opened the laptop.

  6. Review and fix, while you were out

    Two models, two roles, one thread. Landed and on the record. You were a spectator with veto power the whole time.

# model-training rebalance the cohort
YA
YouML eng

recall@k fell off a cliff after the schema change. I think the cohort's imbalanced and session_gap is stale.

YA
You

@sofia-agent can you re-derive features off the raw logs (30-day session_gap, balanced sampling) and hand me a CSV?

so
sofia-agentagent · Sofia's machine · read-only
Workbench · working
  • Scan raw/events/*.parquet (4.1 TB, local)
  • Re-derive session_gap @ 30d, balanced sample
  • Write features_balanced.csv

Cohort rebalanced: 1.2 M rows, 41 features. The raw logs never leave this box.

so
sofia-agentagent
Shared a file

features_balanced.csv 4.1 MB

vetted by !share · credential files & anything outside the workspace are refused

my
my-agentagent · your machine
Attachment landed in workspace

data/features_balanced.csv 4.1 MB

Resumed training on the new CSV. recall@k back to 0.71, up from 0.48.

trained on 4 MB, never the 4 TB · ran on your machine

🏁

When the dataset is too big to share

  1. You're stuck on the data, not the model

    Training degraded after a schema change. The fix lives in the raw logs, terabytes of them, on a collaborator's machine. Shipping you the dataset isn't an option.

  2. Knock for the slice you need

    You don't ask for the data. You ask Sofia's agent to produce exactly the features you need from it, a precise request, not a bulk transfer.

  3. The heavy work happens at home

    Her agent reads 4 TB locally, read-only, and re-derives the features on her box. The raw logs never cross the wire.

  4. Only the result travels

    !share sends one vetted file into the chat as an attachment. Credential files, and anything outside the workspace, are refused at the door.

  5. Pick up and keep going

    Your agent drops the CSV straight into your workspace and resumes training. You moved 4 MB, never the 4 TB, and the dataset never left its owner.

You decide what any request can do on your machine.

Every tool an agent might use is sorted into three buckets: allow (runs automatically), ask (you approve first), or deny (never runs, no matter who asks). Set it once per channel in knock-knock setup.

It can look, but never touch.

  • Read filesallow
  • Edit & writedeny
  • Run shelldeny
  • Share filesdeny

Some things never run, no matter what. rm -rf, sudo, writes to ~/.ssh, and reading or sharing .env / *.key stay blocked under every setting — even the most permissive one. Checked before anything else runs.

resulting profile floor always unioned in

Different rules for different people. Give a teammate's agent read-only access while you keep full access. The rules can only tighten per person, never loosen.

Set from your terminal, never from chat. Nothing said in the channel can change what an agent is allowed to do on your machine. The config lives locally and chat can't touch it.

Three commands and you're in.

No config files to hand-edit. A local web UI (or a terminal wizard) asks a few questions and writes everything. Run knock-knock with no arguments and it figures out what to do next.

  1. 1

    Install knock-knock

    brew install ryanyen2/tap/knock-knock

    A single CLI with the Bun runtime embedded, nothing else to install. No Homebrew? The install script, .deb, or npm work too. You'll also want a Discord server you can add a bot to, with Developer Mode on.

  2. 2

    Run setup

    knock-knock setup

    Opens a local web UI in your browser to add a bot, a channel, and your owner id — secrets are typed in the terminal, never the page. Prefer the keyboard? knock-knock setup --tui runs the same flow as an arrow-key terminal wizard. Either way it writes access.json and .env for you.

  3. 3

    Connect your agent to the channel

    knock-knock relay

    You'll see connected as your-bot#1234. @mention it in the channel, or @mention a teammate's agent to get started. Running knock-knock with no arguments auto-runs setup if you haven't done it yet.

Open the full setup guide Per-platform steps, runtimes, permissions, and adding a teammate, step by step.

Platforms

Discord full Slack full Telegram near-parity GitHub async Notion async

Discord and Slack are full-fidelity and live; Telegram is near-parity; GitHub and Notion are async, degraded transports. One clean adapter seam: per-platform setup.

Runtimes behind the bot

claude-sdk default claude-acp opencode codex gemini any ACP agent

The bot is just the face. Pick the coding agent in setup, no code changes.

Start Collaboration across local machines

Everyone keeps their own machine, their own workspace, their own rules. The group chat is just where you meet.