@amsterdamdatalabs/enact-extensions 0.1.3 → 0.1.8

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 (105) hide show
  1. package/README.md +2 -2
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/install.d.ts.map +1 -1
  7. package/dist/install.js +15 -1
  8. package/dist/install.js.map +1 -1
  9. package/dist/internal/agents.d.ts +29 -0
  10. package/dist/internal/agents.d.ts.map +1 -0
  11. package/dist/internal/agents.js +83 -0
  12. package/dist/internal/agents.js.map +1 -0
  13. package/extensions/enact-context/hooks/hooks.json +17 -7
  14. package/extensions/enact-core/.agents/plugin.json +39 -0
  15. package/extensions/enact-core/hooks/hooks.json +14 -0
  16. package/extensions/enact-factory/.agents/plugin.json +9 -3
  17. package/extensions/enact-factory/agents/architect.toml +30 -0
  18. package/extensions/enact-factory/agents/code-reviewer.toml +29 -0
  19. package/extensions/enact-factory/agents/critic.toml +35 -0
  20. package/extensions/enact-factory/agents/executor.toml +23 -0
  21. package/extensions/enact-factory/agents/explore.toml +22 -0
  22. package/extensions/enact-factory/agents/planner.toml +23 -0
  23. package/extensions/enact-factory/agents/verifier.toml +29 -0
  24. package/extensions/enact-factory/skills/ai-slop-cleaner/SKILL.md +52 -0
  25. package/extensions/enact-factory/skills/azdo-ci-strategy/SKILL.md +262 -0
  26. package/extensions/enact-factory/skills/azdo-ci-strategy/references/build-failures.md +60 -0
  27. package/extensions/enact-factory/skills/azdo-ci-strategy/references/cli-reference.md +87 -0
  28. package/extensions/enact-factory/skills/azdo-ci-strategy/references/policies-and-pipelines.md +132 -0
  29. package/extensions/enact-factory/skills/azdo-ci-strategy/references/troubleshooting.md +53 -0
  30. package/extensions/enact-factory/skills/deep-interview/SKILL.md +72 -0
  31. package/extensions/enact-factory/skills/drive-loop/SKILL.md +259 -0
  32. package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +107 -0
  33. package/extensions/enact-factory/skills/hyperplan/SKILL.md +51 -0
  34. package/extensions/enact-factory/skills/looplan/SKILL.md +103 -0
  35. package/extensions/enact-factory/skills/plan/SKILL.md +71 -0
  36. package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +41 -0
  37. package/extensions/enact-factory/skills/research/SKILL.md +73 -0
  38. package/extensions/enact-factory/skills/review/SKILL.md +48 -0
  39. package/extensions/enact-factory/skills/security-research/SKILL.md +54 -0
  40. package/extensions/enact-factory/skills/tdd/SKILL.md +56 -0
  41. package/extensions/enact-factory/skills/trace/SKILL.md +37 -0
  42. package/extensions/enact-factory/skills/ultraqa/SKILL.md +79 -0
  43. package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +51 -0
  44. package/extensions/enact-factory/skills/workitem-triage/SKILL.md +15 -0
  45. package/extensions/enact-loop/.agents/plugin.json +46 -0
  46. package/extensions/enact-loop/.mcp.json +1 -0
  47. package/extensions/enact-loop/hooks/hooks.json +27 -0
  48. package/extensions/enact-loop/skills/enact-loop/SKILL.md +327 -0
  49. package/extensions/enact-operator/.agents/plugin.json +0 -1
  50. package/extensions/enact-operator/hooks/hooks.json +0 -55
  51. package/extensions/enact-wiki/skills/wiki/SKILL.md +42 -0
  52. package/extensions/plugin-dev/.agents/plugin.json +4 -6
  53. package/extensions/plugin-dev/agents/plugin-validator.md +1 -1
  54. package/extensions/plugin-dev/skills/agent-development/SKILL.md +7 -7
  55. package/extensions/plugin-dev/{commands/create-plugin.md → skills/create-plugin/SKILL.md} +44 -37
  56. package/extensions/plugin-dev/skills/plugin-dev-guide/SKILL.md +13 -14
  57. package/extensions/plugin-dev/skills/skill-development/SKILL.md +0 -2
  58. package/extensions/plugin-dev/{commands/start.md → skills/start/SKILL.md} +7 -6
  59. package/package.json +11 -6
  60. package/scripts/check-hooks.mjs +174 -0
  61. package/scripts/check-principles.mjs +101 -0
  62. package/scripts/enact-extensions.mjs +87 -3
  63. package/scripts/lib/run-validate.mjs +36 -2
  64. package/scripts/lib/ups-router.mjs +432 -0
  65. package/spec/enact.json +4 -0
  66. package/spec/enact.md +5 -2
  67. package/extensions/cmux/.agents/plugin.json +0 -37
  68. package/extensions/cmux/skills/cmux/SKILL.md +0 -82
  69. package/extensions/cmux/skills/cmux/agents/openai.yaml +0 -4
  70. package/extensions/cmux/skills/cmux/references/handles-and-identify.md +0 -35
  71. package/extensions/cmux/skills/cmux/references/panes-surfaces.md +0 -37
  72. package/extensions/cmux/skills/cmux/references/trigger-flash-and-health.md +0 -23
  73. package/extensions/cmux/skills/cmux/references/windows-workspaces.md +0 -31
  74. package/extensions/cmux/skills/cmux-vm-monitor/SKILL.md +0 -122
  75. package/extensions/cmux/skills/cmux-vm-monitor/agents/openai.yaml +0 -4
  76. package/extensions/cmux/skills/cmux-vm-monitor/references/cmux-commands.md +0 -66
  77. package/extensions/cmux/skills/cmux-vm-monitor/scripts/codex_vm_monitor.sh +0 -45
  78. package/extensions/cmux/skills/cmux-workspace/SKILL.md +0 -93
  79. package/extensions/devops/.agents/plugin.json +0 -36
  80. package/extensions/devops/skills/azure-devops-cli/SKILL.md +0 -431
  81. package/extensions/devops/skills/azure-devops-cli/agents/openai.yaml +0 -4
  82. package/extensions/devops/skills/ci-pipeline-strategy/SKILL.md +0 -217
  83. package/extensions/devops/skills/ci-pipeline-strategy/agents/openai.yaml +0 -4
  84. package/extensions/enact-factory/hooks/user-prompt-submit.mjs +0 -67
  85. package/extensions/enact-operator/commands/doctor.md +0 -39
  86. package/extensions/enact-operator/commands/setup.md +0 -51
  87. package/extensions/plugin-dev/.mcp.json +0 -3
  88. package/extensions/plugin-dev/commands/_archive/create-marketplace.md +0 -427
  89. package/extensions/plugin-dev/commands/_archive/plugin-dev-guide.md +0 -12
  90. package/extensions/plugin-dev/hooks/hooks.json +0 -3
  91. package/extensions/plugin-dev/skills/command-development/SKILL.md +0 -763
  92. package/extensions/plugin-dev/skills/command-development/examples/plugin-commands.md +0 -612
  93. package/extensions/plugin-dev/skills/command-development/examples/simple-commands.md +0 -527
  94. package/extensions/plugin-dev/skills/command-development/references/advanced-workflows.md +0 -762
  95. package/extensions/plugin-dev/skills/command-development/references/documentation-patterns.md +0 -769
  96. package/extensions/plugin-dev/skills/command-development/references/frontmatter-reference.md +0 -508
  97. package/extensions/plugin-dev/skills/command-development/references/interactive-commands.md +0 -966
  98. package/extensions/plugin-dev/skills/command-development/references/marketplace-considerations.md +0 -943
  99. package/extensions/plugin-dev/skills/command-development/references/plugin-features-reference.md +0 -637
  100. package/extensions/plugin-dev/skills/command-development/references/plugin-integration.md +0 -191
  101. package/extensions/plugin-dev/skills/command-development/references/skill-tool.md +0 -447
  102. package/extensions/plugin-dev/skills/command-development/references/testing-strategies.md +0 -723
  103. package/extensions/plugin-dev/skills/command-development/scripts/check-frontmatter.sh +0 -234
  104. package/extensions/plugin-dev/skills/command-development/scripts/validate-command.sh +0 -160
  105. /package/extensions/enact-operator/{skills/_variants.md → docs/skill-variants.md} +0 -0
@@ -0,0 +1,327 @@
1
+ ---
2
+ name: enact-loop
3
+ description: "Contract-runner loop engine. Drives declared stages (mechanical and judgment) to closure; the Stop boulder refuses to exit until every required stage passes and independent graders have signed off every judgment stage."
4
+ ---
5
+
6
+ # enact-loop
7
+
8
+ ## Purpose
9
+
10
+ `$enact-loop` is the persistence wrapper for bounded work. Given a contract (an ordered set of
11
+ stages), the loop drives each stage to closure and refuses to exit until every required stage has
12
+ passed. Mechanical stages self-report via command evidence. Judgment stages require an **independent
13
+ grader** running on a different model — the engine rejects any verdict self-reported by the
14
+ executor.
15
+
16
+ ## Use When
17
+
18
+ - work must not stop until all required stages pass
19
+ - judgment gates (architect-GO, code review, scope fidelity, QA) require independent sign-off
20
+ - a previous attempt left work in an incomplete or unverified state
21
+ - partial completion is unacceptable
22
+
23
+ ## Contract Schema
24
+
25
+ A **contract** is the declarative closure spec. Declare it inline or pass a YAML/JSON file.
26
+
27
+ ```
28
+ Contract { id, name, stages[] }
29
+
30
+ Stage {
31
+ id: string
32
+ name: string
33
+ type: 'mechanical' | 'judgment'
34
+ required: boolean
35
+ command?: string # mechanical stages only
36
+ grader?: GraderSpec # judgment stages only
37
+ passCriteria?: string
38
+ }
39
+
40
+ GraderSpec {
41
+ role: architect | critic | code-reviewer | verifier # required
42
+ model?: string # e.g. claude-opus-4-8 — always specify; omitting causes E_GRADER_MODEL_UNSET
43
+ harness?: paseo | subagent # default: paseo
44
+ rounds?: integer # max grading rounds before escalation (default: 3)
45
+ }
46
+ ```
47
+
48
+ ## Stage Types
49
+
50
+ **Mechanical** stages are automated: the executor runs the declared `command` and self-reports the
51
+ result via `loop_grade`. No independent grader is needed.
52
+
53
+ **Judgment** stages require an independent grader. The executor dispatches via
54
+ `loop_grader_dispatch`; the grader records its verdict via `loop_grader_verdict`. The engine
55
+ rejects any verdict where grader identity overlaps with executor identity.
56
+
57
+ ## The Independence Rule
58
+
59
+ Judgment stages must be graded by a **different model** than the executor (model-distinct, not
60
+ vendor/surface-distinct). The loop rejects a verdict whose grader model, session, or agent equals
61
+ the executor's. Graders are dispatched out-of-session via Paseo `--provider <model>` for
62
+ cross-surface grading; in-surface graders just need a supported model that differs from the
63
+ executor's.
64
+
65
+ The engine enforces independence at `recordStage` AND `completeLoop` (defense in depth). The Stop
66
+ boulder re-checks at session exit. Violations emit `grader-independence-missing` and block closure.
67
+
68
+ ## Loop Phases
69
+
70
+ ```
71
+ idle → running → verifying → completed (terminal)
72
+ ↘ blocked → running | verifying
73
+ ↘ paused → running | verifying (Stop ALLOWS exit while paused)
74
+ ↘ aborted (terminal)
75
+ ```
76
+
77
+ - **idle** — loop declared, not yet started
78
+ - **running** — executor actively working
79
+ - **verifying** — executor running closure checks
80
+ - **completed** — all required stages passed, loop closed
81
+ - **blocked** — waiting on an external dependency (`loop_block` / `loop_advance` to resume)
82
+ - **paused** — deliberate human suspension via `loop_pause`; the Stop boulder ALLOWS exit while
83
+ paused; SessionStart does NOT auto-resume a paused loop; stays paused until `loop_resume` is
84
+ explicitly called
85
+ - **aborted** — cancelled with a reason (terminal)
86
+
87
+ ## Routing Rules
88
+
89
+ - ambiguous goal → clarify first, then start the loop with the refined goal
90
+ - goal is clear → start immediately: `loop_start`
91
+ - blocked on external dependency → `loop_block`, resolve, then `loop_advance` back to `running`
92
+ - all required stages passed → write summary.md, then `loop_complete` (only from phase=verifying)
93
+
94
+ ## Workflow
95
+
96
+ 1. Read current state: `loop_status`
97
+ 2. If no active loop, start one:
98
+ ```
99
+ loop_start goal="<goal>" preset=<preset>|contract=<stages JSON>
100
+ ```
101
+ 3. Implement the work while in phase `running`.
102
+ 4. Advance to verification:
103
+ ```
104
+ loop_advance toPhase=verifying
105
+ ```
106
+ 5. For each **mechanical** stage: run the command, then `loop_grade`.
107
+ 6. For each **judgment** stage: call `loop_grader_dispatch`, await the grader's
108
+ `loop_grader_verdict`.
109
+ 7. When all required stages are `passed`: run `enact-loop summary write` (pipe body sections;
110
+ CLI stamps the fingerprint header), then `loop_complete`.
111
+ 8. If a stage fails: fix the root cause, do not fabricate evidence, re-run and re-grade.
112
+
113
+ ## Judgment Grading Protocol
114
+
115
+ **Step 1 — Dispatch a grader:**
116
+
117
+ ```
118
+ loop_grader_dispatch stageId=<id>
119
+ ```
120
+
121
+ - mints an unforgeable `continuationId` and `graderSessionId` via the runtime
122
+ - resolves the grader model from `stage.grader.model ?? loop.graderModel`
123
+ - requires the resolved model to differ from the executor's (`E_NO_DIVERSITY` otherwise)
124
+ - launches the grader agent (read-only, same cwd) via Paseo `--provider <graderModel>`
125
+ - returns the `continuationId` you must pass to step 2
126
+
127
+ **Step 2 — Record the grader's verdict** (grader calls this, not the executor):
128
+
129
+ ```
130
+ loop_grader_verdict stageId=<id> verdict=GO|NO-GO evidence="<findings>" continuationId=<id>
131
+ ```
132
+
133
+ The engine rejects the verdict if grader identity overlaps executor identity or the
134
+ `continuationId` was not minted by this runtime.
135
+
136
+ **NEVER self-report a judgment verdict.** The boulder blocks Stop and re-prompts with
137
+ `grader-independence-missing` if you do. If a grader returns NO-GO: fix the issue, stay in
138
+ `verifying`, and re-dispatch. Exceeding the round limit escalates with a blocker.
139
+
140
+ ## Access Control — `.enact/` is CLI-mediated
141
+
142
+ The agent **NEVER edits `.enact/` files directly**. All loop state mutation goes through the
143
+ `enact-loop` CLI or `loop_*` MCP tools — never raw file edits. Read state via:
144
+
145
+ ```bash
146
+ enact-loop status --json # current loop state as JSON
147
+ enact-loop summary show # display the current closure summary
148
+ ```
149
+
150
+ ## Closure
151
+
152
+ Closure requires a written, CURRENT `.enact/loop/state/summary.md`. When all required stages pass
153
+ (and every judgment stage has an independent verdict), the loop is closure-ready and enters the
154
+ `verifying` phase. The Stop boulder then **BLOCKS exit** and injects a generic markdown
155
+ **TEMPLATE** whose first line is a fingerprint header:
156
+
157
+ ```
158
+ <!-- enact-loop-summary loop:<id> fp:<phase|stagesPassed|historyLen> -->
159
+ ```
160
+
161
+ The template defines these sections (keep the whole file under 100 lines):
162
+
163
+ - **Summary** — one-line statement of what was accomplished or why blocking/aborting
164
+ - **Stage state** — list of stages with their final status
165
+ - **Blockers** — any unresolved blockers (if blocking/aborting)
166
+ - **Failures** — any stages that failed and the root cause
167
+ - **Evidence** — key commands run and observed outputs
168
+ - **Recommendations** — suggested next actions
169
+
170
+ To write the summary, **pipe the body sections to the CLI** — the CLI stamps the fingerprint
171
+ header automatically:
172
+
173
+ ```bash
174
+ enact-loop summary write <<'EOF'
175
+ ## Summary
176
+ <one-line summary>
177
+
178
+ ## Stage state
179
+ <stage list>
180
+
181
+ ## Blockers
182
+ <none|list>
183
+
184
+ ## Failures
185
+ <none|list>
186
+
187
+ ## Evidence
188
+ <commands + observed output>
189
+
190
+ ## Recommendations
191
+ <next actions>
192
+ EOF
193
+ ```
194
+
195
+ Once a current summary exists, the boulder allows exit. `completeLoop` / `blockLoop` / `abortLoop`
196
+ all **REQUIRE** a current summary and throw `E_CLOSURE_SUMMARY_MISSING` otherwise.
197
+
198
+ **This summary is the handoff**: enact-factory's brain reads it (together with the Paseo agent's
199
+ last message) to decide the next action after the loop completes.
200
+
201
+ **Closure sequence — required for ALL terminal transitions:**
202
+
203
+ 1. `enact-loop summary write` — pipe body sections; CLI stamps the fingerprint header
204
+ 2. Then call: `loop_complete summary="<one-line>"` OR `loop_block reason="<reason>"` OR
205
+ `loop_abort reason="<reason>"`
206
+
207
+ ## MCP Tools
208
+
209
+ | Tool | Purpose |
210
+ |------|---------|
211
+ | `loop_start` | Start loop with goal + contract/preset; stamps executorIdentity |
212
+ | `loop_status` | Read current loop state |
213
+ | `loop_advance` | Phase transition |
214
+ | `loop_grade` | Record a mechanical stage result (self-report; status + command evidence) |
215
+ | `loop_grader_dispatch` | Dispatch an independent grader for a judgment stage (returns continuationId) |
216
+ | `loop_grader_verdict` | Record an independent grader's GO/NO-GO (grader calls this, not executor) |
217
+ | `loop_pause` | Pause the loop for human review; Stop allows exit while paused |
218
+ | `loop_resume` | Resume a paused loop; restores the pre-pause phase |
219
+ | `loop_retarget` | Replace the active contract with a new one (same loop id) |
220
+ | `loop_block` | Mark blocked with a reason; requires current summary.md |
221
+ | `loop_complete` | Close the loop; requires current summary.md + phase=verifying + all stages passed |
222
+ | `loop_abort` | Abort with a reason; requires current summary.md |
223
+ | `loop_contract_parity` | Run contract-parity check |
224
+ | `loop_stop_evaluate` | Evaluate Stop boulder policy (called by the Stop hook) |
225
+
226
+ ## CLI
227
+
228
+ ```bash
229
+ # Read state (never read .enact/ files directly)
230
+ enact-loop status --json # current loop state as JSON
231
+ enact-loop summary show # display the current closure summary
232
+
233
+ # Write the closure summary (CLI stamps the fingerprint header; never write summary.md directly)
234
+ enact-loop summary write <<'EOF'
235
+ ## Summary
236
+ ...
237
+ EOF
238
+
239
+ # Validate a contract file before using it with loop_start
240
+ enact-loop contract validate <path/to/contract.json|yaml>
241
+
242
+ # Health check — verify MCP server reachability and runtime state; optionally validate
243
+ # that a contract's grader model differs from the executor model
244
+ enact-loop doctor --contract <file> [--executor-model M] [--grader-model M]
245
+ ```
246
+
247
+ `contract validate` exits 0 + `✓ valid contract: <id> (<n> stages)` on success; exits 1 with an
248
+ error list on failure. Common errors: missing required fields, judgment stage without `grader`,
249
+ mechanical stage with `grader` (use `command` instead), malformed YAML/JSON.
250
+
251
+ ## Boulder Behavior
252
+
253
+ The Stop hook calls `enact-loop hook stop` → `loop_stop_evaluate`. The boulder blocks exit if:
254
+ - any `required` stage is still `pending` or `failed`
255
+ - any judgment stage is `passed` but lacks a valid independent verdict (`grader-independence-missing`)
256
+ - a required grader is unavailable (`grader-unavailable`)
257
+ - the loop is closure-ready (all stages passed, independence satisfied) but `summary.md` is absent
258
+ or stale (`closure-summary-missing`) — resolve by running `enact-loop summary write`
259
+ - the loop phase is not terminal (exception: `paused` allows exit)
260
+
261
+ ## State
262
+
263
+ `.enact/` is CLI-mediated — never read or write `.enact/` files directly.
264
+
265
+ - Read state: `enact-loop status --json` (loop state) · `enact-loop summary show` (closure summary)
266
+ - Mutate state: `loop_*` MCP tools or `enact-loop` CLI subcommands only
267
+ - Closure summary at `.enact/loop/state/summary.md` is written via `enact-loop summary write`
268
+ (CLI stamps the fingerprint header); it is read by enact-factory's brain after loop completion.
269
+ - SessionStart hook auto-resumes an active (`running` or `verifying`) loop when the prompt
270
+ contains `$enact-loop`. Paused loops are NOT auto-resumed.
271
+
272
+ ## Example Contracts
273
+
274
+ ### Delivery Contract
275
+
276
+ ```yaml
277
+ id: delivery
278
+ name: Feature Delivery
279
+ stages:
280
+ - id: tests
281
+ name: Tests passing
282
+ type: mechanical
283
+ required: true
284
+ command: npm test
285
+ passCriteria: All tests exit 0
286
+
287
+ - id: lint
288
+ name: Lint clean
289
+ type: mechanical
290
+ required: true
291
+ command: npm run lint
292
+ passCriteria: No lint errors
293
+
294
+ - id: code-review
295
+ name: Code review
296
+ type: judgment
297
+ required: true
298
+ grader:
299
+ role: code-reviewer
300
+ model: claude-opus-4-8
301
+ harness: paseo
302
+ rounds: 3
303
+ passCriteria: Reviewer approves with no blocking issues
304
+ ```
305
+
306
+ ### Docs Workflow
307
+
308
+ ```yaml
309
+ id: docs-workflow
310
+ name: Documentation Update
311
+ stages:
312
+ - id: build
313
+ name: Docs build clean
314
+ type: mechanical
315
+ required: true
316
+ command: npm run docs:build
317
+
318
+ - id: scope-fidelity
319
+ name: Scope fidelity
320
+ type: judgment
321
+ required: true
322
+ grader:
323
+ role: critic
324
+ model: claude-opus-4-8
325
+ rounds: 2
326
+ passCriteria: Critic confirms docs match the stated scope
327
+ ```
@@ -21,7 +21,6 @@
21
21
  ],
22
22
  "skills": "./skills/",
23
23
  "agents": "./agents/",
24
- "commands": "./commands/",
25
24
  "mcpServers": "./.mcp.json",
26
25
  "apps": "./.app.json",
27
26
  "interface": {
@@ -20,22 +20,6 @@
20
20
  "command": "enact-operator hook user-prompt-submit"
21
21
  }
22
22
  ]
23
- },
24
- {
25
- "hooks": [
26
- {
27
- "type": "command",
28
- "command": "enact-operator hook doom-loop-counter reset"
29
- }
30
- ]
31
- },
32
- {
33
- "hooks": [
34
- {
35
- "type": "command",
36
- "command": "enact-operator hook doom-loop-search-guard reset"
37
- }
38
- ]
39
23
  }
40
24
  ],
41
25
  "PreToolUse": [
@@ -60,25 +44,6 @@
60
44
  "statusMessage": "Reviewing Operator tool output"
61
45
  }
62
46
  ]
63
- },
64
- {
65
- "hooks": [
66
- {
67
- "type": "command",
68
- "command": "enact-operator hook doom-loop-counter",
69
- "statusMessage": "Checking Operator tool-call budget"
70
- }
71
- ]
72
- },
73
- {
74
- "matcher": "Bash",
75
- "hooks": [
76
- {
77
- "type": "command",
78
- "command": "enact-operator hook doom-loop-search-guard",
79
- "statusMessage": "Checking Operator search deduplication"
80
- }
81
- ]
82
47
  }
83
48
  ],
84
49
  "Stop": [
@@ -92,16 +57,6 @@
92
57
  ]
93
58
  }
94
59
  ],
95
- "SessionIdle": [
96
- {
97
- "hooks": [
98
- {
99
- "type": "command",
100
- "command": "enact-operator hook session-idle"
101
- }
102
- ]
103
- }
104
- ],
105
60
  "PreCompact": [
106
61
  {
107
62
  "hooks": [
@@ -112,16 +67,6 @@
112
67
  ]
113
68
  }
114
69
  ],
115
- "SessionEnd": [
116
- {
117
- "hooks": [
118
- {
119
- "type": "command",
120
- "command": "enact-operator hook session-end"
121
- }
122
- ]
123
- }
124
- ],
125
70
  "SubagentStart": [
126
71
  {
127
72
  "hooks": [
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: wiki
3
+ description: "Wiki-style reference lookup and persistence via the enact-wiki provider. Use when durable project documentation or knowledge retrieval is needed."
4
+ ---
5
+
6
+ # Wiki
7
+
8
+ ## Purpose
9
+ Provides access to the project's durable wiki and knowledge base via the enact-wiki MCP server. This skill does not re-implement wiki storage or retrieval — it delegates all operations to enact-wiki tools. Research artifacts and analysis outputs can be persisted to the wiki via this skill.
10
+
11
+ ## Use When
12
+ - Looking up a documented decision, design, or reference
13
+ - Research findings should be persisted as a durable wiki entry
14
+ - Checking "does the wiki have anything on X?"
15
+
16
+ ## Workflow
17
+ 1. Identify the query or document to persist.
18
+ 2. Delegate the operation to the enact-wiki provider using its wiki MCP tools.
19
+ - For a lookup: invoke the enact-wiki wiki query tool with the search term.
20
+ - For a write: invoke the enact-wiki wiki add tool with the content and title.
21
+ - For a list: invoke the enact-wiki wiki list tool.
22
+ - For a read of a specific entry: invoke the enact-wiki wiki read tool with the entry identifier.
23
+ 3. If the operation returns content, present it directly without reformatting.
24
+ 4. If persisting a research artifact (e.g., from `.enact/loop/research/` or `.enact/factory/security/`), read the file first, then pass the content to the enact-wiki wiki add tool.
25
+ 5. Wiki state is owned by the enact-wiki provider — do not store wiki content locally as a substitute.
26
+
27
+ ## State Contract
28
+ - Reads: enact-wiki wiki store (via MCP tool calls), local research files when persisting
29
+ - Writes: enact-wiki wiki store (via MCP tool calls); no local wiki shadow files
30
+
31
+ ## Dependencies
32
+ - Requires enact-wiki MCP server to be connected. If it is not available, report that and stop.
33
+
34
+ ## Activation
35
+
36
+ Invoke with `$wiki` or `$enact-wiki:wiki`. The skill delegates all operations to enact-wiki MCP tools — no durable workflow state is started automatically.
37
+
38
+ ## Final Check
39
+ - The query returned a result or a clear "not found" from enact-wiki
40
+ - For writes, the enact-wiki tool confirmed the entry was saved
41
+ - No wiki content was stored locally as a substitute for the enact-wiki store
42
+ - If enact-wiki was unavailable, the caller was notified explicitly
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "plugin-dev",
3
3
  "version": "0.1.0",
4
- "description": "Toolkit for authoring Enact plugins: scaffold and validate agents, commands, hooks, skills, and MCP integrations from an ENACT-native source manifest with Claude Code, Codex, and Cursor projections.",
4
+ "description": "Toolkit for authoring Enact plugins: scaffold and validate agents, skills, hooks, and MCP integrations from an ENACT-native source manifest with Claude Code, Codex, and Cursor projections.",
5
5
  "author": {
6
6
  "name": "amsterdamdatalabs"
7
7
  },
@@ -20,9 +20,7 @@
20
20
  "cursor"
21
21
  ],
22
22
  "skills": "./skills/",
23
- "commands": "./commands/",
24
- "hooks": "./hooks/hooks.json",
25
- "mcpServers": "./.mcp.json",
23
+ "agents": "./agents/",
26
24
  "interface": {
27
25
  "displayName": "Plugin Dev",
28
26
  "shortDescription": "Scaffold and validate ENACT-native plugins with Claude Code, Codex, and Cursor projections.",
@@ -31,8 +29,8 @@
31
29
  "capabilities": [
32
30
  "multi-platform manifests",
33
31
  "plugin validation",
34
- "slash commands",
35
- "skills and hooks"
32
+ "skills authoring",
33
+ "agents authoring"
36
34
  ]
37
35
  },
38
36
  "factory": {
@@ -4,7 +4,7 @@ description: Use when the user asks to validate an Enact plugin, check plugin st
4
4
  model: inherit
5
5
  color: yellow
6
6
  tools: Read, Grep, Glob, Bash
7
- skills: plugin-structure, hook-development, command-development, skill-development, mcp-integration
7
+ skills: plugin-structure, hook-development, skill-development, mcp-integration
8
8
  ---
9
9
 
10
10
  You validate **Enact multi-platform plugins** (Claude, Codex, Cursor) using repo truth and `@enact/extensions` when available.
@@ -56,15 +56,15 @@ You are a code reviewer. Analyze code for issues and provide feedback.
56
56
 
57
57
  For complete format with all options, see [Agent File Structure](#agent-file-structure).
58
58
 
59
- ## When to Use Agents vs Commands vs Skills
59
+ ## When to Use Agents vs Skills
60
60
 
61
- | Component | Best For | Triggering | Example Use Case |
62
- | ------------ | --------------------------- | -------------------------------- | ----------------------------------- |
63
- | **Agents** | Autonomous multi-step tasks | Proactive or description-matched | Code review after implementation |
64
- | **Commands** | User-initiated actions | Explicit `/command` invocation | `/deploy production` |
65
- | **Skills** | Knowledge and guidance | Model-invoked based on context | Domain expertise for PDF processing |
61
+ | Component | Best For | Triggering | Example Use Case |
62
+ | --------------------- | --------------------------- | -------------------------------- | ----------------------------------- |
63
+ | **Agents** | Autonomous multi-step tasks | Proactive or description-matched | Code review after implementation |
64
+ | **Skills (passive)** | Knowledge and guidance | Model-invoked based on context | Domain expertise for PDF processing |
65
+ | **Skills (invocable)**| User-initiated actions | Explicit `/skill` invocation | `/deploy production` |
66
66
 
67
- > **See also:** For command development, load the `command-development` skill. For skill development, load the `skill-development` skill.
67
+ > **See also:** For skill development (passive and invocable), load the `skill-development` skill. There is no separate "command" component — invocable skills replace commands.
68
68
 
69
69
  ### Choose Agents When
70
70