Skip to main content
A build is served exactly the experience it loads. This page is the user’s side: naming the sources, reading what the campaign did with them, and giving your own coding-agent session the same sources. Add a source and Share a bank make the sources; the reference has every form and every field.

Name the sources

Three ways, one build:
--experience and load_experience() win over the brief’s Experience line, as --harness wins over its Harness line; with nothing loaded, a fresh build takes the brief’s items. A reference takes one of these forms: Loading resolves the reference, confirms the source exists and is readable, pins it as it is on disk and prints one line per source:
Loading never pulls, never ingests and never creates. A reference that names nothing is refused with the forms above; a source that does not exist yet is refused with the kapso experience add line that makes it; the hosted gate without its key is refused with where the key goes. On a detached build the sources are loaded before the fork, so a refusal reaches you, not the child’s log.

What the sessions see

Before the first session, the engine stages the serving under .kapso/serving/ in the campaign: one clone per bank at its pinned head, intro.md, the serving record, and, as the sessions run, their pull log. The ideation and implementation sessions read the intro after the harness’s guidance:
The engine does not select cards. bank_index lists the whole eligible set, in reliability order, with no cap and no relevance cut; the reading agent decides what to open. A corpus adds the wiki_idea_search and wiki_code_search tools over its pages; Leeroopedia mounts its own server. The judge gets none of them: it scores what the evaluation printed, and records which cards the attempt leaned on as cards_load_bearing. Three things the frame does on every read:
  • Scope. Under a harness, mine lists and opens the cards scoped domain or harness:<name>; a card outside is refused by name with the reason (out of scope under harness:trading; mine:all serves every card you measured). A bank you read, the hosted gate and an index serve everything they hold.
  • Quarantine, silently. Cards in the decoy registry and cards in non-serving states (cold, retired, superseded) never appear.
  • Contradictions, named. Two cards that declare they contradict each other are named as a pair, never presented side by side as if they agreed.
A card may carry a measurement offer; it rides card reads only, with its cost clause, under learning.retriever.probe_budget per campaign. When two sources hold a card of one name, bank_get_card(cards, source=) says which; the pull log names the source of every row served.

What the campaign records

The same list, in every record:
learn() harvests the serving record and the pull log with the campaign, so a lesson is credited to the source its card was read from, and kapso experience list shows your bank’s head beside what a campaign was served.

Resume

A bare kapso build --output campaign --resume is served what the launch was: the record’s list, each bank re-pinned at its recorded head even when the bank moved since, each index at its id. A resume that names a different list, by flag or by load, is refused by name; a source that is gone is refused with the way back; an index re-ingested since the launch is refused, since a campaign is served the corpus it started with.

Your own session

The same sources reach the coding-agent session you work in through kapso-mcp, Kapso’s MCP server:
With no --experience, the server serves what the project’s kapso-config.yaml lists under experience.session_sources ([mine:all] is the line kapso learn offers once a campaign is banked): sessions, not builds, which load what their brief or flags name. --harness gives the session its coordinate, the name mine serves cards by, as a build’s harness does; without it the coordinate is none. The session is staged under learning.serving.session_root, one directory per server process, and removed when the server exits; the intro naming the sources is the server’s instructions, so the session sees what it is served on connect. The gates a directory supports (research, repo_memory, experiment_history) ride along; one that cannot be served is named on stderr with its reason. See Use the gates from your own coding agent.

What this machine has

kapso experience update is the network step loading never takes: mine takes its remote’s main, a bank you read at a branch or HEAD is fetched again, a tag or a commit never moves; a running campaign keeps its pins. kapso experience remove <ref> deletes a bank you read or an index; your bank, the hosted gate and a bank by path are not the store’s to remove.

Add a source

Your bank, the hosted gate, a repository or a question ingested into an index

Share a bank

Attach a remote to your bank; read another team’s

What learn produces

How learn() fills your bank

Experience reference

Every form, record, variable and config key
Related pages: What experience is · Add a source · Share a bank · Experience reference · The brief Kapso is an open-source framework by Leeroo that builds software toward measurable goals through experiment campaigns. Source code: github.com/Leeroo-AI/kapso · Install: pip install leeroo-kapso · Every page as plain text: llms.txt.