Notion Bridge Skill
Routes human-facing artifacts to Notion. The policy layer over the Notion MCP and notion plugin. Decides what gets shared with humans vs what stays in Claude Code's local memory.
Push vs Stay Local: The Routing Rules
Push to Notion (human-facing)
These artifacts go to Notion because humans other than Brandon (advisors, partners, future team) might need them:
- Architecture decisions — ADRs, design docs, technical RFCs.
- Project status updates — weekly summaries, milestone reports.
- Retrospectives — post-mortems, post-ship retros, lessons-learned reports for stakeholders.
- Board / investor materials — financial models, investor updates, fundraising decks.
- Customer-facing docs — user guides, API references, FAQ.
- Strategic plans — quarterly plans, OKRs, product roadmaps.
- Meeting outputs — meeting notes intended for shared reference, action items for others.
- Public commitments — anything Brandon has agreed to deliver to someone external.
Stay Local (Brandon-only)
These artifacts stay in $HOME/.claude/ because they are Brandon's working memory:
- Lessons (
memory/projects/*/lessons.md) — internal learning.
- Session transcripts (
memory/sessions/) — Claude Code working memory.
- Operator model (
memory/global/operator-model.md) — model of Brandon.
- Curator reports (
memory/global/curator-report-*.md) — internal system audits.
- Skill files (
skills/*/SKILL.md) — Claude Code configuration.
- Ephemeral plans — drafts and scratch work.
- Code review notes — judge-panel output unless explicitly requested.
- Private journal entries (via private-journal-mcp) — Brandon's reflections.
Ambiguous: Ask Brandon
When an artifact could go either way, ask. Specifically when:
- It is a doc Brandon wrote alone but might share later (default: stay local, ask).
- It is a strategy doc for a project that has no external stakeholders yet (default: ask).
- It is a financial number that is not actively secret (default: ask).
Push Protocol
When pushing to Notion:
- Classify — confirm the artifact matches one of the push categories above.
- Sanitize check — scan for secrets, API keys, PII, internal financials. If detected, STOP and surface to Brandon with the specific finding.
- Target selection — determine target page or database:
- Architecture decisions → "Engineering / ADRs" database.
- Project status → " / Weekly Status" database.
- Retrospectives → "Operations / Retrospectives" database.
- Customer-facing → ask Brandon.
- Other → ask Brandon.
- One-line preview — show Brandon:
READY TO PUSH TO NOTION:
Target:
Title:
Preview: <first 100 chars>
Tags: <project, type>
Confirm? (yes / no / different target)
- Wait for explicit yes — never push without "yes" or equivalent.
- Execute via Notion MCP — use the
notion plugin slash commands when available, raw MCP otherwise.
- Confirm and link — return the Notion URL of the created/updated page.
Sanitize Check: Hardcoded Patterns
Never push content containing:
- Strings matching common secret patterns:
sk_[a-zA-Z0-9]{20,}, ghp_[a-zA-Z0-9]{36}, xoxb-, xoxp-, AWS access keys (AKIA[A-Z0-9]{16}), Bearer\s+[a-zA-Z0-9._-]{20,}.
- Email addresses unless Brandon's own (
brandon@*) or the page is clearly intended for the team.
- Phone numbers, SSNs, credit card-like patterns.
- File paths under
~/.ssh/, ~/.aws/, ~/.config/, or anything containing secret, private_key, password, token=, apikey=.
If a match is found:
SANITIZE BLOCK: Notion push halted.
Found: <pattern matched, with surrounding 20 chars redacted to >
At:
Options:
Redact and push (replaces with )
Edit the artifact first
Push anyway (require explicit override: type "push with secrets")
The "push anyway" path requires Brandon to type the exact override phrase. Do not accept shortcuts.
Pull from Notion
Symmetrical: notion-bridge also handles fetching from Notion when /ship needs context from a doc.
Use cases:
- Brandon references a Notion doc by URL or title ("the ADR on auth").
- A task needs the latest project status before starting.
- The session-recall skill returns a hit pointing to Notion content.
Pull via Notion MCP. Return the content. Do not write to local memory unless Brandon explicitly says "save this locally".
Integration with Other Skills
- /ship — at end of pipeline, notion-bridge inspects generated artifacts. If any match push categories, prompts Brandon to push.
- project-memory — never pushes raw lessons to Notion. If Brandon asks for a "project summary for sharing", the bridge generates a summary FROM lessons but routes that summary (not the lessons themselves).
- skill-curator — curator reports stay local. Never pushed.
- operator-model — never pushed to Notion. Sensitive personal data.
Plugin Compatibility
Enhanced by:
notion@claude-plugins-official plugin — provides slash commands, structured Notion operations.
- Notion MCP — raw create/update/search operations.
If notion plugin is missing, fall back to direct Notion MCP calls. If Notion MCP is missing, refuse to push and explain. Never silently fail.
Invocation Contract
Modes:
classify — given an artifact, returns push|local|ambiguous.
push — pushes an artifact to Notion after sanitize + preview + confirm.
pull — fetches a Notion doc by URL or title.
sanitize_check — runs only the secret/PII scan, returns findings without pushing.
Hard Constraints
- NEVER push without explicit "yes" from Brandon for that specific artifact.
- NEVER push content that fails sanitize check unless Brandon types the exact override phrase.
- NEVER write Notion content to local memory without Brandon's explicit save request.
- NEVER push lessons, sessions, curator reports, or operator-model. These are local-only.
- ALWAYS show the one-line preview before pushing.
- ALWAYS return the Notion URL after a successful push.
Source: ShadyBad/claude-ship — distributed by TomeVault.
1---2name: notion-bridge3description: Routes human-facing artifacts to Notion via the Notion MCP and notion plugin. Determines what gets pushed to Notion (architecture decisions, ADRs, project status, retrospectives, board materials, weekly summaries, customer-facing docs) and what stays local (lessons, session transcripts, operator-model, curator reports, ephemeral plans, code review notes, skill files). Use when a task produces a human-facing artifact, when Brandon says "push this to Notion" or "save this for the team", or at the end of a /ship run that generated documentation worth sharing. Always asks Brandon to confirm target page or database with one-line preview before pushing. Never pushes secrets, API keys, internal financial numbers, or PII without explicit per-push approval. Coordinates with notion plugin for slash commands and Notion MCP for raw operations. Use when this capability is needed.4---56# Notion Bridge Skill78Routes human-facing artifacts to Notion. The policy layer over the Notion MCP and `notion` plugin. Decides what gets shared with humans vs what stays in Claude Code's local memory.910## Push vs Stay Local: The Routing Rules1112### Push to Notion (human-facing)1314These artifacts go to Notion because humans other than Brandon (advisors, partners, future team) might need them:1516- **Architecture decisions** — ADRs, design docs, technical RFCs.17- **Project status updates** — weekly summaries, milestone reports.18- **Retrospectives** — post-mortems, post-ship retros, lessons-learned reports for stakeholders.19- **Board / investor materials** — financial models, investor updates, fundraising decks.20- **Customer-facing docs** — user guides, API references, FAQ.21- **Strategic plans** — quarterly plans, OKRs, product roadmaps.22- **Meeting outputs** — meeting notes intended for shared reference, action items for others.23- **Public commitments** — anything Brandon has agreed to deliver to someone external.2425### Stay Local (Brandon-only)2627These artifacts stay in $HOME/.claude/ because they are Brandon's working memory:2829- Lessons (`memory/projects/*/lessons.md`) — internal learning.30- Session transcripts (`memory/sessions/`) — Claude Code working memory.31- Operator model (`memory/global/operator-model.md`) — model of Brandon.32- Curator reports (`memory/global/curator-report-*.md`) — internal system audits.33- Skill files (`skills/*/SKILL.md`) — Claude Code configuration.34- Ephemeral plans — drafts and scratch work.35- Code review notes — judge-panel output unless explicitly requested.36- Private journal entries (via private-journal-mcp) — Brandon's reflections.3738### Ambiguous: Ask Brandon3940When an artifact could go either way, ask. Specifically when:41- It is a doc Brandon wrote alone but might share later (default: stay local, ask).42- It is a strategy doc for a project that has no external stakeholders yet (default: ask).43- It is a financial number that is not actively secret (default: ask).4445## Push Protocol4647When pushing to Notion:48491. **Classify** — confirm the artifact matches one of the push categories above.502. **Sanitize check** — scan for secrets, API keys, PII, internal financials. If detected, STOP and surface to Brandon with the specific finding.513. **Target selection** — determine target page or database:52 - Architecture decisions → "Engineering / ADRs" database.53 - Project status → "<Project Name> / Weekly Status" database.54 - Retrospectives → "Operations / Retrospectives" database.55 - Customer-facing → ask Brandon.56 - Other → ask Brandon.574. **One-line preview** — show Brandon:58READY TO PUSH TO NOTION:59Target: <database or page>60Title: <artifact title>61Preview: <first 100 chars>62Tags: <project, type>63Confirm? (yes / no / different target)645. **Wait for explicit yes** — never push without "yes" or equivalent.656. **Execute via Notion MCP** — use the `notion` plugin slash commands when available, raw MCP otherwise.667. **Confirm and link** — return the Notion URL of the created/updated page.6768## Sanitize Check: Hardcoded Patterns6970Never push content containing:7172- Strings matching common secret patterns: `sk_[a-zA-Z0-9]{20,}`, `ghp_[a-zA-Z0-9]{36}`, `xoxb-`, `xoxp-`, AWS access keys (`AKIA[A-Z0-9]{16}`), `Bearer\s+[a-zA-Z0-9._-]{20,}`.73- Email addresses unless Brandon's own (`brandon@*`) or the page is clearly intended for the team.74- Phone numbers, SSNs, credit card-like patterns.75- File paths under `~/.ssh/`, `~/.aws/`, `~/.config/`, or anything containing `secret`, `private_key`, `password`, `token=`, `apikey=`.7677If a match is found:78SANITIZE BLOCK: Notion push halted.79Found: <pattern matched, with surrounding 20 chars redacted to <REDACTED>>80At: <line number or section>81Options:8283Redact and push (replaces with <REDACTED>)84Edit the artifact first85Push anyway (require explicit override: type "push with secrets")868788The "push anyway" path requires Brandon to type the exact override phrase. Do not accept shortcuts.8990## Pull from Notion9192Symmetrical: notion-bridge also handles fetching from Notion when /ship needs context from a doc.9394Use cases:95- Brandon references a Notion doc by URL or title ("the ADR on auth").96- A task needs the latest project status before starting.97- The session-recall skill returns a hit pointing to Notion content.9899Pull via Notion MCP. Return the content. Do not write to local memory unless Brandon explicitly says "save this locally".100101## Integration with Other Skills102103- **/ship** — at end of pipeline, notion-bridge inspects generated artifacts. If any match push categories, prompts Brandon to push.104- **project-memory** — never pushes raw lessons to Notion. If Brandon asks for a "project summary for sharing", the bridge generates a summary FROM lessons but routes that summary (not the lessons themselves).105- **skill-curator** — curator reports stay local. Never pushed.106- **operator-model** — never pushed to Notion. Sensitive personal data.107108## Plugin Compatibility109110Enhanced by:111- `notion@claude-plugins-official` plugin — provides slash commands, structured Notion operations.112- Notion MCP — raw create/update/search operations.113114If `notion` plugin is missing, fall back to direct Notion MCP calls. If Notion MCP is missing, refuse to push and explain. Never silently fail.115116## Invocation Contract117118Modes:119120- `classify` — given an artifact, returns push|local|ambiguous.121- `push` — pushes an artifact to Notion after sanitize + preview + confirm.122- `pull` — fetches a Notion doc by URL or title.123- `sanitize_check` — runs only the secret/PII scan, returns findings without pushing.124125## Hard Constraints126127- NEVER push without explicit "yes" from Brandon for that specific artifact.128- NEVER push content that fails sanitize check unless Brandon types the exact override phrase.129- NEVER write Notion content to local memory without Brandon's explicit save request.130- NEVER push lessons, sessions, curator reports, or operator-model. These are local-only.131- ALWAYS show the one-line preview before pushing.132- ALWAYS return the Notion URL after a successful push.133134---135> Source: [ShadyBad/claude-ship](https://github.com/ShadyBad/claude-ship) — distributed by [TomeVault](https://tomevault.io).136<!-- tomevault:4.0:skill_md:2026-06-15 -->