bridge · diff
git:20260923.7852cb4 to git:20261007.83cf275
55 added, 233 removed. Audit A to A.
---
name: bridge
- description: "Capture cross-project connections on the fly. Use when you notice a shared pattern, people-bridge, knowledge cascade, narrative amplifier, or flywheel loop linking two projects. Persists structured YAML to a bridges directory. Triggers on: bridge, connects to, feeds into, same pattern as, cross-project link, archetype detection, bidirectional, one-way, active, potential, theoretical."
- allowed-tools: bash, read, write, edit, glob
+ description: "Capture a cross-project connection the moment it surfaces, such as a shared pattern, a person carrying context between projects, a story that lends another project credibility, a feedback loop. Use when one project feeds, reuses, reinforces another: 'connects to', 'feeds into', 'same pattern as'. Writes one YAML file per bridge to a bridges directory, with list, map and stats subcommands."
+ allowed-tools: Bash, Read, Write, Edit, Glob
model: haiku
argument-hint: "<source> → <target>: <description>"
- context: main
user-invocable: true
---
- # Bridge — Cross-Project Connection Capture
-
- Capture cross-project bridges in the moment, while you're in context. Bridges are knowledge — they live in a bridges directory, not in project artifacts.
-
- ## Why
-
- Bridges are discovered during work, not during planning. When you're deep in a meeting and realize "this pattern connects to another project" — that's when `bridge` captures it.
-
- ## Step 0: Load Config
-
- Read the project config file (path configured via `$PRAXIS_DIR` or equivalent). This file contains:
- - Project aliases (keys), names, roles, tiers, goals, flywheel roles
- - Stakeholders with `also_in` cross-references (for people-bridge detection)
- - GTD and praxis paths
-
- Use project YAML keys as aliases (case-insensitive matching). If a user types a project name instead of alias, fuzzy-match against `name` fields.
-
- If config missing → `⚠️ No project config found. Create it with your project definitions.`
-
- ## Archetypes
-
- Every bridge has a type — one of 10 archetypes (`flywheel`, `knowledge`, `people`, `terrain`, `narrative`, `identity`, `complexity`, `local`, `option`, `mirror`). Full descriptions and the keyword/context heuristics used to auto-detect them live in [references/archetype-detection.md](references/archetype-detection.md) — load it before auto-detecting an archetype from a description, or when a user asks what an archetype code means.
-
- ## Commands
-
- | Command | Action |
- |---|---|
- | `/bridge <src> → <tgt>: <desc>` | Capture a bridge (auto-detect archetype) |
- | `/bridge <src> → <tgt> [type]: <desc>` | Capture with explicit archetype |
- | `/bridge list` | Show recent bridges (last 10) |
- | `/bridge list <project>` | Show bridges involving a project |
- | `/bridge map` | Generate mermaid bridge map from all captures |
- | `/bridge stats` | Weekly summary — counts by project and archetype |
-
- ## Storage
-
- **Directory:** Bridges directory (e.g., `thinking/bridges/` under your configured workspace root)
-
- Each bridge is a YAML file: `{date}-{seq}-{source}-to-{target}.yaml`
-
- Example: `2026-04-08-1-hp-to-brand.yaml`
-
- **Sequence**: Within a day, increment seq (1, 2, 3...). Check existing files for the day to determine next seq.
-
- ### Schema
-
- ```yaml
- source: HP
- target: BR
- archetype: narrative
- emoji: 📖
- description: "Philosopher council on construct AI → reframes human-centric positioning from marketing to philosophy"
- direction: one-way # one-way | bidirectional
- strength: potential # active | potential | theoretical
- context: "During introspect session, realized philosopher encounters are unique differentiator"
- date: 2026-04-08
- ```
-
- **Fields:**
- - `source`, `target`: Project alias (uppercase, from config keys)
- - `archetype`: One of the 10 codes
- - `emoji`: Archetype emoji
- - `description`: The bridge itself — what flows from source to target
- - `direction`: `one-way` (A→B only) or `bidirectional` (A↔B, create one file with note)
- - `strength`: `active` (happening now), `potential` (could happen, not activated), `theoretical` (speculative)
- - `context`: Optional — what triggered the discovery (session, meeting, realization)
- - `date`: ISO date
-
- ## Capture (`/bridge <args>`)
-
- ### Parse Arguments
-
- Input: `/bridge HP → BR: philosopher encounters reframe human-centric positioning`
-
- 1. Split on `→` to get source and rest
- 2. Split rest on `:` to get target (+ optional `[type]`) and description
- 3. Resolve aliases against config keys (case-insensitive). If no match, fuzzy-match against `name` fields.
- 4. If `[type]` present, use it; otherwise auto-detect archetype
-
- ### Auto-Detect Archetype
-
- If no explicit type, apply the keyword and config-context signals in [references/archetype-detection.md](references/archetype-detection.md). If ambiguous after both signals, default to `knowledge` and say so in the response — NEVER silently guess a rarer archetype on weak signal.
-
- ### Detect Direction & Strength
-
- - Default: `one-way`, `potential`
- - If description contains "↔" or "bidirectional" or "both ways" → `bidirectional`
- - If description contains "already", "happening", "active", "doing this" → `active`
- - If description contains "could", "should", "would", "not yet" → `potential`
- - If description contains "maybe", "speculative", "in theory" → `theoretical`
-
- ### Write File
-
- 1. Guard: check workspace root is configured. If not: `⚠️ Workspace root not set. Configure via environment variable (e.g. export PRAXIS_DIR="$HOME/dev/praxis")`
- 2. Create bridges directory if it does not exist
- 3. Determine seq: count existing `{date}-*` files + 1
- 4. Write YAML file
- 5. Respond (one line): `🔗 Bridge #N: {emoji} {source} → {target} ({archetype}) — {short desc}`
- 6. **Weekly nudge** (optional): count bridges this week. If ≥3 involving same project pair: append `📊 {N} bridges this week involving {pair}. Consider updating strategic bridges during review.`
- 7. **Resume prior work immediately.**
-
- ## List (`/bridge list [project]`)
-
- 1. `Glob` for all YAML files in bridges directory
- 2. Read each file, parse YAML
- 3. If project filter: match against config aliases or names (case-insensitive)
- 4. Sort by date desc, show last 10
- 5. Display:
-
- ```
- 🔗 Bridges (last 10)
- 1. 2026-04-08 📖 HP → BR: philosopher encounters reframe positioning (potential)
- 2. 2026-04-08 🧠 BNP → HP: observability patterns = atelier content (active)
- 3. 2026-04-07 👤 HP ↔ SL: Matthieu carries context both ways (active)
- ```
-
- If empty: `🔗 No bridges captured yet. Use /bridge <source> → <target>: <description>`
-
- ## Map (`/bridge map`)
-
- 1. Read config for project names (display labels)
- 2. Read all bridge files
- 3. Generate mermaid graph using config names as node labels:
-
- ```mermaid
- graph LR
- classDef active fill:#90EE90,stroke:#333,color:#000
- classDef potential fill:#FFE4B5,stroke:#333,color:#000
- classDef theoretical fill:#FFB6C1,stroke:#333,color:#000
-
- HP["Homo Promptus"] -->|"📖 narrative"| BR["Personal Brand"]:::active
- DS["Digital Stoic"] -->|"🧠 patterns"| HP:::potential
- HP <-->|"👤 Matthieu"| SL["Slasheo"]:::active
- ```
-
- 1. Group by strength (active=green, potential=orange, theoretical=pink)
- 2. Output the mermaid block
-
- ## Stats (`/bridge stats`)
-
- 1. Read all bridge files
- 2. Read config for tier info
- 3. Count by: project (as source + target), archetype, strength, tier, this-week vs all-time
- 4. Display:
-
- ```
- 📊 Bridge Stats
- This week: 5 bridges
- All time: 23 bridges
-
- By project (top 5):
- HP: 12 (6→, 6←) [tier 1]
- BR: 8 (2→, 6←) [tier 1]
- DS: 7 (5→, 2←) [tier 1]
-
- By archetype:
- 🧠 knowledge: 8
- 📖 narrative: 6
- 👤 people: 4
-
- By strength:
- 🟢 active: 9
- 🟡 potential: 11
- 🔴 theoretical: 3
+ # Bridge: Cross-Project Connection Capture
- Tier 2 bridges: 3 (VN→HP, VN→BR, LW→HP)
- ```
+ Capture a bridge while you are still in context. Keep it in the bridges directory, never in project artifacts.
- ## Key Behaviors
+ ## Principles
- - **One-line capture response.** Never add commentary about bridge content.
- - **Resume immediately.** After capture, pick up prior conversation exactly where it left off.
- - **Store verbatim.** No reformulation of user's description.
- - **Auto-detect but don't over-think.** If archetype is ambiguous, pick the closest and move on.
- - **Weekly nudge, not nag.** Mention reconciliation opportunity only when pattern is clear (≥3 same pair).
- - **No GTD writes.** This skill only writes to the bridges directory. Strategic bridge summaries are updated manually during weekly review.
- - **Config-driven.** All project aliases come from the configured project YAML. If a project isn't in config, warn and suggest adding it.
+ - Capture fast, then step aside: answer in one line and resume the conversation that produced the link.
+ - Store the user's words, not yours, because a paraphrase erases the mental model that triggered the link.
+ - Choose an honest default over a confident guess; a wrong rare archetype hides in the stats, while a visible `knowledge` default gets corrected.
+ - Write to the bridges directory only.
## When to Use
- - A cross-project pattern or shared method surfaces mid-conversation and you want to capture it before the context is lost.
- - You hear yourself (or the user) say phrases like "this is the same as", "this connects to", "this feeds into", or "same pattern as" another project.
- - A person is mentioned who works across two projects and carries meaningful context between them (people-bridge signal).
- - You finish a session and realise one project generated a story, case study, or proof point that strengthens another.
- - A project is being used as a live test-bed for methods intended for a different project (terrain signal).
+ - Use it when the user says "this connects to" or "same pattern as" another project.
+ - Use it when a person who works across two projects carries context between them.
+ - Use it when a session produces a story or proof point that strengthens another project.
+ - Capture a stated link even without `/bridge`, provided both projects resolve from config.
## When Not to Use
- - The connection is purely administrative (shared calendar, same Slack channel) with no knowledge or value transfer.
- - Both "projects" are the same project under different names — use project config aliasing instead.
- - The user is mid-decision and does not want their flow interrupted; wait for a natural pause or explicit `/bridge` invocation.
- - The link is already captured: check `/bridge list` before writing a duplicate.
- - You are inside a weekly review session already updating strategic summaries — bridges are for in-the-moment capture, not retrospective logging.
-
- ## Anti-Patterns
-
- - **NEVER reformulate the user's description** — store the exact wording as given. **Why:** paraphrasing introduces your interpretation and erases the original mental model that triggered the insight.
- - **NEVER add unsolicited commentary on bridge content** — the response is one line only. **Why:** this skill is a capture tool, not an analysis tool; commentary derails the primary conversation.
- - **NEVER write to GTD task files or project artifacts** — only write to the bridges directory. **Why:** mixing bridge captures into task lists pollutes both systems and breaks single-responsibility.
- - **NEVER guess a project alias that is not in config** — warn and prompt the user to add it. **Why:** silent alias invention creates inconsistent data that breaks `/bridge list`, `/bridge map`, and stats aggregation.
- - **NEVER skip the seq check** — always count existing files for the day before assigning a sequence number. **Why:** collisions overwrite existing bridge captures with no warning.
- - **NEVER default direction/strength without checking for their explicit signals** — skipping the detection step and hardcoding `one-way` + `potential` regardless of what the description says throws away information the user gave you.
-
- **BAD:**
- ```yaml
- # User wrote "Matthieu carries context both ways" but skill wrote:
- direction: one-way
- strength: potential
- ```
+ - Avoid capturing administrative links (shared calendar, same channel) that move no knowledge.
+ - Avoid capturing when both names point at one project; fix the alias in config instead.
+ - Stop and wait when the user is mid-decision, until a natural pause or an explicit `/bridge`.
+ - Check for an existing bridge first, and never recapture a link that is already stored.
+ - Avoid capturing during a weekly review, because bridges are for in-the-moment capture.
- **GOOD:**
- ```yaml
- # Detected "both ways" -> bidirectional; "carries context" is present-tense -> active
- direction: bidirectional
- strength: active
- ```
+ ## Commands
- **Why:** a bridge with the wrong direction or strength misrepresents the actual relationship, and `/bridge stats` and `/bridge map` silently propagate the error into aggregate counts.
+ Run `/bridge <src> → <tgt>: <desc>` to capture, adding `[type]` after the target to force an archetype. Read [list, map and stats output](references/list-map-stats.md), then run `/bridge list [project]`, `/bridge map` or `/bridge stats` to read bridges back.
- ## Usage Examples
+ ## Capture Procedure
- **Capturing a knowledge bridge mid-session:**
+ 1. Read the project config at `$PRAXIS_DIR`. It holds aliases, names, tiers, flywheel roles and stakeholders with `also_in`. If it is missing, stop with `⚠️ No project config found. Create it with your project definitions.`
+ 2. Split the input on `→` or `↔` for the source, then on `:` for the target, any `[type]` and the description.
+ 3. Resolve both aliases against config keys, case-insensitively, then fuzzy-match against `name`. If either fails, write nothing. Warn and suggest adding the project to config.
+ 4. Pick the archetype. Use `[type]` when given, otherwise apply [archetype detection](references/archetype-detection.md). When the signal is weak, use `knowledge` and say so.
+ 5. Set the direction. Use `bidirectional` for `↔`, "bidirectional" or "both ways", otherwise `one-way`.
+ 6. Set the strength. Check hedges first ("maybe", "in theory" give `theoretical`), then present tense ("already", "carries" give `active`), then "not yet", "should", "if it works" for `potential`. Default to `potential`.
+ 7. Check for a duplicate, then write the file following [storage and schema](references/storage-and-schema.md).
+ 8. Answer with one line, then resume the prior conversation. Use `↔` for bidirectional bridges and add `, defaulted` in the brackets after a defaulted archetype:
- ```bash
- # User is in a meeting and realises a framework from one project applies to another
- /bridge PROJ-A → PROJ-B: observability patterns from service mesh apply directly to the atelier content structure
- # Skill writes: 2026-04-11-1-proj-a-to-proj-b.yaml (archetype: knowledge, strength: potential)
- # Response: 🔗 Bridge #1: 🧠 PROJ-A → PROJ-B (knowledge) — observability patterns from service mesh apply directly to the atelier content structure
+ ```text
+ 🔗 Bridge #N: {emoji} {source} → {target} ({archetype}) — {short desc}
```
- **Capturing a people-bridge with bidirectional flow:**
+ When three or more bridges this week share one project pair, append `📊 {N} bridges this week involving {pair}. Update strategic bridges during review.`
+ Take the highest number used today, add one, then confirm the file parses:
+
```bash
- # A stakeholder carries context in both directions between two projects
- /bridge PROJ-A ↔ PROJ-C [people]: Matthieu carries positioning context both ways and cross-pollinates priorities
- # Skill detects '↔' → direction: bidirectional; 'Matthieu' in stakeholders → archetype: people
- # Response: 🔗 Bridge #2: 👤 PROJ-A ↔ PROJ-C (people) — Matthieu carries positioning context both ways
+ last="$(ls "$dir" | sed -n "s/^$(date +%F)-\([0-9]*\)-.*/\1/p" | sort -n | tail -1)"; seq=$(( ${last:-0} + 1 ))
+ yq '.' ./thinking/bridges/"$file" > /dev/null
```
- **Listing recent bridges and generating a visual map:**
+ ## Anti-Patterns
- ```bash
- /bridge list PROJ-A
- # Returns last 10 bridges involving PROJ-A, sorted by date desc
+ - NEVER reformulate the user's description. WHY: a paraphrase adds your interpretation and erases the original mental model.
+ - NEVER comment on the bridge content. Keep the response to one line, because commentary derails the conversation.
+ - NEVER write to GTD files or project artifacts; mixing captures into task lists pollutes both.
+ - NEVER invent an alias that is not in config; invented aliases break list, map and stats.
+ - NEVER count files to get the sequence number, because after a deletion the count collides and overwrites a capture. Always use the highest number plus one.
+ - NEVER guess a rare archetype (`local`, `mirror`, `complexity`) on one keyword; the pitfall is a mislabel that skews the stats unseen.
+ - NEVER hardcode `one-way` and `potential`; run steps 5 and 6 so the stats do not repeat a wrong relationship.
- /bridge map
- # Returns a mermaid graph block with all captured bridges coloured by strength
+ ```yaml
+ # BAD: "Matthieu carries context both ways" stored with the defaults
+ direction: one-way
+ strength: potential
+ # GOOD: "both ways" is bidirectional, "carries" is present tense
+ direction: bidirectional
+ strength: active
```
## References
- | Topic | Reference | When to Use |
- | --- | --- | --- |
- | Full archetype table and keyword/context auto-detection heuristics | [Archetype Detection](references/archetype-detection.md) | Auto-detecting an archetype from a description, or explaining what an archetype code means |
- | PKM linking conventions this skill's cross-project model draws on | [Linking Your Thinking](https://www.linkingyourthinking.com/) | Background reading on why bridges are captured as atomic links, not folded into project notes |
- | YAML block scalar syntax for multi-line `description`/`context` fields | [YAML Spec — Block Scalars](https://yaml.org/spec/1.2-old/spec.html#id2794534) | Writing a bridge YAML file with a multi-line context field |
+ - [Archetype Detection](references/archetype-detection.md): the 10 archetypes and the signals for picking one
+ - [Storage and Schema](references/storage-and-schema.md): filename, sequence number, YAML schema, write guards, duplicate check
+ - [List, Map and Stats](references/list-map-stats.md): output formats for the read-only subcommands
+ - [Worked Examples](references/worked-examples.md): three captures showing how the signals combine