Bridge curator
Periodic background consolidation pass over the Bridge itself. Three phases: (1) Library pass — scans skills/, protocols/, rules/, docs/ for drift (sleeping skills 30d+, overlapping triggers, description-budget busters, duplicates, umbrella candidates); (2) Queue pass — scans work/_learning/proposals/ for stale pending (30d+), conflict clusters (same target), supersedes relations; (3) User-pattern pass — synthesizes 3-8 bullet observations about user preferences from postmortems + audit-trail + trigger-corrections of the last 30 days, writes append-only to work/_learning/user-patterns.md. All findings land as proposals (source.type=curator-suggestion) in work/_learning/proposals/ — **never direct edits to Bridge files**. Trigger: "/bridge-curator", "bridge curator", "curator", "curation", "weekly review", "library consolidation", "consolidate skills", "what patterns do I have", "user pattern synthesis", "consolidate", "skill consolidation", "umbrella skill".From its SKILL.md
npx -y skills add bks-lab/open-bridge --skill bridge-curatorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 8 stars8 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
9.8 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it
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 all three phases 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 all three passes sequentially | — |
--pass library | Only library consolidation | all |
--pass queue | Only proposal-queue consolidation | all |
--pass user-patterns | Only user-pattern synthesis | all |
--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 |
Three passes
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 | strong
Writes 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.
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-triage
The 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) → all three passes return "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 3bridge-config.yaml.learning.curator— config block (schedule + pass toggles)
What ships with it: 3 files
18.1 KB alongside SKILL.md
references/
- library-pass.md5.2 KB
- queue-pass.md5.4 KB
- user-pattern-pass.md7.6 KB