Every agent session becomes team knowledge.
Shared with every developer on the team, and with the agents they use. Below: how to start, where the record comes from, and the five things it does to an answer.
Team members, commits and answers on this page are illustrative examples.
Install, sign in, import your history
Three steps in whichever coding agent you use. You can install becos in more than one — they all feed the same team record.
- 1
Install the plugin
One plugin for Claude Code, Codex or opencode. Commands for each are below.
- 2
Sign in
Run the login command in your agent, sign in through the link, then paste back the code it shows. Do this on every computer you use.
- 3
Import your history optional
Backfill your past sessions so the record starts with months of decisions, not an empty page.
Claude Code
claude plugin marketplace add becos-ai/becos-plugins claude plugin install codecollab@becos
Then restart Claude Code.
/codecollab:login
Open the link it prints and sign in with your team account. The page then shows a code — finish by running:
/codecollab:login <code>
/codecollab:backfill
It lists the past sessions it found and uploads nothing until you say yes.
claude plugin marketplace update becos claude plugin update codecollab@becos
Codex
codex plugin marketplace add becos-ai/becos-plugins codex plugin add codex-codecollab@becos
Restart Codex, run /hooks inside it to trust the plugin's hooks, then start a fresh task.
log in
There's no slash command — the plugin recognises the phrase. Open the link it gives you and sign in with your team account, then paste the code the page shows back into the task.
backfill my past sessions
It lists the past sessions it found and uploads nothing until you say yes.
codex plugin marketplace upgrade becos
Then run /hooks to re-trust the hooks and start a fresh task. A task opened before the upgrade keeps the old version.
opencode
~/.config/opencode/opencode.jsonc
{ "plugin": ["@becos-ai/oc-codecollab@0.25.0"] }
Pin an exact version, then fully quit (Cmd-Q) and relaunch opencode.
/codecollab-login
A dialog shows a sign-in link: press Enter to open it and sign in with your team account, then press Tab and paste the code the page shows. From a terminal instead: bunx @becos-ai/oc-codecollab login.
/codecollab-backfill
It lists the past sessions it found and uploads nothing until you say yes.
Change the pinned version to the latest release on npm, then fully quit and relaunch opencode. opencode caches each version, so bumping the pin is the update.
Your record follows you
The record lives with your team, not your laptop — sign in on another machine and the same history is there.
Then work as usual
Sessions are captured in the background. Ask your agent something the team has already worked out.
Every session adds to it. Every teammate's agent draws on it.
Each agent session — whichever tool, whoever is driving — leaves the decisions, dead ends and conventions it produced in the same team record. Nobody files it; nobody gets interrupted to explain it later.
write path: every session • read path: every agent, scoped to your team
Add a retry with exponential backoff — 3 attempts, then dead-letter. Re-run the charge each attempt.
generic; no idea the team already solved thisMatch the existing pattern: key ledger inserts on (invoice_id, attempt) so a replay is a no-op. @rhea's original loop double-charged an invoice in April; @dan replaced it with idempotent writes. You're picking up a convention two people already landed on — don't reinvent it.
@sam wasn't on the team in April. The record was.
Grounds its answers
Answers are built from what the record holds, citing the commits and messages behind them. When the record has nothing on a question, becos says so, instead of filling the gap with a guess that reads just as confidently.
Most likely Elasticsearch — it's the common choice for a search service of this shape.
pattern-matched, not looked upOpenSearch 2.x. The service moved off Elasticsearch in 2025 on licensing and cost. If the record held nothing on the search service, becos would say so — not guess.
Sure — swaps the SQS client for a Redis list-backed queue and updates the workers.
walks into a known failureFlagging this: the team moved off Redis queues in 2025 after messages were lost on a failover. SQS is the standard now. Want to override it anyway?
Brings back the decisions that apply
Ask for something a recorded decision already ruled out, and the answer brings that decision back — with its date and rationale. You can still override it; you just do it knowingly.
Stays on your team
Repository memory is scoped to your tenant. Results are filtered by tenant prefix before any result reaches the model — a cross-tenant hit is discarded, never shown.
Security model & controls mapping (SOC 2, EU AI Act, NIST SSDF) →
scope team:becos filter tenant prefix, before the model cross-tenant match → discarded
30 seconds — per the comment in api/config.py.
8 seconds, since the June 2026 latency work. The 30s in the api/config.py comment is stale — the record marks it superseded on 2026‑06‑19.
Knows what's current
A value that was replaced comes back marked as replaced, with the date and what replaced it. Entries still being written, or whose write failed, are labelled so the agent is told not to present them as settled.
Citations resolve
A citation isn't a footnote you take on faith. Ask becos to resolve it and it returns an exact excerpt of the stored commit or message — no summarisation, no model call in the path. You check the source, you don't trust the summary.
The recalled fact says retry handling was made idempotent. Pull the exact source it was built from.
commit 91d77af billing: idempotent ledger retries "invoice webhook can fire twice. keying ledger inserts on (invoice_id, attempt) so a replay is a no-op." changed: services/billing/ledger.py (+37 -6) author: @dan date: 2026-05-06T14:22:09Z
Two more, on ordinary questions
None of these need a special prompt. They're the questions that come up mid-task, where a confident wrong answer costs the most.
Probably in an auth middleware — try middleware/auth.py or a decorator on the route handlers.
gateway/session.py — verification was pulled out of the app into the gateway during the SSO work so every service shares one path. Owned by @rhea.
Yes — new_checkout looks unused in the code, safe to remove along with its branches.
Hold off. new_checkout is still at 40% in production. In @mara’s session on 22 Aug the full cut-over was held until the fraud-review sign-off, which is still open.
What ships today, and how it's built
Everything below is live now.
resolve_event returns an exact excerpt of a cited event's stored source — no summarisation, no model call.thinking is off unless you turn it on. Each can be turned off.event_id and labelled with its status, so pending or failed entries are marked as such.Decision history
Ask what the answer would have been six months ago. becos keeps a dated timeline per entity, so an answer can show how a decision changed over time — not just its latest value.
Layered recall
Search, then timeline, then resolve: broad, cheap triage first, and full cited evidence only for the facts that survive — so grounding stays fast over a long history.
Team activity
Ask what a developer, product or feature has seen lately and get the decisions and dead ends from the team's agent sessions, with author, repository and time on every line. For teams →
See it on your codebase
Connect one repo and ask your agent a question you'd normally have to interrupt someone for.