One team · nine ninjas · no standup

How we use Recallium to build Recallium.

Six engineers, a performance lead, a security reviewer and a go-to-market lead, on different branches, at different hours, in different tools. Nobody briefs anybody. Here is one day. The ninjas are made up; the mechanics are the ones we use.

Hover to pause · ‹ › to move
23:52
1 / 8
23:52
DEV NINJA#2
Night shift, written down

Rate limiter moved to a token bucket per organization. Rejected: a bucket per key. Parked: the load test is next.

07:40
DEV NINJA#1
The standup happened while NINJA#1 was asleep

The agent opens on last night’s note: what changed, what was rejected, what is next. Read with the coffee still pouring.

✗ the standup
08:10
DEV NINJA#1
A mistake that never got made

Before the first edit, Recallium finds NINJA#2’s constraint and feeds it to the agent: cursors must stay stable under writes. Offset pagination is dead before it is proposed.

✗ the rewrite
09:35
DEV NINJA#3 → #1 → #4
Found on the website. Fixed in the SDK. Before lunch.

An SDK bug stored at 09:41 is in NINJA#1’s session by 09:48 and fixed by NINJA#4 at 10:20. Three people, three tools, zero messages.

✗ the “hey, FYI” message
12:10
SECURITY NINJA
A review that starts at the interesting part

The PR opens with the design, the rejected options and the load-test numbers already in view. The finding becomes a team rule.

✗ the “so what is this?” hour
13:15
GTM NINJA
The release note writes itself

In Claude Desktop, with no repository: “what shipped this week that pilot customers can use?” Drafted by 13:30.

✗ the “what shipped?” thread
15:40
DEV NINJA#3 + UI NINJA
A commit that explains itself

The trailer points at the decision and the finding behind the change. “Why is this here?” is answered in six months.

✗ the archaeology
18:05
DEV NINJA#1
Parked, not lost

What is mid-way, what is next, which decisions it rests on. Whoever opens the project first continues.

✗ “where were we?”

What the team gets back.

Not a nicer log. Time, and fewer mistakes. These are the things that stop happening when every agent on the team reads and writes the same memory.

7min
the agent already connects the issue

A bug found on the website at 09:41 is in front of the API engineer's agent at 09:48, before a line changes. Nobody forwarded it. By 10:20 the SDK fix is shipped, tied to the finding.

DEV NINJA#3 → DEV NINJA#1 → DEV NINJA#4, three tools, zero messages.

0standups
the catch-up takes seconds

Every session opens on what changed overnight, what was rejected and why, and what is next. It interrupts nobody.

1current answer
decisions stay current

The latest decision wins and the old one stays on record with the reason it changed. Agents stop proposing what the team walked away from.

0engineers asked
release notes write themselves

GTM asks the memory in Claude Desktop what shipped this week and gets the why in plain words. Features reach customers the day they merge.

Why first
reviews skip the “so what is this?” hour

The security review opens with the design, the rejected options and the numbers already in view. Its finding becomes a rule every session loads.

6months later
commits that explain themselves

A trailer ties each commit to the decision and the finding behind it. “Why is this here?” has an answer that does not depend on who is still around.

Resume
handoffs that resume, not restart

Work parked at 18:05 is picked up by whoever opens the project first, person or agent, from exactly where it stopped.

4tools, 1 memory
nine people, one memory

Claude Code, Codex, Cursor and Claude Desktop all read and write the same thing. Switch tools, switch models, keep the team's memory.

One day, nine ninjas.

Every moment below is something that happens in a normal week here. The agent does the remembering; the people do the work.

07:40
DEV NINJA#1Claude Code · api repo0 meetings · 4 seconds

The standup happened while NINJA#1 was asleep.

The agent

Restored last night's note, the working state and the two open workstreams before the first prompt was typed.

The ninja

Read it with the coffee still pouring, then started on pagination. Four seconds, no meeting.

At 11:52 PM, DEV NINJA#2 changed the shape of the rate limiter and went to bed. At 07:40, NINJA#1's agent opens on that note: what changed, what was rejected and why, what is next. Nobody wrote a summary. Nobody waited for 9:30.

What was waiting

Rate limiter: fixed window → token bucket per organization. PR open. Rejected: a bucket per API key, because a team shares one key. Next: the load test.

08:10
DEV NINJA#1Claude Code · api repo1 search · 0 rewrites

A mistake that never got made.

The agent

Was handed NINJA#2's constraint by Recallium before editing, and dropped offset pagination from its own plan.

The ninja

Described the task in one line, read the plan, approved cursors. Never had to remember the constraint.

The task is cursor pagination for the search endpoint. Before the agent writes a line, Recallium finds what NINJA#2 recorded last week after a bad night in the pilot, and feeds it to the agent.

Found before the first edit

Cursors on the search endpoint must stay stable while memories are being written. Offset pagination skipped rows under load. Files: api/search/list.go

Offset pagination is dead before it is proposed. Nobody had to remember to mention it.

09:35
DEV NINJA#3DEV NINJA#1DEV NINJA#4Cursor, Claude Code, Codex · three repos7 minutes to feedback

Found on the website. Felt in the API. Fixed in the SDK. Before lunch.

The agent

NINJA#3's agent stored the root cause and the fix mid-session. Recallium put the finding in front of NINJA#1's agent before it touched the limiter. NINJA#4's agent shipped the SDK fix tied to the finding.

The ninja

NINJA#3 kept wiring the form. NINJA#1 kept working on the limiter. NINJA#4 reviewed one diff. Nobody wrote a message.

NINJA#3 is wiring the waitlist form and sees the SDK retry a 429 instantly, ignoringRetry-After. The agent stores the root cause while NINJA#3 is still typing.

Stored 09:41 · read 09:48 · fixed 10:20

Root cause: the SDK's retry helper treats 429 like a network error. Fix: honour Retry-After, cap at 30 s. Why it matters: the new per-organization limiter will see a burst from every client with this bug.

09:48: NINJA#1's agent, about to touch the limiter, is handed the finding by Recallium. 10:20: NINJA#4's agent, in the SDK repo, ships the fix tied to the finding. Three people, three tools, zero messages.

11:00
PERF NINJADEV NINJA#5Codex · engine and infra repos0 re-runs

Numbers that cannot get lost.

The agent

Stored the load-test setup and results next to the limiter decision they measure, so the next proposal reads them first.

The ninja

PERF NINJA ran the test. DEV NINJA#5 watched the cluster. Neither wrote a wiki page.

PERF NINJA runs the load test against the new limiter, on the cluster DEV NINJA#5 stood up for it. The numbers go in next to the decision they measure, with the setup that produced them. The next agent that proposes a limiter change reads them before it proposes anything. A result nobody can find is a result that gets re-run. These are found by the thing they are about.

12:10
SECURITY NINJAClaude Code · api repo, read-only0 context-setting

A review that starts at the interesting part.

The agent

Opened the PR with the design, the rejected options and the numbers in view, stored the finding during the review, and proposed the team rule.

The ninja

Read the interesting part, judged the risk, approved the rule. Skipped the “so what is this?” hour.

SECURITY NINJA opens the limiter PR. The agent brings the design, the rejected per-key bucket and the reason, and the load-test numbers, before a single file is read. The review skips the “so what is this?” hour.

Finding, stored during the review

Organization IDs are written to the debug log on every limiter decision. Log a hash, keep the raw ID out of the pipeline. Blocks merge until fixed. Files: api/limiter/bucket.go, api/limiter/log.go

NINJA#2's agent sees it the next time it opens the PR. And it becomes a rule for the whole team, loaded in every session from now on: no raw identifiers in debug logs.

13:15
GTM NINJAClaude Desktop · no repository0 engineers interrupted

The release note writes itself, from the same memory.

The agent

Answered “what shipped this week?” from the memory, in plain words, with the why behind each change.

The ninja

GTM NINJA wrote the release note by 13:30 without asking an engineer anything.

GTM NINJA has never cloned a repository. In Claude Desktop, connected to the same memory, one question: what shipped this week that the pilot customers can use?

Recap, in plain words

Rate limits are now per organization. A busy script on one key no longer slows the rest of the team.

Search pages stay stable while memories are being written. No more skipped rows on long lists.

SDK retries respect the server's wait time. Clients back off instead of hammering.

The release note is drafted by 13:30. Features reach the customer story the day they merge. No engineer was asked what they did this week.

14:30
PERF NINJACodex · bench repo1 search, not CI archaeology

Every number remembers which build it belongs to.

The agent

Tagged the benchmark results with the build, the reader, the judge and every miss, next to the engine change that caused the re-run.

The ninja

PERF NINJA read the numbers and picked the next target.

The engine changed, so PERF NINJA re-runs the memory benchmark. The results are stored with the build they measure, the reader, the judge and every miss. Six weeks from now, “did the limiter change cause this?” is a question Recallium answers, not a dig through CI logs.

15:40
DEV NINJA#3UI NINJACursor · website repoanswerable in 6 months

A commit that can explain itself long after everyone forgot.

The agent

Wrote the trailer pointing at the decision and the finding, and a checkpoint recording what was verified and how.

The ninja

DEV NINJA#3 and UI NINJA reviewed the page together. Once.

The website change ships, UI NINJA's design and DEV NINJA#3's code in one commit. The commit carries a trailer pointing at the reasoning behind it, and a checkpoint records what was verified and how.

In the commit message

Recallium-Memory: 01a1…c67, 01a1…c6a · the decision that shaped the change, and the finding that triggered it

“Why is this here?” is answered by the commit, not by whoever is still around.

18:05
DEV NINJA#1Claude Code · api repowhoever opens it first, continues

Parked, not lost.

The agent

Wrote the working state: what is mid-way, what is next, which decisions it rests on, and the memories to resume from.

The ninja

Closed the laptop.

Pagination is half done. Before the laptop closes, the agent writes down what is mid-way, what is next and which decisions it rests on. Tomorrow, whoever opens the project first picks it up from there: NINJA#1, NINJA#2, or either one's agent. Which is where this day started.

This page was built the same way: Recallium handed the agent what the team had already decided, kept the design before the first edit, and tied every commit to its reasoning.