Learnings
A Learning is a one-paragraph directive — a rule — that the agent follows when it encounters a relevant situation. Learnings live in steps: named buckets like meeting_triage, proposal_drafting, support_reply_review. Each step is mounted into the agent's virtual filesystem at /learnings/<step>.md on every turn.
Why we need both Learnings and Playbooks
Playbooks are narrative procedures. Learnings are rules-as-data. Two shapes, two use cases:
| Playbooks | Learnings | |
|---|---|---|
| Form | Multi-page markdown | One-paragraph directives |
| When read | Lazy, on demand | Eager, every turn |
| Authoring | Human (in SKILL.md) | Human + self-improver subagent |
| Editing | Edit the markdown, re-apply context | Add/edit/remove rules in /dashboard/learnings/<step> |
| Use case | Procedural how-to | Standing constraints + accumulated wisdom |
How the self-improver fits
The self-improver subagent watches each run for moments worth promoting — "this drafted reply got rejected because it offered a refund; remember not to do that." When it identifies a candidate rule, it proposes it through the comment-feedback worker. Humans approve before the rule lands in the bucket. This is the explicit "agent learns from feedback but doesn't drift on its own" guarantee.
v0.5 ships the manual CRUD UI for learnings — add, edit, remove rules directly. The self-improver-candidate review queue (where you see the agent's proposals before approving) is v0.5.1.
Dedup
A new rule is checked against existing rules in the step using trigram-Jaccard similarity. Above ~0.72 similarity, the API returns a 409 with the existing rule id + similarity score, so you can either refine that rule or reword if it's genuinely a different point. Keeps the bucket from filling with paraphrases.
How rules feed the agent
Every turn, the agent reads its applicable steps as virtual files:
/learnings/global.md
/learnings/meeting_triage.md
/learnings/proposal_drafting.md
The runtime builds these files from getLearnings(orgId, step) so the agent sees the current ruleset every time — no staleness.
Dashboard surface
/dashboard/learnings— every step with rule count + agent slugs/dashboard/learnings/<step>— the bucket. Add / edit / delete rules. Each rule shows its source (manual,feedback:<id>,self-improver:<run_id>) so you can trace provenance.