Release Content Sync
Sync the latest OrchestKit release to external knowledge systems.
CC ≥ 2.1.118 (M122): Sync triggers on the new
claude plugin tagannotated tag (in addition to plaingit tag). The tag's annotation embeds the plugin manifest version, which release-sync uses as the canonical source-of-truth for the version being synced. Seesrc/skills/chain-patterns/references/plugin-tag.md.
What This Does
- Reads the latest CHANGELOG entry, CLAUDE.md, and hook README
- Updates the OrchestKit NotebookLM KB notebook with fresh sources
- Ingests the release digest into HQ Knowledge Base (if available)
- Optionally generates a new podcast from the updated notebook
Prerequisites
- MCP servers:
notebooklm-mcpand/orhq-content - NotebookLM notebook ID stored in
.claude/release-sync-config.json
Step 1: Detect Version and Read Sources
python# Read current version from CLAUDE.md version = Grep(pattern="Current.*\\d+\\.\\d+\\.\\d+", path="CLAUDE.md") # Read CHANGELOG — extract latest release section changelog = Read("CHANGELOG.md", limit=80) # Read hook architecture summary hook_readme = Read("src/hooks/README.md", limit=100) # Read CLAUDE.md for project overview claude_md = Read("CLAUDE.md")
Step 2: Load Config
pythonconfig = Read(".claude/release-sync-config.json") # Expected format: # { # "notebooklm_notebook_id": "0a05e680-e33b-4d8c-94b2-5df26a1af329", # "hq_kb_project": "orchestkit" # }
If config doesn't exist, prompt user:
pythonAskUserQuestion(questions=[{ "question": "NotebookLM notebook ID for OrchestKit KB?", "header": "Configuration", "options": [ {"label": "Use default", "description": "OrchestKit v7 — Complete KB (0a05e680...)"}, {"label": "I'll provide", "description": "Enter a custom notebook ID"} ] }])
Step 2b: Choose Sync Targets
Ask for the four target values: notebooklm, hq_kb, slack, notes.
python# Skip the form when targets are explicit: # release-sync --targets=notebooklm,slack → skip, use those # # Otherwise ask. This used to prefer an ork-elicit MCP form and fall back to # AskUserQuestion; the server was retired (EPIC C mechanism 11) because # AskUserQuestion is the CC-native surface for this and a permanent MCP tool # slot to restate it was the parallel mechanism. One path now. # # ALL targets default to False — OrchestKit is open-source and these targets # (notebook IDs, HQ KB, Slack) are user-private infrastructure the plugin # cannot assume is configured. The user explicitly opts in. targets = { "notebooklm": ask_yn("Push to NotebookLM?", default=False), "hq_kb": ask_yn("Push to HQ KB?", default=False), "slack": ask_yn("Announce in Slack?", default=False), "notes": "" }
Three AskUserQuestion round-trips. The rest of this skill reads targets["notebooklm"], targets["hq_kb"], targets["slack"], targets["notes"] regardless of source.
Privacy note: all targets are opt-in (default false). NotebookLM notebook IDs and HQ knowledge bases are user-private — the open-source plugin must not assume they exist or push to them implicitly.
Step 3: Update NotebookLM Sources
python# Probe MCP availability ToolSearch(query="select:mcp__notebooklm-mcp__source_add") # Add release digest as new source mcp__notebooklm-mcp__source_add( notebook_id=config.notebooklm_notebook_id, source_type="text", title=f"Release {version} — {date}", text=release_digest, wait=True )
Step 4: Ingest to HQ Knowledge Base (Optional)
python# Probe HQ content MCP ToolSearch(query="select:mcp__hq-content__knowledge_ingest") # If available, ingest mcp__hq-content__knowledge_ingest( title=f"OrchestKit {version} Release Notes", content=release_digest, project="orchestkit", content_type="release-notes" )
Step 5: Generate Podcast (Optional)
pythonAskUserQuestion(questions=[{ "question": "Generate a podcast from the updated notebook?", "header": "Podcast", "options": [ {"label": "Yes — deep dive", "description": "~10 min podcast covering all changes"}, {"label": "Yes — brief", "description": "~3 min summary"}, {"label": "No", "description": "Skip podcast generation"} ] }]) if podcast_requested: mcp__notebooklm-mcp__studio_create( notebook_id=config.notebooklm_notebook_id, artifact_type="audio", audio_format=selected_format, confirm=True )
Output
Report what was synced:
Release Sync Complete — v{version} NotebookLM: source added to {notebook_title} HQ KB: ingested as release-notes/{version} Podcast: generating (poll with studio_status)


