bridge-curator
Skill13 starsChanged 14 days agoMITView on GitHub
Periodic background consolidation pass over the Bridge: scans skills/protocols/ rules/docs for drift, the proposal queue for staleness, and recent work for user-pattern observations, writing findings as proposals under work/_learning/proposals/, never direct edits. Trigger: "/bridge-curator", "curator", "weekly review", "consolidate skills", "umbrella skill".
In this repository44 other files it gives its agents.
- AGENTS.mdAGENTS.md
- skills/board-pilot/references/agents.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- a2aSkill
- archiveSkill
- board-pilotSkill
- bridge-auditSkill
- bridge-contributeSkill
- bridge-explorerSkill
- bridge-greetingSkill
- bridge-leak-checkSkill
- bridge-learnSkill
- bridge-onboardSkill
- bridge-overlaySkill
- bridge-promoteSkill
- bridge-statusSkill
- bridge-syncSkill
- briefingSkill
- calendarSkill
- capability-brokerSkill
- channelSkill
- cmuxSkill
- cockpitSkill
- dashboardSkill
- debriefSkill
- doc-systemSkill
- github-projects-managerSkill
- html-canvasSkill
- html-slidesSkill
- knowledge-repo-initSkill
- mail-draftSkill
- mandantsSkill
- meeting-transcriptionSkill
- object-storeSkill
- onboard-simSkill
- remoteSkill
- scheduleSkill
- secretsSkill
- spec-kickoffSkill
- task-close-postmortemSkill
- tmuxSkill
- tracker-syncSkill
- workloadSkill
- workspaceSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 135
Minimum-signal threshold: if window contains fewer than 5 postmortems and 5 accept/reject events combined, the user-pattern pass produces …
- Distinctive: line 154
After running, emit a single block:
- Very specific: line 175
If --dry-run: same output, but report uses "would write" instead of "wrote", no files touched.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Bridge Curator
bridge-curator is the periodic background-reflection skill. Once a week
(configurable), it walks the Bridge's own state and asks three orthogonal
questions:
- Is the skill library still coherent? (Library pass)
- Is the proposal queue still actionable? (Queue pass)
- What has the system observed about how this user works lately? (User-pattern pass)
The output of every pass, including the on-request Learnings pass, is always proposals — markdown files
under work/_learning/proposals/ with source.type: curator-suggestion.
The curator never edits Bridge files directly. All accepts happen via
/bridge-learn.
This is the deliberate inversion of the autonomy-maximalist curator
pattern observed in some agentic frameworks (e.g. Hermes Agent's
background-curator-fork). See rules/learning-autonomy.md § Layer B for
the full design rationale.
When to run
- Manual: user says
/bridge-curator, "bridge curator", "curator", etc. - Scheduled: weekly via cron or
/schedule, if configured inbridge-config.yaml.learning.curator.schedule. - Surface in
/briefing: on the configuredauto_surface_in_briefingday (default Sunday),/briefingStream D adds a "curator due / overdue" one-liner. Running the curator itself stays manual unless user opts into auto-run.
Arguments
| Argument | Effect | Default |
(none) | Run the three default passes sequentially (not Learnings) | — |
--pass library | Only library consolidation | all |
--pass queue | Only proposal-queue consolidation | all |
--pass user-patterns | Only user-pattern synthesis | all |
--pass learnings <skill> | Only the learnings pass, for one skill (--all for every skill with a journal). Never part of the default run | off |
--dry-run | Surface findings, do NOT write proposals or user-patterns | false |
--since <date> | Scan window starts at this date (default: last curator run) | last run |
Passes (three by default, a fourth on request)
Pass 1 — Library
Full procedure in references/library-pass.md.
Scans skills/, protocols/, rules/, docs/. Detects:
- Sleeping skill — no invocation in
skill-usage.jsonlfor ≥30 days (if Phase-4 telemetry on); else heuristic via skill-name inwork/log.md - Trigger overlap — two or more skills with significantly overlapping trigger phrases in their description fields
- Description-budget buster — a SKILL.md description field that alone exceeds 1536 chars (Skills 2.0 discovery budget)
- Umbrella candidate — three or more skills that share a clear parent workflow and could be one skill with internal modes
- Stale doc — a doc whose
last_updated:is older than the last edit to anything it references - Missing scope frontmatter — a skill or agent file without explicit
scope:(already caught by/bridge-auditCheck 6, but the curator cross-references the audit-history JSON to escalate if recurring)
Each finding becomes a proposal in work/_learning/proposals/.
Pass 2 — Queue
Full procedure in references/queue-pass.md.
Scans work/_learning/proposals/. Detects:
- Stale pending —
status: pendingandcreated>30 days ago - Same-target conflict — two pending proposals with the same
target.pathand incompatibletarget.action - Likely supersede — a newer proposal that is a strict superset of an older one (covers same finding plus additional context)
- Drift in source — a proposal whose
target.pathhas been edited in git since the proposal was written (the diff_preview may be stale) - Reject-pile accumulation —
proposals/rejected/has accumulated10 entries with the same
target.typepattern, suggesting the underlying generator (postmortem questions, audit checks) is producing low-signal proposals that should be filtered upstream
Output: each cluster becomes a meta-proposal — a curator-suggestion that
asks /bridge-learn to perform a specific consolidation action (accept-A-reject-B,
defer-both, merge into combined).
Pass 3 — User patterns
Full procedure in references/user-pattern-pass.md.
Reads, in this order:
work/log.mdlast 30 dayswork/done/YYYY-MM/<slug>/STATUS.mdpostmortems closed in windowwork/_learning/audit-trail.mdaccept/reject decisions in windowwork/_learning/proposals/rejected/*.mdreasons in windowwork/_learning/trigger-corrections.md(if Phase-4 active)
Synthesizes 3-8 observations about how the user works. Format:
- <Observation in 1-2 sentences>.
Evidence: <pointers — N postmortems, M rejections, K log entries>
Strength: weak | medium | strongWrites append-only to work/_learning/user-patterns.md under a new
section ## YYYY-MM-DD — Weekly synthesis (n=<sessions>, n=<postmortems>).
Does NOT write to MEMORY.md. A strong-pattern observation may
produce an additional proposal with target.type: memory that
/bridge-learn can accept into the user's MEMORY.md via the normal
proposal flow.
Minimum-signal threshold: if window contains fewer than 5 postmortems and 5 accept/reject events combined, the user-pattern pass produces an "insufficient signal" note instead of forced observations.
Pass 4: Learnings (per skill, on request)
Full procedure in references/learnings-pass.md;
the model is docs/skill-learnings.md.
Reads one skill's LEARNINGS.md and the global memory base. Writes:
- one proposal per
references/*.mdfile that matured journal entries belong in, whose body tells/bridge-learnto trim those entries from the journal in the same commit; - one proposal per global memory fact that is really a trap of this skill, moving it into the skill's journal. The memory fact stays until accepted.
Output: Curator Report
After running, emit a single block:
═══ Bridge Curator — <YYYY-MM-DD> ═══
Library pass: <N> findings → <K> proposals written
• <severity> <topic-slug> — <one-line>
...
Queue pass: <N> findings → <K> meta-proposals written
• <topic-slug> — <conflict-or-stale-or-supersede>
...
User-patterns: <N> observations appended to work/_learning/user-patterns.md
<K> strong-pattern proposals (target.type: memory)
• <observation excerpt>
...
→ Review via /bridge-learn (current pending: <total>)If --dry-run: same output, but report uses "would write" instead of
"wrote", no files touched.
Proposal-file shape for curator-suggestions
Standard _schema.proposal.yaml with these field defaults:
source:
type: curator-suggestion # NEW source.type enum value
evidence:
- "work/_learning/audit-history/<ts>.json" # if Phase 3 data drove it
- "work/done/<month>/<slug>/STATUS.md#postmortem" # if postmortem drove it
- "skills/<name>/SKILL.md" # the affected file
severity: P2 # default, P1 if recurring or strong
status: pending
scope: core | user (depends on target)
target:
type: skill | standing_order | rule | doc | memory
path: ...
action: edit | delete | rename | create
proposal_type: structured | needs-triageThe source.evidence chain is always concrete — the curator must cite
which files / scans led to the finding. No invented proposals.
Edge cases
- Empty Bridge (new install, no postmortems, no audit-history yet) → every pass returns "insufficient signal — run more sessions then re-curate". Friendly message, no error.
- Conflicting consolidation suggestions (library pass says merge A+B
into C, queue pass says A is stale) → emit both as separate proposals
and let
/bridge-learnresolve. - Privacy mode in user-pattern pass — if
bridge-config.yaml.learning.curator.user_patterns.privacy: strict, observations are written with redacted task slugs and customer names (replaced by<task>/<customer>placeholders) so the file is safe to share. Strict mode is opt-in, not default. - Pass-failure isolation — if user-pattern pass crashes (e.g. malformed log entry), library + queue still complete. Failures are reported in the curator report, not bubbled as fatal.
What this skill deliberately does NOT do
- ❌ Edit any Bridge file directly. All changes route via proposals.
- ❌ Write to MEMORY.md. User-patterns is a separate, lower-trust file.
- ❌ Auto-accept its own proposals. Even if a finding has 5-of-5 evidence
pointers,
/bridge-learnstill gates the apply. - ❌ Send any data off-machine. No cloud user-model service. No telemetry export.
- ❌ Run in a separate subprocess / agent fork without user awareness. The curator is a foreground skill invocation; the user sees the report.
- ❌ Promote findings to your org overlay or open-bridge automatically.
Promotion is
/bridge-syncterritory after/bridge-learnaccept flowed it through the normal commit pipeline.
Related
rules/learning-autonomy.md— the design rule this skill embodiesskills/task-close-postmortem/— Layer 1 proposal generator (postmortem)skills/bridge-audit/— Layer 1 proposal generator (recurring findings)skills/bridge-learn/— the review surface that closes the loopwork/_learning/README.md— aggregation layer layoutwork/_learning/user-patterns.md— output target for Pass 3docs/skill-learnings.md: the skill-local journal that Pass 4 promotes frombridge-config.yaml.learning.curator— config block (schedule + pass toggles)
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

