The harness-engineering mindset — Agent equals Model plus Harness — step 7 of 8
Write audit_harness(setup) that takes a dict describing a harness
and returns a dict with two fields:
score: int 0-100, higher means more completegaps: list of strings, the missing pieces by canonical name
The six canonical pieces (in this exact order):
["config", "tools", "infra", "orchestration", "hooks", "observability"]
Scoring rules:
- Each piece present adds 16 to the score (six pieces × 16 = 96).
- If ALL six pieces are present, return score 100 (rounding bonus).
- Missing pieces go into
gapsin the canonical order above.
Two harnesses run for you. Expected output:
Claude Code: {'score': 80, 'gaps': ['observability']}
Raw API: {'score': 0, 'gaps': ['config', 'tools', 'infra', 'orchestration', 'hooks', 'observability']}
⌘↵ runs the editor.read, then continue.
Write audit_harness(setup) that takes a dict describing a harness
and returns a dict with two fields:
score: int 0-100, higher means more completegaps: list of strings, the missing pieces by canonical name
The six canonical pieces (in this exact order):
["config", "tools", "infra", "orchestration", "hooks", "observability"]
Scoring rules:
- Each piece present adds 16 to the score (six pieces × 16 = 96).
- If ALL six pieces are present, return score 100 (rounding bonus).
- Missing pieces go into
gapsin the canonical order above.
Two harnesses run for you. Expected output:
Claude Code: {'score': 80, 'gaps': ['observability']}
Raw API: {'score': 0, 'gaps': ['config', 'tools', 'infra', 'orchestration', 'hooks', 'observability']}
this step needs the editor
on desktop today; in the app (coming soon). save your spot and we'll bring you back here when you're ready.