| name | architecture-explorer-headers |
| description | Backfill `<!-- EXPLORER_HEADER ... -->` blocks into existing `docs/NN-*.md` and `docs/components/**/*.md` files that predate v3.14.0. The header (5โ10 lines after the H1) surfaces key concepts, technologies, components, scope, and related ADRs in the first 60 lines so the architecture-explorer agent classifies the file accurately. Invoke when a doc was created before v3.14.0, when bulk-backfilling a legacy project, or whenever the explorer is misclassifying files. |
| triggers | ["regenerate explorer headers","regenerate explorer header","add explorer headers","add explorer header","backfill explorer headers","backfill explorer header","explorer headers","update explorer headers","sync explorer headers"] |
Architecture Explorer Headers โ Backfill Skill
When This Skill Is Invoked
Manually activated when users want to add or refresh <!-- EXPLORER_HEADER --> blocks across architecture docs. This is a maintenance workflow, not part of the normal authoring loop. Use it:
- After upgrading to v3.14.0+ on a project whose docs were authored under earlier versions.
- When the
architecture-explorer agent is routing files to irrelevant_files[] despite the file being clearly relevant โ usually a missing or stale header.
- After a major refactor that renamed components or added technologies, where existing headers have drifted.
NOT activated for:
- Routine architecture authoring (use
architecture-docs).
- Component file creation or update โ
architecture-component-guardian is the first-class writer of EXPLORER_HEADER blocks for docs/components/**/*.md (L1 descriptors and L2 containers) at create/update/migrate time. This backfill skill must NOT be used to fill gaps left by the guardian; reach for it only on legacy docs/NN-*.md files or to repair drift caused by external edits.
- ADR creation (use
architecture-definition-record).
ARCHITECTURE.md at the project root is never touched by this skill โ it is a navigation index and the explorer reads it in full.
Activation Forms
/skill architecture-explorer-headers โ interactive: scan, present plan, ask before writing.
/regenerate-explorer-headers โ slash-command alias.
/regenerate-explorer-headers --force โ overwrite existing headers (default behaviour skips files that already have one).
/regenerate-explorer-headers --dry-run โ list what would change, write nothing.
/regenerate-explorer-headers <path-glob> โ restrict to a subset (e.g. docs/components/payment-service/**).
Workflow
Phase 0 โ Resolve Plugin and Project Roots
- Resolve
plugin_dir: Glob for **/skills/architecture-explorer-headers/SKILL.md and strip the suffix; or read .claude/settings.json for extraKnownMarketplaces. Same approach as architecture-compliance.
- Confirm
project_root: the current working directory. Verify ARCHITECTURE.md exists at the root โ if not, abort with ARCHITECTURE.md not found at project root. This skill operates on architecture documentation.
Phase 1 โ Inventory
bun [plugin_dir]/skills/architecture-explorer-headers/utils/header-cli.ts list <project_root>
The CLI emits a JSON array, one entry per candidate file:
[
{ "path": "docs/01-system-overview.md", "has_header": false, "h1": "System Overview", "byte_size": 14820 },
{ "path": "docs/08-scalability-and-performance.md", "has_header": true, "h1": "Scalability & Performance", "byte_size": 18234 },
{ "path": "docs/components/payment-service.md", "has_header": false, "h1": "Payment Service", "byte_size": 9120 }
]
Parse it. Bucket files into:
- needs_header โ
has_header === false and the path is in scope (matches the <path-glob> argument if provided).
- already_has_header โ
has_header === true. With --force, treat these as needs_header too. Without --force, skip.
- skipped โ outside scope, or
ARCHITECTURE.md (excluded by the CLI).
If the inventory is empty, report No docs need explorer headers. and exit.
Phase 2 โ Present Plan
Show the user a one-screen plan:
Architecture Explorer Headers โ Backfill Plan
Project: <project_root>
Scope: <path-glob or "all docs">
Mode: <add-missing | --force | --dry-run>
Files to update (N):
- docs/01-system-overview.md (no header)
- docs/03-architecture-layers.md (no header)
- docs/components/payment-service.md (no header)
...
Files skipped (M):
- docs/08-scalability-and-performance.md (already has header โ pass --force to overwrite)
- ARCHITECTURE.md (project root index โ exempt by design)
Proceed? (yes / no / edit-scope)
Wait for confirmation. On --dry-run skip the prompt and end after this report.
Phase 3 โ Generate and Insert Headers
For each file in needs_header:
Step 3.1 โ Read the full file. You need the body to extract accurate metadata; do NOT cap reads here. (This skill is the inverse of the explorer โ you are creating the metadata the explorer will later sample.)
Step 3.2 โ Extract metadata. Build the EXPLORER_HEADER content from the file's actual content:
key_concepts โ 5โ15 domain terms that recur in the doc. Pull from H2/H3 headings, bold terms, table headers, and frequently-occurring capitalized phrases. Avoid generic words ("system", "approach", "data"); favor specific ones ("SLO", "MTTR", "idempotency", "circuit breaker"). Downstream skills (compliance, analysis, dev-handoff) filter the explorer's manifest by these terms when deciding which files to read โ concrete, domain-specific vocabulary surfaces relevant docs; generic vocabulary surfaces nothing.
technologies โ concrete tools/products named in the doc (Prometheus, AWS, PostgreSQL 16, Spring Boot 3.3, etc.). Skip generic terms ("database", "API"). Preserve version numbers.
components โ kebab-case component names referenced in the doc. Match docs/components/<NN>-<slug>.md filenames. For component files themselves, use component_self: <slug> instead.
scope โ one short sentence (โค120 chars) describing what the doc covers and what it does NOT. Read the doc's intro paragraph to source this.
related_adrs โ ADR identifiers (ADR-NNN) referenced in the doc body or footer.
component_self (component files only) โ the component's kebab-case slug, derived from filename.
component_type (component files only) โ extract from **Type:** field in the file. If absent, omit the field.
Step 3.3 โ Compose the 30-second summary blockquote. One paragraph (โค300 chars) that complements the machine-readable header. Read for a reader who has 30 seconds to decide whether to read the full doc.
Step 3.4 โ Insert via Edit.
Find the H1 line (^# ) in the file. The insertion goes immediately after the H1 and the blank line that should follow it.
# <existing H1>
<!-- EXPLORER_HEADER
key_concepts: <comma-separated>
technologies: <comma-separated>
components: <comma-separated> # OR `component_self:` + `component_type:` for component files
scope: <one sentence>
related_adrs: <ADR-NNN, ADR-NNN>
-->
> <30-second summary paragraph>
<existing body>
Use the Edit tool (not Write) so you preserve the rest of the file byte-for-byte.
Step 3.5 โ Validate.
bun [plugin_dir]/skills/architecture-explorer-headers/utils/header-cli.ts validate <abs_path>
Exit code 0 = header parses cleanly and includes all required fields. Exit code 1 = malformed; revert the Edit, log the error, continue with the next file.
Phase 4 โ Report
Print a summary table:
Architecture Explorer Headers โ Backfill Complete
Updated: N files
Skipped: M files (already had headers; pass --force to overwrite)
Failed: K files (malformed header โ Edit reverted)
Updated files:
โ
docs/01-system-overview.md
โ
docs/03-architecture-layers.md
โ
docs/components/payment-service.md
...
Failed files:
โ docs/components/legacy-thing.md โ header validation: missing 'scope' field
Suggest a follow-up: Want me to /schedule an agent to re-run this monthly? Stale headers degrade explorer accuracy over time.
Anti-Patterns
- Don't generate headers from imagination. Every field MUST come from the file's actual content. If a technology isn't named in the doc, don't list it. The explorer's classification is only as accurate as the header's truthfulness.
- Don't touch
ARCHITECTURE.md. It's a navigation index, exempt by design. The CLI's list subcommand excludes it.
- Don't run with
--force on a freshly-tuned project. Operators may have hand-curated headers; --force wipes that work. Default mode (skip-existing) is safe.
- Don't skip the validation step. A malformed header (missing field, broken comment fence) is worse than no header โ it actively misleads the parser. Always run
header-cli.ts validate and revert on failure.
- Don't widen the scope past
docs/ and docs/components/. Headers are not for ADRs (ADRs have their own structure that the explorer reads natively) or for archive/v*/ snapshots (those are immutable).
Permissions
This skill needs the same Read, Edit, and Bash([plugin_dir]/skills/architecture-explorer-headers/utils/header-cli.ts list/validate) permissions as architecture-docs. The pre-configured .claude/settings.json.example already covers them.
Skill Version: 1.2.0 (v3.19.1 โ drops --session mode + session editlog integration; the underlying PostToolUse hook had been silently broken since v3.14.1)
Specialization: Backfill EXPLORER_HEADER blocks into legacy architecture docs