Today, what your team shares is hand-written, and what your agent learns is stuck on one laptop. keepctx joins them: context captured as your agent works, kept current, and shared with everyone.
You told it three times that you use Kinesis, not Kafka. It still guesses Kafka. The fix isn't a bigger context window — it's writing things down once, in a place the next session reads automatically.
When you correct your agent, it records the correction. The next session — yours or a teammate's — starts already knowing.
Preloading a company's knowledge every session is about 95% waste. keepctx loads a small index and fetches a context only when the task touches it.
A new hire clones the repo and their agent already knows the deploy command, the real index name, and which docs are lying.
Every change is versioned server-side and one revert away. A weak model can add noise; it can't destroy what your team already established.
.ctx/ ignores itself, so context never pollutes diffs and never goes stale
on a branch. Your AGENTS.md gets two lines and nothing else.
Facts are readable text. Run our server or your own. Uninstalling is deleting two lines from a file.
A context is a list of facts. The bolded lead is the key, and the value can be an IP, a command, or a sentence.
# .ctx/example-project/facts.md
- **deploy.command** — `make ship` from the repo root, not the platform CLI
- **logging.index** — `app_prod_v2`. The docs still say app-prod; they're wrong. `[verified]`
- **gateway.depends-on** → example-platform, for session validation
- **event.transport** — Kinesis, not Kafka. Inherited, and we're not changing it. `[verified]`
Your agent opens facts.md with the same tools it uses for any
other file, and edits it as it learns. There's no write command to forget and no ceremony to
skip — which is exactly why capture actually happens.
Changes sync per key, not per file. Two people learning different things both land. Two people changing the same fact means the later one wins, and every version is kept — so a bad change is one revert away rather than an argument.
| Syntax | Means |
|---|---|
— value | an attribute |
→ value | a relationship — what your architecture diagram is drawn from |
[verified] | a human settled it; stop re-deriving it |
Two minutes to local. An account only matters when you want to share.
Python 3.9 or newer, no dependencies. The executable is keepctx;
keepctx is a short alias and what you'll type. If another keepctx is
already on your PATH the alias is skipped and keepctx works the same.
curl -fsSL https://keepctx.com/install.sh | sh
Creates .ctx/, adds two lines to AGENTS.md, and ignores itself
in git. The name defaults to your directory.
cd ~/work/example-project
keepctx init
keepctx: initialised `example-project`
.ctx/example-project/facts.md your facts
.ctx/instructions.md how the agent maintains them
AGENTS.md pointer added at the top
Your agent reads .ctx/instructions.md, learns the rules, and starts
recording what matters — corrections, hard-won findings, decisions. Nothing else to do.
Local works forever with no account. keepctx remote puts it on a server so
your team gets it — and so it survives a dead laptop.
keepctx remote # one time, creates it on the server
keepctx sync # two-way. mostly automatic after this
keepctx clone your-org:your-context
keepctx | status |
|---|---|
keepctx init [name] | set up here. local, no account, no network |
keepctx remote | one-time. create this context on a server |
keepctx clone org:name | get a context you don't have |
keepctx sync | upload local changes, download remote ones |