curate
The memory curator's procedure — pull durable facts out of fresh transcripts, deduplicate them, and write them into the canon through `curator memory-write`.
Skill by vladmesh
Chalk Labs
Need help deploying curate?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/vladmesh-curate
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/curate
What's inside
- Skill name
curate- Description
- The memory curator's procedure — pull durable facts out of fresh transcripts, deduplicate them, and write them into the canon through `curator memory-write`. Launched hourly by the `ummanu-curator` systemd timer in the curator's workspace. The curator is the first plugin of the ummanu runtime.
- License
- Apache-2.0
- Instructions
- 213 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Memory curator You are the only writer of the ummanu's memory canon (`state/memory/facts` in the instance repository, written through `curator memory-write`). Agents only read memory. You look at the traces of every head and move durable facts into the canon. The canon is markdown facts in a Git journal. The index is derived. One fact is one `.md` file. ## Procedure ### 1. Take the fresh batch ``` python3 -P -m ummanu automations curator harvest [--project <canonical-id|unknown|review:po>] ``` Run it from your own workspace (the run's starting working directory is the curator worktree). **Do not `cd`** into other repositories: the code and the watermark are taken from the workspace, and leaving it splits them. Write facts through `curator memory-write` (see step 4); you never edit the canon by hand and you run no Git operations. The helper returns a redacted, deterministic bounded batch (secrets already stripped) of new turns since the last watermark. "No new turns" means there is no work and you exit: the helper has already advanced any complete non-emitting scan cursors, and there is no pending work for step 5. The service environment sets maximum signal turns, source bytes and sources, plus per-source rows/records and personal-memory bytes. A changed personal-memory file above its byte cap is rejected before it reaches this prompt. A trailing incomplete JSONL record is source-local: its incomplete bytes remain unwatermarked, but complete prefixes and independent sources still settle. The helper reports that partial source and retries it from its last complete cursor after the writer finishes; it is never a role-wide clean skip. The first fact-bearing harvest writes an identity-bound pending record. Repeating harvest before advance returns that same batch even if sources have grown. The selector is part of that identity: use the same `--project <canonical-id|unknown|review:po>` for harvest and advance, and do not switch between a selected project and the explicit all-backlog mode. Do not alter the state directory or pending file. Advance accepts only that exact pending identity and moves only its listed partial cursors; a refusal means stop and let the operator resolve the stale or foreign pending record. To inspect work without changing state, use `python3 -P -m ummanu automations curator backlog [--project <canonical-id|unknown|review:po>] [--json]`; it emits aggregate metadata only, never source text. The batch comes from two kinds of source: - **Transcripts**: new turns of sessions. For some runtimes that is line-based JSONL per session; for others it is rows in the runtime's own state database. - **Personal memory of the agent runtimes**: new or changed memory files a head wrote for itself (excluding the index file, which is a table of contents, not a fact). That material is already distilled: the head decided it was worth remembering, so the signal is denser than a transcript. Those files are **read-only** — you do not edit or delete them, you only read them and carry them into the canon. Some runtimes keep one memory for the whole installation rather than per project, so those entries arrive with no working directory; that is expected, not a bug. ### 2. Extract durable facts Write **significant facts about the current state of the system** — how the ummanu, the infrastructure, the user and the projects are built and behave **now** — so a future session does not have to derive it again. Not a chronicle of decisions. - **State, not events.** The canon describes how the system is built, not what was "decided, changed or added". If a decision changed the system, record the resulting **state**, not the fact that the decision was taken. "The curator pushes the canon" — yes. "We agreed that the curator will push" — no. - **Set a high bar.** Three substantial facts beat ten small ones. The test: "will this still be true and useful in a month as a description of how the system works?" If not, do not write it. - **NOT durable:** the narrative of a work session, debugging lessons, one-off bugs and flakes, small implementation details, anything that lives in the code or in Git, transient state. When in doubt, skip. - **Filter out changelog facts.** A pull request or card number, an exact date, "the first run", "the status as of X" are not facts by themselves, they are chronicle. Write so that the fact stays true without a merge date: the resulting state of the system, not the event. - **Do not write counter-history.** The body of a fact needs no "no longer X", "it used to be Y", "deprecated", "if you see the old one". If a new fact replaces an old one, rewrite the current card and remove the old one through `supersedes`; the history of the change stays in Git, not in the memory text. Fact format: - First paragraph: the current state only, short and self-sufficient. - A `Why:` line is optional. Add it only when there is a working invariant there: what an agent must or must not do because of this fact. Do not use `Why:` for the history of a decision, dates, pull requests, commits, or an explanation of what came before. - Size roughly 80–200 tokens. One fact is one thought. Before writing, check: with all change history removed, is there still a short description of the current state? If not, do not write it. Scope follows the source's displayed route, not a guessed path or a directory name: - `project:<canonical-id>` — a source routed through one registered binding's canonical `id`. A fact about the task pipeline (board, runtime, curator, ummanu) belongs to `project:ummanu`. - `global` — only material explicitly marked `global`, such as a runtime's installation-wide memory. - `review:po` — a durable conclusion that cannot be assigned to one project without product-owner judgment. This is a pending triage basket, not operational truth. - `unknown` is a source selector, not a fact scope. If independently reliable context establishes one owner, write the fact to that project. Otherwise, every durable current conclusion from an `unknown` source goes to `review:po` with tags `pending-review,unknown-source`; name candidate project scopes when evidence supports them, or state `owner unresolved`. Ownership ambiguity is not a reason to discard a durable conclusion. The route is authoritative only when discovery found one normalized registry match: every valid binding's checkout, or its workspace tree when it has a safe optional `orca_binding`. Prefixes, unregistered paths and ambiguous routes stay `unknown`; a missing `orca_binding` never invents a workspace route. Observer workspace tokens restore the canonical `sprint:` prefix. One registered reservation routes to that project. Multiple distinct registered reservations route to `review:po`; malformed, duplicate or unregistered reservation sets remain `unknown`. For a `review:po` source, first separate conclusions whose owner is unambiguous and write those directly to the corresponding `project:<canonical-id>`. Only a genuinely shared or ownership-ambiguous current conclusion belongs in `review:po`. Such a fact must use the tags `pending-review,multi-project`, name its candidate project scopes and state why PO judgment is required. Do not create a review fact merely to record that a session was examined or that it contained no durable fact. The same ban on changelog, rejected alternatives and implementation history applies to the review basket. Apply the same separation to an `unknown` source. Do not silently skip a durable conclusion merely because its owner remains unresolved: route it to `review:po` with `pending-review,unknown-source`, candidate scopes when available (otherwise `owner unresolved`), and why ownership cannot be established. Do not create a review fact merely because an unknown session was examined or contained no durable conclusion. **Personal memory of the runtimes** (the second kind of source) is read through the same barrier and the same durability bar as transcripts: the file is already one head's distillate, but it is not yours, so anything doubtful is still skipped. Conversion rules: - the source file's own type field is not carried over as is: it is an axis of "what kind of fact this is", not a canon tag. Use it as a hint when choosing scope and wording. - Scope follows the file's displayed canonical route by the same rule. A runtime's installation-wide memory is explicitly `global`; an `unknown` file is not assigned by default. - Those files are a **read-only** source: do not edit them, do not delete them, only carry them into the canon.
From vladmesh/ummanu, Apache-2.0.
More from vladmesh/ummanu
- 0.609score
observe-sprint
vladmesh
Run an open sprint as the observer head the dispatcher launched: recover semantic state from the sprint entity and board, cut one card at a time, classify…
SkillAFreshness: A★ 4Claude Code +9 - 0.609score
open-issue
vladmesh
File a product issue on the board as the PO: check the product and the open issues for a duplicate, choose kind, priority, title and description yourself, and…
SkillAFreshness: A★ 4Claude Code +9 - 0.609score
retro
vladmesh
The retro agent's procedure — walk fresh head transcripts and the memory search log, find concrete failures (an answer given from a canon fact without a…
SkillAFreshness: A★ 4Claude Code +9 - 0.609score
knowledge-doc
vladmesh
Keep a long recoverable document (a brainstorm, a decision log, an incident write-up) in `state/knowledge` of the private instance repository through `ummanu…
SkillAFreshness: A★ 4Claude Code +9 - 0.609score
open-sprint
vladmesh
Open a sprint as a board entity: gather live context, finish grilling the unresolved product forks, fix the goal, Definition of Done and repositories, create…
SkillAFreshness: A★ 4Claude Code +9 - 0.331score
steward
vladmesh
No description from the publisher yet.
SkillAFreshness: A★ 4Claude Code +9
Signals
- Stars
- 4
- Forks
- 0
- Open issues
- 3
- Last commit (this folder)
- Oct 15, 2026 (16 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/vladmesh/ummanu
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from vladmesh
- 0.609score
observe-sprint
vladmesh
Run an open sprint as the observer head the dispatcher launched: recover semantic state from the sprint entity and board, cut one card at a time, classify…
SkillAFreshness: A★ 4Claude Code +9 - 0.609score
open-issue
vladmesh
File a product issue on the board as the PO: check the product and the open issues for a duplicate, choose kind, priority, title and description yourself, and…
SkillAFreshness: A★ 4Claude Code +9 - 0.609score
retro
vladmesh
The retro agent's procedure — walk fresh head transcripts and the memory search log, find concrete failures (an answer given from a canon fact without a…
SkillAFreshness: A★ 4Claude Code +9 - 0.609score
knowledge-doc
vladmesh
Keep a long recoverable document (a brainstorm, a decision log, an incident write-up) in `state/knowledge` of the private instance repository through `ummanu…
SkillAFreshness: A★ 4Claude Code +9 - 0.609score
open-sprint
vladmesh
Open a sprint as a board entity: gather live context, finish grilling the unresolved product forks, fix the goal, Definition of Done and repositories, create…
SkillAFreshness: A★ 4Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get curate running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
curate skill. Agent Mart. https://agentmart.dev/skills/vladmesh-curate (last updated 2026-10-24)