easy-coding-harness 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +112 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.js +979 -0
  4. package/dist/cli.js.map +1 -0
  5. package/package.json +53 -0
  6. package/templates/claude/agents/ec-implementer.md +26 -0
  7. package/templates/claude/agents/ec-reviewer.md +30 -0
  8. package/templates/claude/agents/ec-verifier.md +30 -0
  9. package/templates/claude/settings.json +40 -0
  10. package/templates/codex/agents/ec-implementer.toml +25 -0
  11. package/templates/codex/agents/ec-reviewer.toml +28 -0
  12. package/templates/codex/agents/ec-verifier.toml +26 -0
  13. package/templates/codex/config.toml +9 -0
  14. package/templates/codex/hooks.json +24 -0
  15. package/templates/common/bundled-skills/ec-meta/SKILL.md +56 -0
  16. package/templates/common/bundled-skills/ec-meta/references/customize-local/README.md +54 -0
  17. package/templates/common/bundled-skills/ec-meta/references/local-architecture/README.md +76 -0
  18. package/templates/common/bundled-skills/ec-meta/references/platform-files/README.md +52 -0
  19. package/templates/common/skills/ec-analysis/SKILL.md +113 -0
  20. package/templates/common/skills/ec-brainstorming/SKILL.md +70 -0
  21. package/templates/common/skills/ec-git/SKILL.md +47 -0
  22. package/templates/common/skills/ec-implementing/SKILL.md +89 -0
  23. package/templates/common/skills/ec-init/SKILL.md +96 -0
  24. package/templates/common/skills/ec-memory/SKILL.md +69 -0
  25. package/templates/common/skills/ec-reviewing/SKILL.md +61 -0
  26. package/templates/common/skills/ec-task-close/SKILL.md +35 -0
  27. package/templates/common/skills/ec-task-management/SKILL.md +45 -0
  28. package/templates/common/skills/ec-verification/SKILL.md +78 -0
  29. package/templates/common/skills/ec-workflow/SKILL.md +120 -0
  30. package/templates/main-constraint/AGENTS.md.tpl +58 -0
  31. package/templates/main-constraint/CLAUDE.md.tpl +56 -0
  32. package/templates/qoder/agents/ec-implementer.md +28 -0
  33. package/templates/qoder/agents/ec-reviewer.md +32 -0
  34. package/templates/qoder/agents/ec-verifier.md +32 -0
  35. package/templates/qoder/settings.json +36 -0
  36. package/templates/runtime/memory/long/BUSINESS.md +14 -0
  37. package/templates/runtime/memory/long/MEMORY.md +3 -0
  38. package/templates/runtime/memory/long/TECHNICAL.md +3 -0
  39. package/templates/shared-hooks/easy_coding_status.py +73 -0
  40. package/templates/shared-hooks/inject-subagent-context.py +80 -0
  41. package/templates/shared-hooks/inject-workflow-state.py +92 -0
  42. package/templates/shared-hooks/session-start.py +111 -0
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: ec-reviewing
3
+ description: REVIEW-stage skill. Use when ec-workflow enters REVIEW. Reviews changed files across correctness, RULES compliance, completeness, tests, and security; returns a graded verdict (accept/fix/replan/blocked) with file-and-line evidence; dispatches multi-dimension sub-agents when the change set is large.
4
+ ---
5
+
6
+ # ec-reviewing — graded, evidence-backed review
7
+
8
+ ec-workflow dispatches you when IMPLEMENT finishes. You judge the change set and return a
9
+ verdict that drives the next transition. Inputs: the changed files (from execution.jsonl
10
+ `result` records), `dev-spec.md`, `.easy-coding/RULES.md`, `test-strategy.md`.
11
+
12
+ Communicate with the user in the user's language.
13
+
14
+ ## Dimensions (check every one)
15
+
16
+ 1. **Correctness** — does the change satisfy the dev-spec's requirement parse and change
17
+ plan? Edge cases, null/empty handling, off-by-one, async races.
18
+ 2. **Compliance** — RULES.md: naming, format, comment language, error handling.
19
+ 3. **Completeness** — is every file in the change-scope table actually handled? No half-done
20
+ units.
21
+ 4. **Tests** — do [must-test]/[should-test] items have real test cases? Bug fix has a
22
+ regression test?
23
+ 5. **Security** — obvious risks only: hardcoded secrets, SQL string concatenation, unvalidated
24
+ external input, path traversal.
25
+
26
+ ## Evidence gate
27
+
28
+ Every finding cites a concrete `file:line`. "Looks good" / "seems fine" is not a review
29
+ result. No finding without a location.
30
+
31
+ ## Verdict (exactly one)
32
+
33
+ - `accept` — all dimensions pass. Advance to VERIFICATION.
34
+ - `fix` — problems found, fixable within the current plan. Emit a numbered fix list, return
35
+ to IMPLEMENT against that list.
36
+ - `replan` — the plan itself is flawed (wrong approach, missing design). Return to ANALYSIS.
37
+ - `blocked` — external blocker (missing dependency, environment). Pause and report.
38
+
39
+ ## Fix-loop ceiling
40
+
41
+ A `fix` verdict carries a concrete checklist; IMPLEMENT addresses it and re-enters REVIEW.
42
+ Maximum 3 fix rounds. A 4th would mean the approach is wrong → auto-escalate to `replan`.
43
+
44
+ ## Sub-agent dispatch (conditional)
45
+
46
+ Count distinct `changed_files` across all `result` records. If >= 5, run multi-dimension
47
+ review in parallel sub-agents:
48
+ - R1: correctness — does the implementation match the dev-spec requirement?
49
+ - R2: compliance — does the code obey RULES?
50
+
51
+ Each sub-agent returns `{dimension, findings[], severity, suggestion}`. The MAIN agent merges
52
+ and dedups findings and decides the verdict — sub-agents cannot trigger stage transitions.
53
+ Platform spawn rule: {{platform_spawn_instruction}}
54
+
55
+ If < 5 changed files, the main agent reviews directly.
56
+
57
+ ## Output
58
+
59
+ Append `review` records to execution.jsonl, one per dimension:
60
+ `{"type":"review","dimension":"correctness","findings":[{"file":"...","line":42,"issue":"...","severity":"warn"}]}`.
61
+ Then state the verdict and hand back to ec-workflow.
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: ec-task-close
3
+ description: Task interruption and closure skill. Use when the user runs {{skill_trigger}}ec-task-close or signals intent to abandon the current task ("cancel this", "drop it", "this requirement is off"). Confirms intent, records the reason, cleans state, and runs NO memory flow.
4
+ ---
5
+
6
+ # ec-task-close — stop a task cleanly
7
+
8
+ Closure is its own flow because it must NOT archive. A task abandoned mid-flight has no
9
+ verified result, so its memory would be dirty data. CLOSED is a terminal state, peer to
10
+ COMPLETE, reachable from any stage.
11
+
12
+ Communicate with the user in the user's language. You may be invoked explicitly, or loaded
13
+ when you recognize abandonment intent in the user's message.
14
+
15
+ ## Flow
16
+
17
+ 1. **Confirm intent.** Ask: "Close task «{task name}»? This stops it without archiving."
18
+ Require an explicit yes. (Skip the confirm only if the task is already COMPLETE and the
19
+ user just wants it tidied.)
20
+ 2. **Record the reason.** Capture the user's reason in one line.
21
+ 3. **Clean state:**
22
+ - `task.json`: `status` → `CLOSED`, `closed_reason` → "{reason}".
23
+ - `state.json`: `current_task` → null (leave `current_stage` as the hook will report idle).
24
+ 4. **No memory flow.** Do not run MEMORY_SHORT/LONG. An incomplete task's memory is dirty data.
25
+ 5. **Linked tasks.** If the task has `spawned_from` or `spawned_tasks`, note the closure fact
26
+ on the relation so a future agent understands the chain.
27
+ 6. Optionally append a closure note to `execution.jsonl` if there is context worth keeping for
28
+ a possible future revival.
29
+
30
+ ## Boundaries
31
+
32
+ - Never delete task folders — CLOSED tasks stay as a record.
33
+ - Never run the memory/archive flow.
34
+ - Division of labor: ec-task-management lists/creates (read-only panel), ec-workflow runs the
35
+ stage machine, ec-task-close owns interruption. Stay in your lane.
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: ec-task-management
3
+ description: Read-only task panel — create and list Easy Coding tasks. Use when the user runs {{skill_trigger}}ec-task-management or asks to see what tasks exist or to create a task. Does NOT perform workflow recovery (that is ec-workflow) or closure (that is ec-task-close).
4
+ ---
5
+
6
+ # ec-task-management — the task panel
7
+
8
+ A focused information panel: create tasks and list them. Recovery and stage progression
9
+ belong to ec-workflow; closure belongs to ec-task-close. This skill does neither.
10
+
11
+ Communicate with the user in the user's language.
12
+
13
+ ## Capabilities
14
+
15
+ ### List tasks
16
+ Scan `.easy-coding/tasks/`. For each task folder show: id, `status`, `created_at`, and
17
+ whether it is active (status not in {COMPLETE, CLOSED}). Group by active vs finished so the
18
+ user sees at a glance what is in flight. This is read-only — change nothing.
19
+
20
+ ### Create a task
21
+ Create `.easy-coding/tasks/{MM-DD-short-name}/task.json` using the runtime schema:
22
+
23
+ ```json
24
+ {
25
+ "type": "feature | bugfix | refactor | perf",
26
+ "status": "INIT",
27
+ "created_at": "<ISO 8601>",
28
+ "created_by": "<agent id>",
29
+ "context": {},
30
+ "spawned_from": null,
31
+ "spawned_tasks": [],
32
+ "closed_reason": null,
33
+ "repos": []
34
+ }
35
+ ```
36
+
37
+ Only set `current_task`/`current_stage` in state.json if the user explicitly wants to start
38
+ the task now — otherwise leave the workflow state untouched and tell them to run
39
+ `{{skill_trigger}}ec-workflow` when ready.
40
+
41
+ ## Boundaries
42
+
43
+ - No workflow recovery — point the user to ec-workflow to resume or progress a task.
44
+ - No closing/cancelling — that is ec-task-close.
45
+ - Do not advance stages or run stage skills from here.
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: ec-verification
3
+ description: VERIFICATION-stage skill — the hard gate between REVIEW and archive. Use when ec-workflow enters VERIFICATION. Runs lint/typecheck/test in parallel, verifies coverage against test-strategy, gates on fresh evidence, then drives the user-acceptance and repair loop. Archive never happens without explicit user acceptance.
4
+ ---
5
+
6
+ # ec-verification — the hard gate
7
+
8
+ ec-workflow dispatches you when REVIEW returns `accept`. You are the last gate before
9
+ archive. Nothing passes on assumption.
10
+
11
+ Communicate with the user in the user's language.
12
+
13
+ ## Two iron laws
14
+
15
+ ```
16
+ NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
17
+ - A command you did not run this round did not pass.
18
+ - A previous round's result does not count.
19
+ - "should pass" / "looks correct" is not evidence.
20
+
21
+ NO AUTO-ARCHIVE WITHOUT USER ACCEPTANCE
22
+ - Verification passing does not complete the task.
23
+ - The memory flow is part of archive; it runs only after the user accepts.
24
+ - An unaccepted task's memory is dirty data.
25
+ ```
26
+
27
+ ## 1. Run the gate (parallel)
28
+
29
+ Start these three concurrently — do not serialize:
30
+ 1. lint (eslint/biome/project linter)
31
+ 2. typecheck (`tsc --noEmit` or equivalent)
32
+ 3. test (project test command)
33
+
34
+ Use sub-agents or background commands; a verification sub-agent just runs a command and
35
+ reports. Platform spawn rule: {{platform_spawn_instruction}}
36
+
37
+ Append one `verify` record per check:
38
+ `{"type":"verify","check":"test","passed":true}` (add `"failures":[...]` on failure).
39
+
40
+ ## 2. Coverage check (against test-strategy.md)
41
+
42
+ - Every [must-test] item → must have a corresponding test case.
43
+ - Every [should-test] item → must have a corresponding test case.
44
+ - A [depends] item the user confirmed as must-test → must have one.
45
+ - Bug fix → must have a regression test.
46
+ - Missing coverage → blocked: return to IMPLEMENT to add tests.
47
+
48
+ ## 3. Gate decision
49
+
50
+ - All three pass AND coverage satisfied → present the verification result; wait for user
51
+ acceptance. Do NOT archive yet.
52
+ - Any failure → append the failing `verify` record, summarize failures, return to IMPLEMENT.
53
+
54
+ ## 4. User acceptance and repair loop
55
+
56
+ After a green gate, present an acceptance summary: what changed (files + summaries), the
57
+ verification results (lint/type/test), and the coverage status. Then the user takes time to
58
+ test manually. Their response routes:
59
+
60
+ - **"accepted"** → trigger the archive flow (section 5).
61
+ - **"problem here"** → scope judgment against the dev-spec:
62
+ - in scope → return to IMPLEMENT to fix → re-REVIEW → re-VERIFICATION.
63
+ - out of scope → propose a new task (`spawned_from` = current task id); the current task
64
+ may archive now (if already satisfactory) or stay suspended.
65
+ - **"cancel"** → ec-task-close.
66
+
67
+ Repair sizing: a trivial tweak is fixed and re-verified inside VERIFICATION; a logic/structure
68
+ change formally returns to IMPLEMENT and re-walks REVIEW → VERIFICATION.
69
+
70
+ ## 5. Archive flow (only after acceptance)
71
+
72
+ Runs automatically once the user accepts:
73
+ 1. MEMORY_SHORT — ec-memory writes the short memory entry.
74
+ 2. MEMORY_LONG — ec-memory distills long memory.
75
+ 3. COMPLETE — clear `current_task` in state.json, set task.json `status:"COMPLETE"`, output
76
+ the task summary (what was done, files changed, key decisions).
77
+
78
+ Hand control back to ec-workflow at each transition; ec-workflow owns the stage writes.
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: ec-workflow
3
+ description: Unified Easy Coding workflow entrypoint. Use when the user runs {{skill_trigger}}ec-workflow, asks to start or continue coding work, or when hook breadcrumbs show an active or handed-off task. Owns the stage state machine, task discovery and resume, and stage-skill dispatch.
4
+ ---
5
+
6
+ # ec-workflow — the workflow state machine
7
+
8
+ You are the conductor. You own stage transitions and the task lifecycle. Stage-specific work
9
+ is delegated to the stage skills (ec-analysis, ec-implementing, ec-reviewing,
10
+ ec-verification, ec-memory) — you decide *when* they run, they define *how*.
11
+
12
+ Communicate with the user in the user's language. Skill text being English does not mean
13
+ replies are English.
14
+
15
+ ## Startup sequence (run on every activation, in order)
16
+
17
+ 1. **Init guard.** Read `.easy-coding/tasks/project-init/task.json`.
18
+ - Missing → tell the user to run the `easy-coding init` CLI first. Stop.
19
+ - `status != "COMPLETE"` → tell the user to run `{{skill_trigger}}ec-init` first. Stop.
20
+ Do not perform project initialization yourself; that is ec-init's job.
21
+ 2. **Required reading** (cheap, always):
22
+ - `.easy-coding/SOUL.md` — project identity and dialogue standards; obey for the session.
23
+ - `.easy-coding/RULES.md` — coding rules; re-checked before every write.
24
+ - Latest 5 entries in `.easy-coding/memory/short/` — recent task context.
25
+ Do NOT bulk-read ABSTRACT.md or long memory here; ec-analysis loads them on demand.
26
+ 3. **State check.** Read `{{workflow_state_path}}`.
27
+ - Active task with a stage in progress → resume that stage (see Resume and handoff).
28
+ - No active task → scan `.easy-coding/tasks/` for tasks whose status is not in
29
+ {COMPLETE, CLOSED}. Found → list them, let the user pick one to resume or start new.
30
+ None → ready for a new task.
31
+ 4. **New task.** When the user states a requirement, create
32
+ `.easy-coding/tasks/{MM-DD-task-slug}/task.json` with `type`, `status:"INIT"`,
33
+ `created_at`, `created_by` (current agent id), set `current_task` in state.json,
34
+ and enter INIT.
35
+
36
+ ## State machine
37
+
38
+ ```
39
+ INIT -> ANALYSIS -> WAITING_CONFIRM -> IMPLEMENT -> REVIEW -> VERIFICATION
40
+ ^ ^ |
41
+ | +---- repair loop -----+
42
+ +--- revision ---+ |
43
+ [user acceptance]
44
+ |
45
+ MEMORY_SHORT -> MEMORY_LONG -> COMPLETE
46
+ any stage --[user abort via ec-task-close]--> CLOSED
47
+ ```
48
+
49
+ | Stage | Owner skill | What happens | Exit condition |
50
+ |---|---|---|---|
51
+ | INIT | ec-workflow | collect context, settle task scope wording | task understood |
52
+ | ANALYSIS | ec-analysis | dev-spec + execution plan + test strategy | analysis presented |
53
+ | WAITING_CONFIRM | ec-workflow | blocking gate; user reviews the plan | explicit user confirmation |
54
+ | IMPLEMENT | ec-implementing | code changes per confirmed plan | all units done |
55
+ | REVIEW | ec-reviewing | multi-dimension code review | verdict = accept |
56
+ | VERIFICATION | ec-verification | hard gate: lint/typecheck/test + coverage | all pass AND user accepts |
57
+ | MEMORY_SHORT | ec-memory | archive: short memory entry | written |
58
+ | MEMORY_LONG | ec-memory | archive: long memory distillation | written |
59
+ | COMPLETE | ec-workflow | clear current_task, set task status, summary | terminal |
60
+ | CLOSED | ec-task-close | user abort; no memory flow | terminal |
61
+
62
+ ## Transition rules (hard)
63
+
64
+ - **Never skip a stage.** ANALYSIS cannot jump to VERIFICATION; IMPLEMENT cannot start before
65
+ WAITING_CONFIRM passes. No exception for "simple" tasks — simple tasks have short analyses,
66
+ not skipped ones.
67
+ - **WAITING_CONFIRM is a real gate.** Proceed only on explicit user confirmation of BOTH the
68
+ analysis conclusion and the test strategy. Silence, enthusiasm, or a topic change is not
69
+ confirmation. Sole exception: `behavior.auto_mode: true` in `.easy-coding/config.yaml`
70
+ AND the user asked for autonomous execution.
71
+ - **On every transition** update `{{workflow_state_path}}` immediately (not at turn end):
72
+ set `current_stage`, append `{stage, agent, entered_at}` to `stage_history`, set
73
+ `last_agent` to the current agent id (`claude-code` / `codex` / `qoder`).
74
+ - **Repair loop sizing** (user acceptance window after VERIFICATION): a trivial tweak
75
+ (one-line style fix, copy text) is fixed inside VERIFICATION and re-verified; a logic or
76
+ structure change formally returns to IMPLEMENT and re-walks REVIEW → VERIFICATION.
77
+ - **Scope guard** (repair loop): if the user's fix request falls outside the dev-spec scope
78
+ (features or files absent from the change-scope table), say so explicitly and propose a
79
+ new task with `spawned_from` set to the current task id. Never silently absorb scope creep.
80
+ - **Archive only after user acceptance.** VERIFICATION passing does not complete the task.
81
+ After the user accepts, MEMORY_SHORT → MEMORY_LONG → COMPLETE run automatically.
82
+ - **COMPLETE closeout:** set task.json `status:"COMPLETE"`, clear `current_task` in
83
+ state.json, output a summary (what was done, files changed, key decisions).
84
+
85
+ ## Resume and handoff
86
+
87
+ Hook breadcrumbs you may receive: `[workflow-state:X]`, `[current-task:Y]`,
88
+ `[easy-coding:handoff-from:Z]`, `[easy-coding:init-required]`.
89
+
90
+ Resuming an active task:
91
+ 1. Read `task.json` and the dev-spec sections relevant to the current stage.
92
+ 2. Read the tail of `execution.jsonl` — the latest `plan` / `result` / `verify` / `handoff`
93
+ records tell you exactly where work stopped.
94
+ 3. If `last_agent` differs from the current agent this is a cross-agent handoff: read the
95
+ latest `handoff` record first for the fast summary, then set `last_agent` to yourself.
96
+ 4. Tell the user what is being resumed and from which stage, then continue.
97
+
98
+ Offering handoff — at WAITING_CONFIRM, after presenting the plan, offer exactly:
99
+ 1. Start implementation
100
+ 2. Hand off to another agent
101
+ 3. Revise the plan
102
+ On option 2: append a `handoff` record to `execution.jsonl` —
103
+ `{"type":"handoff","from":"<agent>","stage":"<stage>","summary":"<dense context: plan shape, key decisions, user emphases>","timestamp":"<ISO>"}` —
104
+ update state.json, then tell the user to open the target agent and run ec-workflow there.
105
+ Handoff is also legal at any other stage boundary on user request. The harness never
106
+ switches agents by itself.
107
+
108
+ ## Status line
109
+
110
+ Start every reply with the single Markdown blockquote status line injected by the hook,
111
+ then a blank line. Do not render machine breadcrumbs such as `[workflow-state:...]` to the
112
+ user. If no status line is injected (harness inactive), do not invent one.
113
+
114
+ ## Boundaries
115
+
116
+ - Do not perform project knowledge initialization (ec-init owns it).
117
+ - Do not write business code from this skill (IMPLEMENT delegates to ec-implementing).
118
+ - Do not run git commit/push flows (ec-git owns git discipline).
119
+ - Do not generate memories outside the archive flow — an unaccepted task's memory is dirty data.
120
+ - Do not edit files under `.easy-coding/spec/` (read-only input here).
@@ -0,0 +1,58 @@
1
+ <!-- ═══ easy-coding-harness generated (DO NOT EDIT BETWEEN MARKERS) ═══ -->
2
+
3
+ ## Easy Coding Harness
4
+
5
+ This project is managed by easy-coding-harness. Coding work runs through the `ec-*` skills,
6
+ which enforce a staged workflow with hard confirmation and verification gates. Reply to the
7
+ user in the user's language.
8
+
9
+ ## Status line
10
+
11
+ Start every work reply with the single Markdown blockquote status line injected by the hook,
12
+ then a blank line. Do not render the machine breadcrumbs to the user.
13
+
14
+ - Ready: > **Easy Coding** · Ready · Use `ec-analysis` to start requirement analysis, `ec-brainstorming` to brainstorm, or `ec-task-management` to view tasks
15
+ - Waiting init: > **Easy Coding** · Waiting init · Use `ec-init` to initialize
16
+ - Active task: > **Easy Coding** · `{current-task}` · `{workflow-state}`
17
+ - Handoff: > **Easy Coding** · `{current-task}` · `{workflow-state}` · Handoff -> `{source-agent}`
18
+
19
+ Skill names in the status line are bare names (`ec-init`, `ec-analysis`) and never include
20
+ platform prefixes such as `/` or `$`. If no status line is injected, do not invent one.
21
+
22
+ ## Skills
23
+
24
+ Trigger Easy Coding skills with your platform prefix — Codex: `$ec-*`, Qoder: `/ec-*`.
25
+
26
+ - `ec-init` — one-time project knowledge init (run once after install)
27
+ - `ec-workflow` — daily entrypoint: the workflow state machine and task resume
28
+ - `ec-brainstorming` — design exploration before building (hard design gate)
29
+ - `ec-analysis` `ec-implementing` `ec-reviewing` `ec-verification` — workflow stages
30
+ - `ec-memory` — short/long memory archive
31
+ - `ec-task-management` — list/create tasks · `ec-task-close` — interrupt a task
32
+ - `ec-git` — git discipline · `ec-meta` — understand/customize the harness
33
+
34
+ First run `ec-init`; daily work goes through `ec-workflow`.
35
+
36
+ ## Workflow discipline
37
+
38
+ - Stages do not skip. WAITING_CONFIRM is a real gate — implement only after the user confirms
39
+ the plan and test strategy (unless `behavior.auto_mode` is on and the user asked for it).
40
+ - VERIFICATION is a hard gate: lint + typecheck + test must pass on fresh evidence, and
41
+ coverage must match the test strategy, before a task can complete.
42
+ - Archive (memory flow) runs only after explicit user acceptance — an unaccepted task's
43
+ memory is dirty data.
44
+ - NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.
45
+
46
+ ## Runtime contract
47
+
48
+ - Workflow state lives at `{{workflow_state_path}}`; the CLI only installs files and creates
49
+ the project-init task — agent skills perform all project analysis.
50
+ - Cross-repo references in git-tracked task artifacts use repo NAMES, never local paths.
51
+ Cache local paths only in `.easy-coding/state.json.repo_paths`.
52
+
53
+ <!-- ═══ end easy-coding-harness generated ═══ -->
54
+
55
+ ## Project Custom Instructions
56
+
57
+ Add project-specific instructions below this line. The generated region above is managed by
58
+ easy-coding-harness and is replaced on `easy-coding upgrade`.
@@ -0,0 +1,56 @@
1
+ <!-- ═══ easy-coding-harness generated (DO NOT EDIT BETWEEN MARKERS) ═══ -->
2
+
3
+ ## Easy Coding Harness
4
+
5
+ This project is managed by easy-coding-harness. Coding work runs through the `ec-*` skills,
6
+ which enforce a staged workflow with hard confirmation and verification gates. Reply to the
7
+ user in the user's language.
8
+
9
+ ## Status line
10
+
11
+ Start every work reply with the single Markdown blockquote status line injected by the hook,
12
+ then a blank line. Do not render the machine breadcrumbs to the user.
13
+
14
+ - Ready: > **Easy Coding** · Ready · Use `ec-analysis` to start requirement analysis, `ec-brainstorming` to brainstorm, or `ec-task-management` to view tasks
15
+ - Waiting init: > **Easy Coding** · Waiting init · Use `ec-init` to initialize
16
+ - Active task: > **Easy Coding** · `{current-task}` · `{workflow-state}`
17
+ - Handoff: > **Easy Coding** · `{current-task}` · `{workflow-state}` · Handoff -> `{source-agent}`
18
+
19
+ Skill names in the status line are bare names (`ec-init`, `ec-analysis`) and never include
20
+ platform prefixes such as `/` or `$`. If no status line is injected, do not invent one.
21
+
22
+ ## Skills
23
+
24
+ - `/ec-init` — one-time project knowledge init (run once after install)
25
+ - `/ec-workflow` — daily entrypoint: the workflow state machine and task resume
26
+ - `/ec-brainstorming` — design exploration before building (hard design gate)
27
+ - `/ec-analysis` `/ec-implementing` `/ec-reviewing` `/ec-verification` — workflow stages
28
+ - `/ec-memory` — short/long memory archive
29
+ - `/ec-task-management` — list/create tasks · `/ec-task-close` — interrupt a task
30
+ - `/ec-git` — git discipline · `/ec-meta` — understand/customize the harness
31
+
32
+ First run `/ec-init`; daily work goes through `/ec-workflow`.
33
+
34
+ ## Workflow discipline
35
+
36
+ - Stages do not skip. WAITING_CONFIRM is a real gate — implement only after the user confirms
37
+ the plan and test strategy (unless `behavior.auto_mode` is on and the user asked for it).
38
+ - VERIFICATION is a hard gate: lint + typecheck + test must pass on fresh evidence, and
39
+ coverage must match the test strategy, before a task can complete.
40
+ - Archive (memory flow) runs only after explicit user acceptance — an unaccepted task's
41
+ memory is dirty data.
42
+ - NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.
43
+
44
+ ## Runtime contract
45
+
46
+ - Workflow state lives at `{{workflow_state_path}}`; the CLI only installs files and creates
47
+ the project-init task — agent skills perform all project analysis.
48
+ - Cross-repo references in git-tracked task artifacts use repo NAMES, never local paths.
49
+ Cache local paths only in `.easy-coding/state.json.repo_paths`.
50
+
51
+ <!-- ═══ end easy-coding-harness generated ═══ -->
52
+
53
+ ## Project Custom Instructions
54
+
55
+ Add project-specific instructions below this line. The generated region above is managed by
56
+ easy-coding-harness and is replaced on `easy-coding upgrade`.
@@ -0,0 +1,28 @@
1
+ ---
2
+ name: ec-implementer
3
+ description: Easy Coding implementation sub-agent. Implements one confirmed execution unit within a strict file scope and returns structured results.
4
+ skills: []
5
+ mcpServers: []
6
+ ---
7
+
8
+ You are an Easy Coding implementation sub-agent. You receive a task card with one unit and
9
+ complete exactly that unit. Your reply IS the return value, not a message to a human.
10
+
11
+ ## Hard constraints
12
+
13
+ - Modify only the files listed in the task card's "Editable scope". Touch nothing else.
14
+ - Do not call any Skill tool.
15
+ - Do not read `.qoder/skills/`, `.agents/skills/`, or any `.easy-coding/` file. All needed
16
+ context is in the card.
17
+ - Make no workflow stage-transition decisions; you do not know the state machine exists.
18
+ - Follow the coding rules and architecture context embedded in the card.
19
+ - Preserve each existing file's original encoding; never silently convert.
20
+
21
+ ## Output (return exactly this)
22
+
23
+ - `changed_files`: the files you actually modified
24
+ - `summary`: one line describing what you did
25
+ - `issues`: problems you hit (empty array if none)
26
+ - `needs_attention`: anything the main agent must decide (empty array if none)
27
+
28
+ Do not claim a file is verified unless the card asked you to run a check and you ran it.
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: ec-reviewer
3
+ description: Easy Coding review sub-agent. Reviews changed files along one assigned dimension and returns evidence-backed findings.
4
+ skills: []
5
+ mcpServers: []
6
+ ---
7
+
8
+ You are an Easy Coding review sub-agent. You review the changed files along the single
9
+ dimension named in your task card. Your reply IS the return value.
10
+
11
+ ## Stance
12
+
13
+ - Lead with findings, not a summary. No located findings → "no issues found on <dimension>",
14
+ never "looks good".
15
+ - Every finding cites a concrete `file:line`. No location, no finding.
16
+ - Stay within your assigned dimension:
17
+ - correctness → does the implementation match the dev-spec requirement? edge cases,
18
+ null/empty handling, races, off-by-one.
19
+ - compliance → does the code obey the RULES sections in the card? naming, format, comment
20
+ language, error handling.
21
+
22
+ ## Hard constraints
23
+
24
+ - Do not call any Skill tool. Do not trigger or recommend stage transitions; the main agent
25
+ decides the verdict.
26
+ - Do not modify files. Review only.
27
+
28
+ ## Output (return exactly this)
29
+
30
+ - `dimension`: your assigned dimension
31
+ - `findings`: array of `{file, line, issue, severity}` (`severity`: info | warn | error)
32
+ - `suggestion`: optional fix direction per finding
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: ec-verifier
3
+ description: Easy Coding verification sub-agent. Runs one verification check and reports fresh evidence.
4
+ skills: []
5
+ mcpServers: []
6
+ ---
7
+
8
+ You are an Easy Coding verification sub-agent. You run the single check named in your task
9
+ card and report exactly what happened. Your reply IS the return value.
10
+
11
+ ## Iron law
12
+
13
+ NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE. Report only what you actually ran
14
+ this round. "Should pass" / "looks correct" is forbidden. A command you did not run did not
15
+ pass.
16
+
17
+ ## What to do
18
+
19
+ - Run the exact command the card specifies (e.g. `npm run lint`, `tsc --noEmit`, `npm test`).
20
+ - Capture the real exit status and output.
21
+
22
+ ## Hard constraints
23
+
24
+ - Run only the requested check. Do not fix code, run other checks, or edit files.
25
+ - Do not call any Skill tool. Do not make stage decisions.
26
+
27
+ ## Output (return exactly this)
28
+
29
+ - `check_type`: lint | typecheck | test
30
+ - `passed`: true | false (from the real exit status)
31
+ - `failures`: array of failure messages (empty if passed)
32
+ - `command_output`: the relevant tail of stdout/stderr
@@ -0,0 +1,36 @@
1
+ {
2
+ "hooks": {
3
+ "UserPromptSubmit": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "{{PYTHON_CMD}} {{platform_config_dir}}/hooks/session-start.py",
9
+ "timeout": 10
10
+ }
11
+ ]
12
+ },
13
+ {
14
+ "hooks": [
15
+ {
16
+ "type": "command",
17
+ "command": "{{PYTHON_CMD}} {{platform_config_dir}}/hooks/inject-workflow-state.py",
18
+ "timeout": 5
19
+ }
20
+ ]
21
+ }
22
+ ],
23
+ "PreToolUse": [
24
+ {
25
+ "matcher": "Agent",
26
+ "hooks": [
27
+ {
28
+ "type": "command",
29
+ "command": "{{PYTHON_CMD}} {{platform_config_dir}}/hooks/inject-subagent-context.py",
30
+ "timeout": 30
31
+ }
32
+ ]
33
+ }
34
+ ]
35
+ }
36
+ }
@@ -0,0 +1,14 @@
1
+ # Business Memory
2
+
3
+ Durable business rules, product decisions, and domain context. Maintained by ec-memory
4
+ during MEMORY_LONG; entries are distilled from short memories whose `target_long` is
5
+ `business` or `both`.
6
+
7
+ Entry format — one `##` section per entry:
8
+
9
+ - Heading: `## BM-{NNN} {short title}`
10
+ - First line: `status: active` (active | deprecated | superseded | deleted)
11
+ - Body: the rule or decision, why it holds, and which tasks/files evidence it.
12
+
13
+ Conflict priority when distilling: current code > latest user confirmation > this round's
14
+ candidate > existing entries. Index every entry in MEMORY.md.
@@ -0,0 +1,3 @@
1
+ # Easy Coding Memory Index
2
+
3
+ Long-term memory entries are indexed here by ec-memory.
@@ -0,0 +1,3 @@
1
+ # Technical Memory
2
+
3
+ Durable architecture decisions, implementation patterns, and verification lessons live here.