Harness Scope
What this does for you
- One thing at a time — only one feature
in_progress - Done means observable — verification steps a human can follow
- Stable task list — the agent follows priorities, not rewrites the plan
Agents over-scope and under-finish (Lesson 07). Feature lists are harness primitives (Lesson 08): machine-readable boundaries the agent cannot ignore.
Scope rules
- One active feature — only one with
status: "in_progress" - Explicit priority — lower number = more urgent
- Observable behavior —
user_visible_behaviordescribes what the user sees - Verification as contract — concrete steps, not vague claims
- Do not rewrite the list — adding features requires documented justification
Feature anatomy
{
"id": "auth-001",
"priority": 1,
"area": "auth",
"title": "Login with email and password",
"user_visible_behavior": "User enters credentials and reaches the dashboard.",
"status": "not_started",
"verification": [
"Open /login",
"Enter valid credentials",
"Verify redirect to /dashboard",
"Verify error message with invalid credentials"
],
"evidence": [],
"notes": ""
}
Feature selection
At session start:
1. Filter status != "passing"
2. Sort by priority ASC
3. Pick the first
4. Set its status to "in_progress"
5. Work ONLY on that feature
Handling blockers
If a feature is blocked:
{
"status": "blocked",
"notes": "Requires Stripe API key — see issue #42"
}
Do not jump to another feature without documenting the blocker. Do not mark partial work as passing.
Support fixes
Changes outside the active feature scope only if:
- They unblock the current feature (narrow fix)
- They repair a broken verification baseline
- They are documented in
notesorprogress.md
Create feature_list from scratch
- List user-visible features (not internal tasks)
- Order by dependency → priority
- Write verification[] as steps a human can follow
- Set global rules in the JSON
Update workflow
Finish work on feature X:
→ Run verification[] for X
→ If pass: status="passing", evidence=[...]
→ If fail: fix or status="blocked"
→ Never: status="passing" without evidence
Anti-patterns
- Three features
in_progressat once - Vague verification: "works correctly"
- Deleting incomplete features from the list
- Implementing priority 5 while priority 1 is still pending
Templates
Course reference
- Lesson 07: Why agents over-scope and under-finish
- Lesson 08: Why feature lists are harness primitives
- Project 04: Runtime feedback and scope control