bridge-onboard — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited bridge-onboard (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Set up a new Bridge user or reconfigure an existing one. Read the referenced file ONLY when triggered.
A new user came here to configure an assistant, not to inventory their life. Asking abstract questions like "do you file taxes for multiple legal entities?" or "do you have a household mandant?" makes the user defensive — they don't know yet what those features do, so they say "skip" to everything and miss the point.
Instead, the wizard:
feature-discoverystanding-order) when patterns suggest they'd help
All of this is consent-first: before step 1, the user picks discovery.mode — confined (default) or broader. Confined means the Bridge never scans the machine (other repos, installed apps, devices, files, and mail stay untouched) — you still get every feature, just enabled modularly when you want it via the Phase E catalog, --add <feature>, or the feature's enabled: flag in bridge-config.yaml. Only broader unlocks the permission-gated scan in step 1.
This file is the entry point; the heavy lifting lives in references/.
line — what this instance is for — into purpose.statement (+ a derived purpose.focus). It ORDERS the Phase C suggestions, the Phase E catalogue, and the feature-discovery standing-order, and is echoed in the greeting + preview; it never hides, gates, or removes a feature. Empty purpose = today's flat, general-purpose behaviour. Change anytime via --purpose.
GitHub org, without gh CLI, and without GitHub-projects integration.
variant choice is a separate, optional step via --upstream.
what makes Claude resume context across sessions. The wizard explains the trade-off but suggests [y].
non-invasive (git config, dir listings, app list). Sensitive sources (mail accounts, finance-app accounts, calendar names) are default-off and only opt-in.
message bodies, keychain, passwords — NEVER touched. Explicit in the permission prompt so trust is established.
Scan findings live in work/onboarding-scan.json (gitignored, auto-deleted after 30 days or on --reset). Granted permissions are persisted to bridge-config.yaml.discovery.permissions so re-runs honor the same boundary without re-asking.
Decision history lives in work/onboarding-state.yaml (NOT gitignored — useful as a record of setup choices) with statuses accepted | deferred | declined | silenced | nothing_found.
The feature-discovery standing-order (active when work.enabled: true) uses the same state file to avoid double-suggesting.
Mirror-safety — check the origin before writing any private data. Onboarding writes the user's identity and work/ to a user/{name} branch. Before creating that branch (Phase A step 6), resolve where the clone pushes: git remote get-url origin (and gh repo view --json visibility,nameWithOwner if unsure). If `origin` is a PUBLIC repo or a known upstream (e.g. `bks-lab/open-bridge`) — or [`.bridge-origin`](../../.bridge-origin) says `is_public: true` — STOP and advise, do not proceed silently. The user's private data must not live on a public origin. Offer to set them up on their own private repo first (GitHub Use this template → Private, or re-home origin to a new private repo with open-bridge as a read-only upstream), then continue. Never push the user/* branch to a public origin; CORE reaches a public upstream only via /promote. Canonical rule: ../../rules/push-guard.md.
| Invocation | Behaviour |
|---|---|
/bridge-onboard | Full wizard (Phases A–F) |
/bridge-onboard --rescan | Broaden discovery (sets discovery.mode: broader); re-run Phase B+C with persisted permissions; surface new evidence; skip already-accepted features |
/bridge-onboard --reset | Delete scan + state files; restart Phase B from scratch. Prompts to delete bridge-config.yaml for true clean-slate |
/bridge-onboard --add <feature> | Skip A+B+D+E+F, run only the matching S-block from smart-suggestions.md (e.g. --add personas, --add doc-system) |
/bridge-onboard --add agent-soul | Skip everything except D4 — re-pick the soul deck and reshape SOUL.md / IDENTITY.md |
/bridge-onboard --purpose | Skip everything except the Phase-A purpose step — set/change purpose.statement + purpose.focus (re-derive user_profile), then re-render the Phase F preview ordering. Never gates a feature |
/bridge-onboard --features | Read-only Phase E catalogue, interactive — explore what Bridge can do, click into entries to activate |
/bridge-onboard --upstream | Skip everything except upstream wiring (see below) |
--upstream modeWhen invoked as /bridge-onboard --upstream, the wizard skips Phases A-E, going straight to upstream configuration. Use cases:
bks-lab/open-bridge onceit is publicly available
In this mode, ask:
Which upstream are you wiring?
[1] open-bridge (OSS) — sets contribute: true, pull-only OSS-core
[2] org-internal bridge — sets primary: true, push-enabled
[3] Custom — type repo/branch/role manuallyEach choice appends one entry to upstreams: [] and adds a matching promote.content_blocklist.<name> skeleton (user fills the strings/patterns based on what their codebase shouldn't leak).
User wants to...
├── Full onboarding wizard → Read references/workflow.md
├── Re-scan and resurface deferred → Read references/system-discovery.md (--rescan)
├── Start fresh → Read references/system-discovery.md § Re-Run Modes (--reset)
├── Activate one specific feature → Read references/smart-suggestions.md § Adding a Feature Later
├── Set or change the instance purpose → Read references/workflow.md § Phase A step 5 (--purpose)
├── Browse what Bridge can do → Read references/feature-catalog.md (--features)
├── Wire an upstream after the fact → This file § Optional: --upstream mode
└── Questions about setup → Answer from references/workflow.md + CLAUDE.md § Session Start| File | Purpose |
|---|---|
references/workflow.md | Six-phase wizard execution plan (entry point for full onboarding) |
references/system-discovery.md | Phase B — what gets scanned, with which permission, what's never scanned |
references/smart-suggestions.md | Phase C — evidence → recommendation mapping (S1–S12) with full advisory text |
references/feature-catalog.md | Phase E + --features — read-only catalogue of all Bridge features |
references/discovery.md | Legacy: repo-only ecosystem detection. Now a sub-case of system-discovery.md |
references/preview-generator.md | Phase F — HTML preview with Activated + Suggested-for-later sections |
protocols/standing-orders/feature-discovery.md — proactive featuresuggestions in the weekly briefing window (uses work/onboarding-state.yaml to avoid double-suggesting)
docs/feature-tour.md — per-cluster-wrapper "create your first X"guide for after onboarding
bridge-config.yaml.template — every block has a comment pointing atthe matching --add <feature> re-entry path
(matches language.conversation from Phase A)
[y]scaffolds immediately so the user sees progress
surface the issue in Phase F's validation step
bridge-config.yaml outside of explicit phases; theuser must always see the current state before changes are committed
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.