# ericrisco/rsc-harness architecture

> Architecture diagram of the GitHub repository ericrisco/rsc-harness, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ericrisco/rsc-harness
- Repository: https://github.com/ericrisco/rsc-harness

## Overview

rsc-harness is a CLI product for selecting, installing, and maintaining project-specific AI-agent harnesses. Its principal workflow starts with user goals and project evidence, produces a reviewable plan, then materializes the accepted skills, agents, rules, and target-specific files and verifies the result. The README also documents lane-based work guidance and self-recommending growth. The graph preserves those capabilities; several implementation details are represented at their source-directory level because their source was not sampled.

Main entry points: [`scripts/install-apply.js`](https://github.com/ericrisco/rsc-harness/blob/main/scripts/install-apply.js) (Harness installer), [`scripts/lib/onboarding-apply.js`](https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/onboarding-apply.js) (Plan and consent), [`scripts/rsc.js`](https://github.com/ericrisco/rsc-harness/blob/main/scripts/rsc.js) (rsc CLI), [`scripts/lib/manifest-file.js`](https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/manifest-file.js) (Project declaration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_planning["Planning and catalog"]
  node_cli["rsc CLI<br/>[rsc.js]"]
  node_scan["Project scan<br/>[onboarding.js]"]
  node_catalog[("Skill catalog<br/>[manifest.js]")]
  node_consult["Catalog search<br/>[consult.js]"]
  node_recommend["Skill recommendations<br/>[recommend.js]"]
  node_onboard["Plan and consent"]
end

subgraph group_installation["Installation and verification"]
  node_installer["Harness installer<br/>[install-apply.js]"]
  node_targets["Target adapters<br/>[index.js]"]
  node_agentfiles["Agent definitions<br/>[agents.js]"]
  node_manifest["Project declaration<br/>[manifest-file.js]"]
  node_state[("Local install state<br/>[state.js]")]
  node_doctor["Install diagnostics<br/>[doctor.js]"]
end

subgraph group_harness["Harness capabilities"]
  node_workflows["Lane workflows<br/>[spec-gate.js]"]
  node_commands["Agent commands<br/>[commands.js]"]
end

subgraph group_maintenance["Memory and maintenance"]
  node_memory["Project memory<br/>[memory.js]"]
  node_sessionmemory[("Session memory")]
  node_reaper["Worktree cleanup"]
  node_sello["Turn lane gate<br/>[sello.mjs]"]
end

subgraph group_skilltools["Skill tools"]
  node_prompttools["Prompt extraction<br/>[extract_prompts.py]"]
  node_adapters["Runtime adapters<br/>[base.py]"]
end

node_user(("Project owner"))
node_project["Equipped project"]

node_user -->|"requests setup"| node_cli
node_cli -->|"starts onboarding"| node_onboard
node_onboard -->|"reads project"| node_scan
node_onboard -->|"loads skills"| node_catalog
node_onboard -->|"applies accepted plan"| node_installer
node_user -->|"accepts plan"| node_onboard
node_cli -->|"searches catalog"| node_consult
node_cli -->|"suggests skills"| node_recommend
node_recommend -.->|"uses skill data"| node_catalog
node_installer -->|"materializes targets"| node_targets
node_installer -->|"reconciles agents"| node_agentfiles
node_installer -->|"reads declaration"| node_manifest
node_installer -->|"reads install state"| node_state
node_targets -->|"reads declaration"| node_manifest
node_doctor -->|"checks state"| node_state
node_doctor -->|"checks declaration"| node_manifest
node_project -->|"uses installed lanes"| node_workflows
node_workflows -.->|"offers repeatable workflows"| node_commands
node_project -->|"uses project memory"| node_memory
node_project -.->|"captures sessions"| node_sessionmemory
node_project -->|"classifies each turn"| node_sello
node_project -->|"retires merged worktrees"| node_reaper
node_prompttools -->|"parses runtimes"| node_adapters

click node_cli "https://github.com/ericrisco/rsc-harness/blob/main/scripts/rsc.js"
click node_scan "https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/onboarding.js"
click node_catalog "https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/manifest.js"
click node_consult "https://github.com/ericrisco/rsc-harness/blob/main/scripts/consult.js"
click node_recommend "https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/recommend.js"
click node_onboard "https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/onboarding-apply.js"
click node_installer "https://github.com/ericrisco/rsc-harness/blob/main/scripts/install-apply.js"
click node_targets "https://github.com/ericrisco/rsc-harness/blob/main/targets/index.js"
click node_agentfiles "https://github.com/ericrisco/rsc-harness/blob/main/targets/agents.js"
click node_manifest "https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/manifest-file.js"
click node_state "https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/state.js"
click node_doctor "https://github.com/ericrisco/rsc-harness/blob/main/scripts/doctor.js"
click node_workflows "https://github.com/ericrisco/rsc-harness/blob/main/scripts/spec-gate.js"
click node_commands "https://github.com/ericrisco/rsc-harness/blob/main/targets/commands.js"
click node_memory "https://github.com/ericrisco/rsc-harness/blob/main/targets/memory.js"
click node_sessionmemory "https://github.com/ericrisco/rsc-harness/blob/main/targets/session-memory-core.mjs"
click node_reaper "https://github.com/ericrisco/rsc-harness/blob/main/targets/worktree-reaper.mjs"
click node_sello "https://github.com/ericrisco/rsc-harness/blob/main/targets/sello.mjs"
click node_prompttools "https://github.com/ericrisco/rsc-harness/blob/main/skills/roast-me/tools/extract_prompts.py"
click node_adapters "https://github.com/ericrisco/rsc-harness/blob/main/skills/roast-me/tools/adapters/base.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_scan,node_catalog,node_consult,node_recommend,node_onboard toneBlue
class node_installer,node_targets,node_agentfiles,node_manifest,node_state,node_doctor toneAmber
class node_workflows,node_commands toneMint
class node_memory,node_sessionmemory,node_reaper,node_sello toneRose
class node_prompttools,node_adapters,node_user,node_project toneIndigo
```

## Components

### Planning and catalog

- [rsc CLI](https://github.com/ericrisco/rsc-harness/blob/main/scripts/rsc.js): `scripts/rsc.js`
- [Project scan](https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/onboarding.js): `scripts/lib/onboarding.js`
- [Skill catalog](https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/manifest.js): `scripts/lib/manifest.js`
- [Catalog search](https://github.com/ericrisco/rsc-harness/blob/main/scripts/consult.js): `scripts/consult.js`
- [Skill recommendations](https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/recommend.js): `scripts/lib/recommend.js`
- [Plan and consent](https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/onboarding-apply.js): `scripts/lib/onboarding-apply.js`

### Installation and verification

- [Harness installer](https://github.com/ericrisco/rsc-harness/blob/main/scripts/install-apply.js): `scripts/install-apply.js`
- [Target adapters](https://github.com/ericrisco/rsc-harness/blob/main/targets/index.js): `targets/index.js`
- [Agent definitions](https://github.com/ericrisco/rsc-harness/blob/main/targets/agents.js): `targets/agents.js`
- [Project declaration](https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/manifest-file.js): `scripts/lib/manifest-file.js`
- [Local install state](https://github.com/ericrisco/rsc-harness/blob/main/scripts/lib/state.js): `scripts/lib/state.js`
- [Install diagnostics](https://github.com/ericrisco/rsc-harness/blob/main/scripts/doctor.js): `scripts/doctor.js`

### Harness capabilities

- [Lane workflows](https://github.com/ericrisco/rsc-harness/blob/main/scripts/spec-gate.js): `scripts/spec-gate.js`
- [Agent commands](https://github.com/ericrisco/rsc-harness/blob/main/targets/commands.js): `targets/commands.js`

### Memory and maintenance

- [Project memory](https://github.com/ericrisco/rsc-harness/blob/main/targets/memory.js): `targets/memory.js`
- [Session memory](https://github.com/ericrisco/rsc-harness/blob/main/targets/session-memory-core.mjs): `targets/session-memory-core.mjs`
- [Worktree cleanup](https://github.com/ericrisco/rsc-harness/blob/main/targets/worktree-reaper.mjs): `targets/worktree-reaper.mjs`
- [Turn lane gate](https://github.com/ericrisco/rsc-harness/blob/main/targets/sello.mjs): `targets/sello.mjs`

### Skill tools

- [Prompt extraction](https://github.com/ericrisco/rsc-harness/blob/main/skills/roast-me/tools/extract_prompts.py): `skills/roast-me/tools/extract_prompts.py`
- [Runtime adapters](https://github.com/ericrisco/rsc-harness/blob/main/skills/roast-me/tools/adapters/base.py): `skills/roast-me/tools/adapters/base.py`

### Other components

- **Project owner**
- **Equipped project**

## Connections

- Project owner → rsc CLI: requests setup
- rsc CLI → Plan and consent: starts onboarding (evidence: `scripts/rsc.js`)
- Plan and consent → Project scan: reads project (evidence: `scripts/lib/onboarding.js`)
- Plan and consent → Skill catalog: loads skills
- Plan and consent → Harness installer: applies accepted plan (evidence: `scripts/lib/onboarding-apply.js`)
- Project owner → Plan and consent: accepts plan
- rsc CLI → Catalog search: searches catalog (evidence: `scripts/rsc.js`)
- rsc CLI → Skill recommendations: suggests skills (evidence: `scripts/rsc.js`)
- Skill recommendations → Skill catalog: uses skill data
- Harness installer → Target adapters: materializes targets (evidence: `scripts/install-apply.js`)
- Harness installer → Agent definitions: reconciles agents (evidence: `scripts/install-apply.js`)
- Harness installer → Project declaration: reads declaration (evidence: `scripts/install-apply.js`)
- Harness installer → Local install state: reads install state (evidence: `scripts/install-apply.js`)
- Target adapters → Project declaration: reads declaration (evidence: `targets/index.js`)
- Install diagnostics → Local install state: checks state (evidence: `scripts/doctor.js`)
- Install diagnostics → Project declaration: checks declaration (evidence: `scripts/doctor.js`)
- Equipped project → Lane workflows: uses installed lanes
- Lane workflows → Agent commands: offers repeatable workflows
- Equipped project → Project memory: uses project memory
- Equipped project → Session memory: captures sessions
- Equipped project → Turn lane gate: classifies each turn
- Equipped project → Worktree cleanup: retires merged worktrees
- Prompt extraction → Runtime adapters: parses runtimes (evidence: `skills/roast-me/tools/extract_prompts.py`)
