Skip to content
Back to skills

Architecture

ASecurity

Architecture design and documentation. Produces 3-architecture.md with component diagrams, data flow, integration points, and architecture decisions. Reads existing tech-spec as input. Use when: designing system architecture, documenting component interactions, creating architecture docs, producing 3-architecture.md. Not for: tech spec writing (use tech-spec), code implementation (use feature-dev), architecture consulting only (use codex-architect).

  • 192 stars
  • 0 votes
  • 0 copies
  • 5 views
  • Added September 4, 2026
ai-agentsgoshellbashnodetestingcode-reviewgitapisecuritydocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 3 files and shows the line behind each finding

Scanned September 21, 2026

npx -y skills add sd0xdev/sd0x-harness --skill architecture --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Architecture?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Architecture
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sd0xdev-architecture-sd0x-harness/badge)](https://www.skillsdirectory.com/skills/sd0xdev-architecture-sd0x-harness)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: architecture
description: "Architecture design and documentation. Produces 3-architecture.md with component diagrams, data flow, integration points, and architecture decisions. Reads existing tech-spec as input. Use when: designing system architecture, documenting component interactions, creating architecture docs, producing 3-architecture.md. Not for: tech spec writing (use tech-spec), code implementation (use feature-dev), architecture consulting only (use codex-architect)."
allowed-tools: Read, Grep, Glob, Bash(git:*), Bash(node:*), Bash(bash:*), Write, Agent, Skill, AskUserQuestion
---

# Architecture Design Skill

## Trigger

- Keywords: architecture, architecture design, architecture doc, component diagram, 3-architecture, system design, document architecture

## When NOT to Use

- Tech spec writing (use `/tech-spec`)
- Code implementation (use `/feature-dev`)
- Architecture consulting only (use `/codex-architect`)
- Implementation roadmap (use `/deep-analyze`)

## Usage

```bash
/architecture                          # Auto-detect feature, create/update
/architecture <feature-keyword>        # Specify feature
/architecture --skip-debate            # Skip Phase 3 adversarial debate
```

## Workflow

```mermaid
sequenceDiagram
    participant U as User
    participant C as Claude
    participant E as Explore Agent
    participant X as Codex
    participant D as Architecture Designer
    participant B as /codex-brainstorm

    C->>C: Phase 0: Context Resolution
    par Phase 1: Research
        C->>E: Track A: Code pattern analysis (background)
        C->>C: Track B: Read tech-spec (inline)
    end
    E-->>C: Component list + dependencies
    C->>X: Track C: Architecture advice
    X-->>C: Independent recommendations
    C->>D: Phase 2: Architecture Design
    D-->>C: Component + flow + decisions
    C->>B: Phase 3: Verification (debate)
    B-->>C: Equilibrium conclusion
    C->>C: Phase 4: Write 3-architecture.md
    C->>U: Auto-trigger /codex-review-doc
```

## Phase 0: Context Resolution

Detect the target feature using the 5-level cascade.

See `@skills/create-request/references/feature-context-resolution.md` for the full algorithm.

```bash
# The wrapper, not the CLI directly: it owns the failure payload, so the full shape with
# `scan_error: true` arrives however the CLI fails — nonzero exit, signal, partial write, or a
# payload that is not the agreed shape. (Not when `node` itself is unavailable: nothing running
# under node survives that.) `|| echo '{}'` would produce a payload the gate cannot see as failure.
node scripts/resolve-feature.js
```

> **`scan_error` gate.** Gate on **`scan_error !== false`**, not on `scan_error === true`. When it
> is not exactly `false` the four source sets are **unknown, not empty** — the corpus could not be
> enumerated (unreadable directory, broken taxonomy, no repository), *or* the resolver never ran
> and a shell fallback supplied a payload with no such field at all. `{}` is the shape that made
> the stricter test useless: it has no `scan_error`, so `=== true` is false and the gate passes a
> payload that contains nothing. Do not proceed as though the feature has no authority documents —
> report and take the ⚠️ Need Human exit. A `key` may still be present, so a non-null `key` is not
> evidence the sets are complete.

| State | Mode |
|-------|------|
| `3-architecture.md` exists | Update (incremental) |
| `3-architecture.md` absent + a tech spec resolves | Create (tech-spec-informed) |
| `3-architecture.md` absent + no tech spec resolves | Create (code-only research) |
| Feature not resolved | Gate: Need Human |

"A tech spec resolves" means `design_records` holds an entry of `type: tech-spec` — the same
resolution Track B uses.

**`design_records` is an array, and more than one entry can be a tech spec**, so "the entry" needs a
rule rather than an assumption. `docs/features/auto-loop-evolution/` is the live case: a split spec
contributes `2-tech-spec/2-tech-spec.md` **and** its sub-document `2-tech-spec/1-phase-d-hook-hardening.md`,
both `type: tech-spec` design records. Select in this order, and stop at the first that answers:

**Filter first, then choose — every later rule reads the filtered list, never the whole set.**
Candidates are the `design_records` entries whose `type` is `tech-spec`; a requirements or
architecture record is not a candidate at any step, and a rule phrased over "entries" rather than
over candidates will select one. `docs/features/codex-review-spec/` and
`docs/features/harness-engineering-rebrand/` are the live proof: neither has a tech-spec design
record, each has exactly one canonical requirements record, and a canonicality test applied to the
unfiltered set picks it.

| # | Candidates (`design_records` where `type: tech-spec`) | Result |
|---|---------------------------------------------------|--------|
| 1 | none | **No tech spec resolves** — the ordinary code-only row of the table above. Not an exit: a feature that has not been specced is a normal state, and Track C is given `(none — do not read a spec)` |
| 2 | exactly one | that one |
| 3 | two or more, exactly one with `is_canonical: true` | that one — a split spec's main file keeps the canonical filename, which is what makes it the main file |
| 4 | two or more, and none or several canonical | **Gate: Need Human**, naming the candidates |

Rows 1 and 4 are different answers and must not be collapsed: "there is no spec" is a fact the skill
acts on, "there are two and I cannot tell which" is an ambiguity it must not resolve by picking. **The set decides, and the set also names the file.** `canonical_docs` is
role-blind: it selects the tech spec from `doc_inventory` whatever role that document resolves to,
so a spec that has declared itself `History record` or `Work record` is still non-null there while
being absent from `design_records`. Reading the alias as evidence of design authority is exactly the
confusion the source sets replace — and it is no better as a *path* selector: it is chosen across
the whole inventory by type and canonicality, so a historical canonical `2-tech-spec.md` beside a
design-record variant `2-tech-spec-v2.md` makes the set and the alias name different files. Take
both the decision and the path from the `design_records` entry's own `file`; do not rejoin through
the alias for either. Testing for the literal filename
`2-tech-spec.md` would read a split spec (`2-tech-spec/2-tech-spec.md`) or a variant
(`2-tech-spec-v2.md`) as "no tech spec" and silently drop to code-only mode.

### Scope Gate

For small features (tech-spec WBS has only 1 task, or no tech-spec and < 3 related files), suggest keeping architecture in tech-spec Section 3 instead of creating a separate document. Use AskUserQuestion to confirm.

## Phase 1: Architecture Research (parallel)

Launch research tracks. Tracks A and B run in parallel; Track C runs after both complete.

### Track A: Code Pattern Analysis (background)

```
Agent({
  description: "Analyze architecture patterns for <feature>",
  subagent_type: "Explore",
  run_in_background: true,
  prompt: "Analyze the codebase architecture for feature <key>:
    1. Trace execution paths of related modules
    2. Map component dependencies (imports, calls)
    3. Identify integration points with other features
    4. Read docs/architecture.md for global context
    Output: component list + dependency graph + integration points"
})
```

Fallback: `subagent_type: "general-purpose"` if Explore unavailable.

### Track B: Tech-spec Extraction (inline)

The tech spec is a **design record** (`design_records` in the resolver output), which is exactly
what this track wants: the intent, not the current behaviour. Track A supplies what the code
actually does, and where the two disagree the code wins and the disagreement is worth stating in
the architecture doc.

Resolve the file from `design_records` rather than assuming the name — a split spec lives at
`2-tech-spec/2-tech-spec.md` and a variant may be `2-tech-spec-v2.md`, both of which the resolver
classifies and a hard-coded filename misses. Use that entry's own `file` — do not rejoin through
`canonical_docs`. The alias is selected independently from the whole inventory by type and
canonicality (`scripts/lib/doc-classifier.js` § `pickCanonicalDocs`), so with a historical
canonical `2-tech-spec.md` beside a design-record variant `2-tech-spec-v2.md` the set returns the
variant and the alias returns the historical file. Filtering by role and then resolving the path
through the alias silently swaps one for the other.

If a tech spec is present:
- Read Section 3 (Technical Solution) — architecture diagram, data model, API design
- Read Section 4 (Risks) — constraints, dependencies
- Read Section 7 (Open Questions) — unresolved design decisions

If no tech-spec: skip (code-only mode).

### Track C: Codex Architecture Advice (after A+B)

Dispatch `references/codex-prompt.md` per `@skills/codex-code-review/references/codex-transport.md`
§ Start. The transport pins the sandbox and approval policy, so nothing is chosen here.

Provide feature context metadata only — never feed Claude's conclusions (per `@rules/codex-invocation.md`).

Save `threadId` for potential follow-up — a continuation goes through that reference's § Resume.

Graceful degradation is **per outcome**, subordinate to `@skills/codex-code-review/references/codex-transport.md`
§ Completion state machine — a single "Codex unavailable" rule flattened four different states into
one action:

| Outcome | Action |
|---------|--------|
| `setup-required` (adapter not located) or **exit 2** (configuration/usage) | Surface it to the operator and fix the setup. This is not a Codex failure and nothing degrades on it |
| **exit 1** (`codex_fail`) | Proceed without the third perspective and say so in the output — this advice is not a gate, so there is no fallback carrier to dispatch |
| Completion unknown (a launch with no consumed result) | Wait for it. A launch is not a verdict, and an unknown completion is not an absence |
| exit 0 | Integrate the advice as normal |

## Phase 2: Architecture Design

Dispatch architecture-designer agent with merged research results:

```
Agent({
  description: "Design architecture for <feature>",
  subagent_type: "architecture-designer",
  prompt: `Design the architecture for <feature>.

  ## Input Context
  ${TECH_SPEC_SUMMARY}
  ${CODE_ANALYSIS}
  ${CODEX_ADVICE}

  ## Required Output
  Follow the output template at @skills/architecture/references/template.md:
  1. Component diagram (Mermaid flowchart)
  2. Component responsibility table
  3. Data flow (Mermaid sequence diagram)
  4. Integration points with existing systems
  5. Architecture decisions (AD-N: context → options → decision → rationale)
  6. Deployment considerations (if applicable)

  ## Constraints
  - Follow @rules/docs-writing.md conventions
  - Reference actual code (file:line, not invented)
  - Mark assumptions explicitly
  - Redact credentials/secrets per @rules/security.md`
})
```

Fallback: if architecture-designer agent unavailable, use `solution-architect` agent.

## Phase 3: Verification (conditional)

Invoke `/codex-brainstorm` via Skill tool:

```
Skill("codex-brainstorm", `Evaluate the proposed architecture for <feature>.

Focus: scalability, maintainability, integration complexity, testability.

Constraints:
- Component diagram from Phase 2
- Tech-spec constraints from Phase 1
- Known risks`)
```

Must produce: threadId + equilibrium conclusion.

### Skip Conditions

| Condition | Action |
|-----------|--------|
| `--skip-debate` flag | Skip Phase 3 |
| Scope gate triggered (small feature) | Skip Phase 3 |
| Update mode (incremental change) | Skip Phase 3 |

Graceful degradation: `/codex-brainstorm` timeout → record timeout in Verification section, still output document.

## Phase 4: Output

Write `docs/features/<key>/3-architecture.md` using the output template.

See `references/template.md` for the full template.

### Cross-References

Auto-insert links:
- `> **Source**: [Tech Spec](./<design_records tech-spec entry .file>)` — that entry's own `file`,
  never `canonical_docs`, and not the
  literal `2-tech-spec.md`; a split spec lives one directory deeper and the hard-coded link is dead
- `> **Request**: [Request](./requests/YYYY-MM-DD-*.md)` (if active request found)

### Auto-Trigger

After Write completes, auto-trigger `/codex-review-doc` per `@rules/auto-loop.md`.

## Arguments

| Argument | Default | Description |
|----------|---------|-------------|
| `<feature-keyword>` | auto-detect | Target feature |
| `--skip-debate` | false | Skip Phase 3 adversarial debate |

## Verification

- [ ] Feature context resolved (create/update mode determined)
- [ ] Code research completed; the resolved tech spec read when one exists (§ Phase 0 says what
      "resolved" means, and a feature with no spec has none to read)
- [ ] Codex advice integrated — **or** its absence recorded as the `exit 1` degradation of § Phase 1
      Track C, which is this skill's only path to a design without it. There is no flag that skips
      Track C: `--skip-debate` skips Phase 3, and the no-tech-spec mode still dispatches Track C with
      `(none — do not read a spec)`. Integrated or recorded, never neither — an unrecorded absence is
      indistinguishable from a dispatch nobody made
- [ ] Architecture design includes all required sections
- [ ] Mermaid diagrams are valid
- [ ] Architecture decisions use AD-N format with rationale
- [ ] Cross-references to tech-spec and request docs included
- [ ] `/codex-review-doc` passed (auto-triggered)
- [ ] No `git add/commit/push` executed

## References

- `references/template.md` — Output template for `3-architecture.md`
- `references/codex-prompt.md` — Codex independent architecture research prompt
- `@skills/create-request/references/feature-context-resolution.md` — 5-level feature detection

## Examples

```
Input: /architecture
Action: Auto-detect feature → research (code + spec + Codex) → design → debate → write 3-architecture.md → /codex-review-doc

Input: /architecture statusline-config
Action: Resolve "statusline-config" → read tech-spec → research code → design → write → review

Input: /architecture --skip-debate
Action: Auto-detect → research → design → skip debate → write → review
```

Files in this skill

  • SKILL.md12.8 KB
  • references/codex-prompt.md3.3 KB
  • references/template.md3.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.