| name | integrate-concept-cluster |
| description | Triage and integrate a workbench cluster of related working documents โ shape detection (audience-targeted / conceptual exploration / standalone reports / cluster nav), iteration-pair reconciliation, optional composite drafting, per-shape fate proposals. Use when the user says to integrate a cluster, graduate working documents, close out a workbench cluster, or process a sibling cluster from a concept forge. |
| argument-hint | [cluster-path or cluster-name; optional satellite-decision-manifest if chained] |
Integrate Concept-Cluster: $ARGUMENTS
Triage a workbench cluster of related working documents and integrate them into the vault. Detect shape-types, reconcile iteration pairs, optionally merge into composite documents, and apply graduations / absorptions / deletions per a user-confirmed plan.
This is the cluster-specific integration skill. For non-forge single items use /integrate-workbench (lightweight default). For concept-forge artifacts use /integrate-concept-forge (which auto-offers a chain to this skill at its Step 11). This skill works standalone for any workbench cluster (forge-spawned or otherwise โ project clusters, research clusters, presentation-prep clusters) AND chained from /integrate-concept-forge with a satellite-decision manifest passed through.
Reference rules and global constraints
Load: concept-craft (anti-sycophancy guardrails, "tool is not truth"), workbench (graduation conventions, frontmatter schema), operating-principles (proactive linking checklist), vault-conventions (atomic-note discipline + collection-note exception).
Global constraints:
- Plan-before-execute โ Never modify vault state until user confirms each phase. Show the plan, wait for approval, then execute.
- Per-item user gating โ Heuristics propose; user disposes. Always.
- Tool is not truth โ When detection or fate logic doesn't fit, the logic is wrong, not the file. Honor user override always.
- Don't merge silently โ Composite drafting always returns a draft for user review before placement.
Dynamic Context
Cluster preview
!ls -la "Workbench/$ARGUMENTS/" 2>/dev/null || echo "(no cluster at Workbench/$ARGUMENTS/ โ try resolving cluster name in Step 1)"
Cluster README (if present)
!obsidian read path="Workbench/$ARGUMENTS/$ARGUMENTS โ README.md" vault="{{VAULT_NAME}}" 2>/dev/null | head -60 || echo "(no README โ apply default detection)"
Step 1: Locate cluster and detect invocation mode
Parse $ARGUMENTS:
- If a path: read directory directly.
- If a cluster name: resolve to
Workbench/[name]/.
- If ambiguous or empty: list candidate workbench subdirectories with file counts; ask which to integrate.
Detect invocation mode:
- Standalone: arguments contain just the cluster name/path. No manifest.
- Chained: arguments contain a satellite-decision manifest from
/integrate-concept-forge (structured as: list of satellites with names, scores, destinations, and absorption pointers indicating which forge sub-concepts mapped to which satellites). When chained, the manifest is the authoritative input for absorption decisions in Step 5.
If chained without a recognizable manifest (caller error), treat as standalone and warn the user.
Step 2: Cluster inventory
List all files in cluster. Read frontmatter of each (project, status, tags, areas). Identify cluster nav (typically README.md or named [Cluster Name] โ README.md).
If a cluster README exists, read it carefully. The README often documents graduation criteria per file (the user maintains this as the cluster develops). Use those criteria as authoritative defaults โ they override the heuristic defaults in references/shape-detection.md.
Surface a one-line summary: "Cluster has N files in K shape-categories; M iteration pairs detected (preview)."
Step 3: Shape detection
Read references/shape-detection.md before scoring. Apply the heuristics to classify each file into one of four shape-types:
- Audience-targeted โ briefings, slide decks, presentations, proposals
- Conceptual exploration โ taxonomies, distinctions, framings being developed
- Standalone report โ analyses, audits, replies, gap reports
- Cluster nav โ README, INDEX, TOC
Files that don't match any โ "unknown" โ surface for user reclassification.
Present classification with reasoning visible:
Shape detection (N files):
- Audience-targeted (4): Activation Threshold โ Talk Outline v1, Activation Threshold โ Talk Outline v2, Habit Workshop Handout long, Habit Workshop Handout compressed
- Conceptual exploration (2): Friction Stacking โ Distinction, Warm vs Cold Start Polarity
- Standalone report (1): On-Ramp Field Test Notes
- Cluster nav (1): README
- Unknown (0)
Reclassify any?
Step 4: Iteration-pair detection
Read references/iteration-pairs.md before scoring. Apply pair-detection heuristics within each shape group:
- Filename similarity (shared base name + version marker)
- Version markers (" v2", " โ Compressed", " โ My Edits", " โ Final", date suffixes)
- Date proximity (typically within 3-5 days)
Present detected pairs with proposed relationship type (supersedes / both-canonical / working-and-final / versions-of-same):
Iteration pairs detected:
- Talk Outline v1 โ v2 (supersedes; v2 supersedes v1)
- Habit Workshop Handout long + compressed (both-canonical; both delivered?)
Confirm pairs / break / regroup?
User can confirm, break a pair, or regroup files. Do not proceed until user confirms.
Step 5: Triage proposal โ PLAN, do not execute
For each shape group, present default fate from references/shape-detection.md plus iteration-pair handling from references/iteration-pairs.md. If chained from /integrate-concept-forge, apply absorption mapping for conceptual-exploration items.
Audience-targeted (4 files, 2 iteration pairs):
Default fate: graduate to References/ as artifact-of-record (categories: [[Briefings]] or audience-specific).
Iteration pairs:
- Talk Outline v1 โ v2 (supersedes): graduate v2; archive v1 (or delete; user chooses)
- Habit Workshop Handout long + compressed (both-canonical): graduate both โ OR โ merge into composite via
content-drafter
Walk through pairs?
Conceptual exploration (2 files):
[If chained]: matched against satellite-decision manifest:
- Friction Stacking โ Distinction โ content absorbed into [[Friction Stacking]] satellite in forge โ propose delete (content already in vault)
- Warm vs Cold Start Polarity โ no clear absorption โ propose graduate to Notes/ as standalone concept note
[If standalone]: check absorption against existing
Notes/ via QMD; propose graduate / absorb / delete per item.
Standalone report (1 file):
- On-Ramp Field Test Notes โ graduate to
References/ (categories: [[Reports]])
Cluster nav (1 file):
- README โ propose delete (purpose ends with cluster)
User accepts/skips by group with per-item override. Do not proceed until user confirms.
Step 6: Composite drafting (conditional)
For each iteration pair the user selected "merge into composite" in Step 5, invoke the composite-drafting workflow.
Read references/composite-drafting.md for the full pattern. Summary: spawn content-drafter agent via Task tool with source file paths + merge brief (intended audience, tone, canonical structure). Agent returns a composite draft. Surface to user for review before placement. Do not place until user confirms each composite.
If content-drafter invocation fails, surface the error to user โ do NOT fall back to inline drafting silently.
Step 7: Execution phase 1 โ Graduations
For accepted graduates from Step 5 (audience-targeted โ References/; standalone reports โ References/ or Notes/; conceptual-exploration items selected for graduation):
- Apply full proactive linking checklist from
operating-principles.md:
- Set
categories (per shape-type default: [[Briefings]], [[Reports]], [[Concepts]], etc. โ confirm with user if ambiguous)
- Set
areas (inherit from cluster items' frontmatter or from parent project)
- Set
status: completed for delivered artifacts; active for living references
- Verify
tags; ensure created is set
- Search vault for related notes (QMD
vec query + obsidian search); add wikilinks
- Verify category note exists; offer to create if missing
- Move file from
Workbench/[cluster]/ to destination via Bash mv
- Search for and update any references to the old path in other vault notes (use grep/QMD)
- Update workbench-only frontmatter fields (remove
status: drafting/paused/ready; remove project workbench-link; preserve everything else)
Step 8: Execution phase 2 โ Absorptions
For accepted absorbs from Step 5 (typically conceptual-exploration content folded into a satellite per the manifest, or into existing concept notes):
- Read the absorption target (the satellite or existing concept note)
- Read the source artifact
- Present a merge plan: what content moves where (typically as additions to target's Bounds & Edges, The Insight Unpacked, or as a sub-section)
- User confirms merge plan per item
- Execute: edit target via Edit tool, then delete source via Bash
rm
Do not proceed until user confirms each merge.
Step 9: Execution phase 3 โ Deletions and archives
For accepted deletions from Step 5 (cluster nav README; superseded versions like Talk Outline v1; redundant drafts):
- List all proposed deletions/archives in one batch
- Confirm explicitly: "Delete these N files? Git history preserves them."
- Execute:
rm for deletions; mv to a .archive/ location if user prefers archive over delete (for living artifacts that might be referenced later)
Step 10: Cleanup
- If all files in
Workbench/[cluster]/ have been handled and the directory is empty: remove the empty directory.
- Search the vault for any remaining references to old
Workbench/[cluster]/... paths; report any found (do not auto-fix; surface for user confirmation).
- Verify no broken wikilinks introduced.
Step 11: Commit and push
cd "{{VAULT_PATH}}"
git add <graduates> <absorbed-target updates> <composite drafts> <reference updates>
git rm <deletions>
git commit -m "Integrate concept-cluster: [cluster-name]"
git push
Use specific file adds/removes, not git add -A. The commit message should name the cluster.
Edge Cases
- Empty cluster (only README, no other files) โ Skip Steps 3-9; just delete README and remove directory.
- No iteration pairs detected โ Skip Step 4 confirmation prompt; proceed directly to Step 5 with all files as singletons.
- No README โ Skip cluster-nav handling; default detection applies to remaining files.
- Cluster not chained but contains forge-related files โ Run as standalone; absorption pointers won't be available; user does manual mapping in Step 5.
- content-drafter agent not available or fails โ Surface error to user; offer to retry or to keep both versions instead of merging. Do NOT silently inline.
- User aborts mid-flow โ No commits made; partial state may exist (some graduations already executed in Step 7 if abort happened in Step 8 or later). On abort, list what executed vs what didn't; offer to commit partial OR rollback (
git restore for unstaged + mv reversal for moved files).
- Cluster file already exists at destination โ Prompt: "
References/[Name].md already exists. Merge into existing, rename, or skip?"
- README references files by old path after their graduation โ Update README references before deleting it, or delete README first (its purpose ends with cluster).
Anti-pattern reminders
- Never silently mutate vault state. Every phase shows the plan; user confirms; then execute.
- Never collapse user gating into batch-of-one. Group items, but always allow granular per-item override.
- Never merge drafts silently. Composite drafting always returns to user for review before placement.
- Never fabricate when sources disagree. If two drafts conflict on a fact, flag for user โ don't synthesize a confident merger.
- Never silently delete files. Confirm each deletion (or batch with explicit list).
- Honor "tool is not truth" (
concept-craft). When detection or fate logic doesn't fit, the logic is wrong, not the file.
- Don't break the auto-offered chain. When invoked from
/integrate-concept-forge, the manifest is the source of truth for absorption decisions โ don't ignore it.