The team knowledge base that maintains itself.
Agents stopped repeating reviewers' corrections: 46% → 17% of tasks.
Your team's conventions, decisions and system docs, in a repo you own. Learned from code review, developers and the code; kept current on its own; given to every agent.
Runs entirely in your CI and your agent sessions, using your own keys. There's no Homeostat backend, so your code and data never reach us.
In your team's knowledge base repo:npx --yes homeostat@0.5.16 setup
a17fb39 use withRetry for partner calls
- +50 comment, then a fix
- +14 from a senior
- +8 names real code
- +4 clear title
homeostat: daily lessons · lee
| merged | Use the shared retry helper for partner calls | 76 |
| review | Name feature flags after the ticket | 61 |
Merged without a reviewer
$ claude # Team rules (homeostat) For the files you are changing: - Use the shared retry helper for partner calls: wrap every partner call in withRetry().
How it works
- InCode reviewDevelopersCode & docs
- KeptKnowledge basemergereviewdeclinecorrects itself
- OutClaude CodeAny MCP clientCursor · CopilotAGENTS.md
Measured, before and after
32 tasks from a production team's own review history, run by Claude Code without Homeostat and then with it.
Over time, as the knowledge base grows
Without Homeostat nothing changes from one week to the next. With it, every review the team merges can become a lesson, so agents get better as the knowledge base fills.
With Homeostat (estimated between)WithoutMeasuredDays of the team's review history in the knowledge base. Day 0 and day 17 are measured; between them is an estimate from per-task results: a task counts as improved from the day the review it came from was merged (documents from bootstrap from day 0).
How it was measured
- 20 questions and 12 coding tasks, each drawn from a merged pull request where a reviewer corrected the author. Coding tasks start from the commit before the correction.
- Headless Claude Code on claude-sonnet-5-5, the same prompts and permissions both times; only the Homeostat plugin differs.
- The knowledge base was built by Homeostat from that same team's review history:
bootstrap, then the daily run. The realistic case: the team reviewed it once, and agents stop repeating it. - Graded by hidden tests (4 coding tasks) or by claude-opus-5-5 against the reviewer's answer. 64 runs without (2 repeats), 32 with (1), 2026-10-25 to 2026-10-31.
Run the same comparison on your own history: homeostat bench.
All eight measures, before and after
Agents know the team's knowledge
They stop repeating review corrections
And finish sooner, for less
Raw results
| Measure | Without | With | Change | 95% interval | Tasks |
|---|---|---|---|---|---|
| Questions: fully right | 15% median 0% | 75% median 100% | +60 pp | [+40 pp, +80 pp] | 20 |
| Questions: score (0–2) | 0.85 median 1.00 | 1.70 median 2.00 | +0.85 | [+0.55, +1.15] | 20 |
| Coding: repeated mistake | 46% median 50% | 17% median 0% | -29 pp | [-54 pp, -8 pp] | 12 |
| Coding: corrections per task | 0.88 median 0.75 | 0.25 median 0.00 | -0.63 | [-1.25, -0.13] | 4 |
| Coding: solved | 71% median 100% | 83% median 100% | +13 pp | [+0 pp, +33 pp] | 12 |
| Cost per task | $0.417 median $0.265 | $0.340 median $0.265 | −$0.077 | [−$0.196, +$0.012] | 32 |
| Time per task | 51.9 s median 28.5 s | 37.2 s median 15.9 s | −14.7 s | [−23.8 s, −6.9 s] | 32 |
| Turns per task | 9.36 median 7.25 | 5.69 median 3.50 | −3.67 | [−5.14, −2.31] | 32 |
| Day | Tasks whose lesson exists | Correct answers | Tokens per task | Tasks per hour |
|---|---|---|---|---|
| 0 | 4 of 32 | 25% without 15% | 581k without 584k | 69.2 without 69.4 |
| 1 | 4 of 32 | 25% without 15% | 581k without 584k | 69.2 without 69.4 |
| 2 | 7 of 32 | 30% without 15% | 580k without 584k | 71.6 without 69.4 |
| 3 | 7 of 32 | 30% without 15% | 580k without 584k | 71.6 without 69.4 |
| 4 | 7 of 32 | 30% without 15% | 580k without 584k | 71.6 without 69.4 |
| 5 | 11 of 32 | 40% without 15% | 562k without 584k | 74.7 without 69.4 |
| 6 | 17 of 32 | 50% without 15% | 466k without 584k | 84.4 without 69.4 |
| 7 | 22 of 32 | 50% without 15% | 452k without 584k | 88.0 without 69.4 |
| 8 | 24 of 32 | 50% without 15% | 442k without 584k | 89.4 without 69.4 |
| 9 | 25 of 32 | 50% without 15% | 413k without 584k | 93.2 without 69.4 |
| 10 | 25 of 32 | 50% without 15% | 413k without 584k | 93.2 without 69.4 |
| 11 | 25 of 32 | 50% without 15% | 413k without 584k | 93.2 without 69.4 |
| 12 | 25 of 32 | 50% without 15% | 413k without 584k | 93.2 without 69.4 |
| 13 | 28 of 32 | 60% without 15% | 403k without 584k | 94.6 without 69.4 |
| 14 | 28 of 32 | 60% without 15% | 403k without 584k | 94.6 without 69.4 |
| 15 | 28 of 32 | 60% without 15% | 403k without 584k | 94.6 without 69.4 |
| 16 | 32 of 32 | 75% without 15% | 385k without 584k | 96.8 without 69.4 |
| 17 | 32 of 32 | 75% without 15% | 385k without 584k | 96.8 without 69.4 |
Means over tasks (each task the mean of its repeats). Change is with minus without over the tasks run in both, with a bootstrap 95% interval. Models: claude-sonnet-5-5; judge claude-opus-5-5. Generated 2026-10-31 byhomeostat bench report --json (schema homeostat-bench/1).
Humans decide only the middle band
Every change is scored. Only the middle band waits for a person. The lines are yours to move.
What the knowledge looks like
Markdown in your repo. Every rule keeps its score, the review it came from and its owner.
## Use the shared retry helper for outbound HTTP calls {#outbound-http-retry-helper}
<!-- homeostat
scope: ["services/integrations/**", "packages/http-client/**"]
status: accepted
score: 76
owner: dana
source:
type: pr-feedback
url: https://bitbucket.org/acme/integrations-api/pull-requests/812#comment-33
author: sam
changedCode: true
created: 2026-09-30
lastConfirmed: 2026-10-07
-->
Wrap every outbound HTTP call to a partner API in withRetry() from
@acme/http-client. Do not hand-roll retry loops.
Why: hand-rolled loops have dropped the request-id header that
on-call searches logs by.Why not just CLAUDE.md or agent memory?
Runs on yours, not ours
- Git hostKB repo · pull requests
- CIdaily and weekly runs
- Sessionshooks · MCP · clone
- Model provideryour key, cloud or login
- Homeostat serversnone · 0 requests
What is sent where, and how to turn each part off: data handling. Who can change what your agents are told: security.
Specifications
- Changes
- Pull requests only
- Model reads
- Review threads and the KB. Code only via bootstrap, after a preview
- Cost
- Reported per run, capped by agents.maxCostUsd
- Session start
- Under a second, 600 rules
- Measured
- homeostat bench: plugin off vs on
- Agents
- Claude Code, any MCP client, Cursor, GitHub Copilot, AGENTS.md
- License
- Apache-2.0
Ten minutes to a first daily run
In your team's knowledge base repo, one guided setup: tokens, repos, team, schedules, Slack
npx --yes homeostat@0.5.16 setupEach teammate, once: the Claude Code plugin, pointed at the knowledge base
npx --yes homeostat@0.5.16 setup --joinAny time after: what's done, what's missing, what's optional
npx --yes homeostat@0.5.16 setup --check
sam senior on
services/integrations/client.tsUse
withRetry()from@acme/http-clienthere. Hand-rolled loops drop the request-id header.