@amsterdamdatalabs/enact-extensions 0.1.12 → 0.1.25
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.
- package/README.md +11 -12
- package/dist/create/enact.js +1 -1
- package/dist/create/enact.js.map +1 -1
- package/dist/create/index.d.ts +4 -3
- package/dist/create/index.d.ts.map +1 -1
- package/dist/create/index.js +9 -2
- package/dist/create/index.js.map +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +5 -0
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +10 -3
- package/dist/install.js.map +1 -1
- package/dist/internal/agents.d.ts +6 -1
- package/dist/internal/agents.d.ts.map +1 -1
- package/dist/internal/agents.js +8 -4
- package/dist/internal/agents.js.map +1 -1
- package/dist/internal/claude.d.ts +24 -0
- package/dist/internal/claude.d.ts.map +1 -1
- package/dist/internal/claude.js +99 -0
- package/dist/internal/claude.js.map +1 -1
- package/dist/internal/platform.d.ts +3 -1
- package/dist/internal/platform.d.ts.map +1 -1
- package/dist/internal/platform.js +7 -1
- package/dist/internal/platform.js.map +1 -1
- package/dist/internal/types.d.ts +2 -1
- package/dist/internal/types.d.ts.map +1 -1
- package/dist/principles.d.ts +28 -0
- package/dist/principles.d.ts.map +1 -0
- package/dist/principles.js +159 -0
- package/dist/principles.js.map +1 -0
- package/extensions/dev-state/.agents/plugin.json +2 -1
- package/extensions/enact-context/.agents/plugin.json +2 -1
- package/extensions/enact-context/hooks/hooks.json +0 -10
- package/extensions/enact-context/skills/enact-context/SKILL.md +14 -12
- package/extensions/enact-context/skills/enact-context/scripts/install.sh +7 -7
- package/extensions/enact-core/.agents/plugin.json +2 -1
- package/extensions/enact-core/OPERATING-PRINCIPLES.md +7 -0
- package/extensions/enact-core/hooks/hooks.json +12 -0
- package/extensions/enact-evolve/.agents/plugin.json +47 -0
- package/extensions/enact-evolve/agents/evolve-session-analyst.toml +37 -0
- package/extensions/enact-evolve/skills/session-analysis/SKILL.md +98 -0
- package/extensions/enact-evolve/skills/session-analysis/scripts/run-evolve-analysis.sh +343 -0
- package/extensions/enact-factory/.agents/plugin.json +2 -2
- package/extensions/enact-factory/agents/architect.toml +9 -5
- package/extensions/enact-factory/agents/code-reviewer.toml +9 -5
- package/extensions/enact-factory/agents/critic.toml +9 -5
- package/extensions/enact-factory/agents/executor.toml +4 -1
- package/extensions/enact-factory/agents/explore.toml +4 -1
- package/extensions/enact-factory/agents/planner.toml +4 -1
- package/extensions/enact-factory/agents/verifier.toml +9 -5
- package/extensions/enact-factory/skills/advisor/SKILL.md +82 -0
- package/extensions/enact-factory/skills/ai-slop-cleaner/SKILL.md +6 -1
- package/extensions/enact-factory/skills/autonomous-runner/SKILL.md +347 -0
- package/extensions/enact-factory/skills/azdo-ci-strategy/SKILL.md +42 -15
- package/extensions/enact-factory/skills/committee/SKILL.md +80 -0
- package/extensions/enact-factory/skills/deep-interview/SKILL.md +9 -13
- package/extensions/enact-factory/skills/drive-loop/SKILL.md +161 -31
- package/extensions/enact-factory/skills/drive-loop/references/contract-schema.md +26 -6
- package/extensions/enact-factory/skills/handoff/SKILL.md +72 -0
- package/extensions/enact-factory/skills/hyperplan/SKILL.md +11 -3
- package/extensions/enact-factory/skills/looplan/SKILL.md +34 -17
- package/extensions/enact-factory/skills/plan/SKILL.md +40 -8
- package/extensions/enact-factory/skills/remove-deadcode/SKILL.md +6 -1
- package/extensions/enact-factory/skills/research/SKILL.md +14 -4
- package/extensions/enact-factory/skills/review/SKILL.md +21 -2
- package/extensions/enact-factory/skills/security-research/SKILL.md +5 -2
- package/extensions/enact-factory/skills/tdd/SKILL.md +7 -1
- package/extensions/enact-factory/skills/testing-strategy/SKILL.md +5 -0
- package/extensions/enact-factory/skills/trace/SKILL.md +5 -0
- package/extensions/enact-factory/skills/ultraqa/SKILL.md +21 -15
- package/extensions/enact-factory/skills/work-with-workitem/SKILL.md +5 -0
- package/extensions/enact-factory/skills/workitem-triage/SKILL.md +5 -0
- package/extensions/enact-loop/.agents/plugin.json +5 -4
- package/extensions/enact-loop/scripts/validate.mjs +123 -0
- package/extensions/enact-loop/skills/enact-loop/SKILL.md +189 -30
- package/extensions/enact-wiki/.agents/plugin.json +2 -1
- package/extensions/net-revenue-management/.agents/plugin.json +2 -1
- package/extensions/plugin-dev/.agents/plugin.json +2 -1
- package/extensions/plugin-dev/skills/start/SKILL.md +3 -3
- package/package.json +1 -1
- package/scripts/check-hooks.mjs +5 -5
- package/scripts/check-principles.mjs +19 -4
- package/scripts/enact-extensions.mjs +237 -90
- package/scripts/lib/hooks.mjs +61 -217
- package/scripts/lib/migrate-artifacts.mjs +144 -0
- package/scripts/lib/principles.mjs +109 -0
- package/scripts/lib/provision-mcp.mjs +1 -1
- package/scripts/lib/run-install.mjs +72 -2
- package/scripts/lib/run-prune.mjs +23 -2
- package/scripts/lib/run-sync.mjs +4 -1
- package/scripts/postinstall.mjs +6 -6
- package/scripts/setup-enact-context.sh +20 -15
- package/scripts/version-bump.sh +22 -1
- package/spec/codex.json +5 -0
- package/spec/enact.json +3 -3
- package/spec/enact.md +1 -4
- package/spec/index.json +1 -1
- package/extensions/enact-factory/hooks/hooks.json +0 -14
- package/extensions/enact-operator/.agents/plugin.json +0 -56
- package/extensions/enact-operator/.app.json +0 -3
- package/extensions/enact-operator/.mcp.json +0 -10
- package/extensions/enact-operator/_taxonomy.md +0 -86
- package/extensions/enact-operator/agents/README.md +0 -5
- package/extensions/enact-operator/agents/architect.toml +0 -25
- package/extensions/enact-operator/agents/code-reviewer.toml +0 -24
- package/extensions/enact-operator/agents/critic.toml +0 -30
- package/extensions/enact-operator/agents/executor.toml +0 -24
- package/extensions/enact-operator/agents/explore.toml +0 -23
- package/extensions/enact-operator/agents/planner.toml +0 -24
- package/extensions/enact-operator/agents/verifier.toml +0 -24
- package/extensions/enact-operator/docs/skill-variants.md +0 -44
- package/extensions/enact-operator/hooks/hooks.json +0 -91
- package/extensions/enact-operator/skills/ai-slop-cleaner/SKILL.md +0 -50
- package/extensions/enact-operator/skills/analyze/SKILL.md +0 -91
- package/extensions/enact-operator/skills/ask/SKILL.md +0 -47
- package/extensions/enact-operator/skills/autopilot/SKILL.md +0 -170
- package/extensions/enact-operator/skills/autoresearch-goal/SKILL.md +0 -79
- package/extensions/enact-operator/skills/cancel/SKILL.md +0 -99
- package/extensions/enact-operator/skills/configure-notifications/SKILL.md +0 -77
- package/extensions/enact-operator/skills/deep-interview/SKILL.md +0 -80
- package/extensions/enact-operator/skills/doctor/SKILL.md +0 -48
- package/extensions/enact-operator/skills/hud/SKILL.md +0 -49
- package/extensions/enact-operator/skills/hyperplan/SKILL.md +0 -47
- package/extensions/enact-operator/skills/plan/SKILL.md +0 -78
- package/extensions/enact-operator/skills/ralph/SKILL.md +0 -201
- package/extensions/enact-operator/skills/ralph/gemini.md +0 -18
- package/extensions/enact-operator/skills/ralplan/SKILL.md +0 -151
- package/extensions/enact-operator/skills/remove-deadcode/SKILL.md +0 -45
- package/extensions/enact-operator/skills/research/SKILL.md +0 -74
- package/extensions/enact-operator/skills/review/SKILL.md +0 -58
- package/extensions/enact-operator/skills/security-research/SKILL.md +0 -54
- package/extensions/enact-operator/skills/setup/SKILL.md +0 -91
- package/extensions/enact-operator/skills/setup/scripts/install.sh +0 -50
- package/extensions/enact-operator/skills/skill/SKILL.md +0 -82
- package/extensions/enact-operator/skills/tdd/SKILL.md +0 -59
- package/extensions/enact-operator/skills/team/SKILL.md +0 -199
- package/extensions/enact-operator/skills/trace/SKILL.md +0 -41
- package/extensions/enact-operator/skills/ultragoal/SKILL.md +0 -99
- package/extensions/enact-operator/skills/ultraqa/SKILL.md +0 -113
- package/extensions/enact-operator/skills/ultrawork/SKILL.md +0 -145
- package/extensions/enact-operator/skills/ultrawork/planner.md +0 -28
- package/extensions/enact-operator/skills/wiki/SKILL.md +0 -41
- package/extensions/enact-operator/skills/work-with-workitem/SKILL.md +0 -51
- /package/extensions/{enact-operator → enact-evolve}/assets/icon.png +0 -0
- /package/extensions/{enact-operator → enact-evolve}/assets/logo.png +0 -0
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: enact-operator-setup
|
|
3
|
-
description: "Initialize the Enact Operator control-plane: install the enact-operator CLI if needed, then install hooks and agents and verify the runtime is healthy."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Enact Operator Setup
|
|
7
|
-
|
|
8
|
-
## Runtime Prerequisite
|
|
9
|
-
|
|
10
|
-
Before running the workflow, make sure the `enact-operator` CLI exists:
|
|
11
|
-
|
|
12
|
-
```bash
|
|
13
|
-
which enact-operator || bash scripts/install.sh
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## Purpose
|
|
17
|
-
Bootstraps a project to use Enact Operator by laying out the `.enact/operator/` directory tree and installing Operator hooks and agents. Plugin installation and host registry ownership belongs to enact-extensions.
|
|
18
|
-
|
|
19
|
-
## Use When
|
|
20
|
-
- First-time installation of enact-operator in a project
|
|
21
|
-
- Reinstalling after a version bump or broken hook state
|
|
22
|
-
- Validating that an existing installation is coherent before running team or staged review workflows
|
|
23
|
-
|
|
24
|
-
## Execution Policy
|
|
25
|
-
|
|
26
|
-
- start from the repo and `.enact/operator/` truth, not chat memory
|
|
27
|
-
- if `operator_*` tools are not visible yet, load/search the Enact Operator MCP namespace before running setup/readiness checks
|
|
28
|
-
- drive setup through MCP tools when running inside Codex; CLI commands are the equivalent operator surface
|
|
29
|
-
- keep state current as you go — confirm each step before advancing
|
|
30
|
-
|
|
31
|
-
## Workflow
|
|
32
|
-
1. Run the top-level installer:
|
|
33
|
-
- MCP: `operator_setup`
|
|
34
|
-
- CLI: `enact-operator setup`
|
|
35
|
-
2. Install Claude Code hooks (pre/post tool hooks that integrate with the operator runtime):
|
|
36
|
-
- No MCP tool for hooks install — use CLI: `enact-operator hooks install`
|
|
37
|
-
3. Check hook registration status:
|
|
38
|
-
- MCP: `operator_hooks_status`
|
|
39
|
-
- CLI: `enact-operator hooks status`
|
|
40
|
-
4. Install the Core 7 Codex agent roster into the project:
|
|
41
|
-
- MCP: `operator_agents_pack_install`
|
|
42
|
-
- CLI: `enact-operator agents install-pack`
|
|
43
|
-
5. Validate the plugin bundle source is coherent (skills, hooks, agents all present):
|
|
44
|
-
- MCP: `operator_plugin_validate`
|
|
45
|
-
- CLI: `enact-operator plugins validate`
|
|
46
|
-
6. Check the install registry for operator-owned hooks and agents:
|
|
47
|
-
- MCP: `operator_install_registry`
|
|
48
|
-
- CLI: (no direct equivalent — use `operator_install_registry`)
|
|
49
|
-
7. Run the doctor to confirm runtime health:
|
|
50
|
-
- MCP: `operator_doctor`
|
|
51
|
-
- CLI: `enact-operator doctor`
|
|
52
|
-
8. Check replacement-readiness to confirm Operator is ready to take over provider roles:
|
|
53
|
-
- MCP: `operator_audit_replacement_readiness`
|
|
54
|
-
- CLI: `enact-operator audit replacement-readiness`
|
|
55
|
-
|
|
56
|
-
## State Contract
|
|
57
|
-
- Reads: project root, existing `.claude/settings.json`, existing hook files
|
|
58
|
-
- Writes: `.enact/operator/` directory tree (`cache`, `jobs`, `logs`, `memory`, `plans`, `reports`, `research`, `sessions`, `state`, `team`, `ultragoal`, `metrics.json`), hook entries in `.claude/settings.json`
|
|
59
|
-
|
|
60
|
-
## MCP Tools
|
|
61
|
-
|
|
62
|
-
- `operator_setup` — run the top-level installer
|
|
63
|
-
- `operator_hooks_status` — verify hook registration state
|
|
64
|
-
- `operator_agents_install` — install individual agent templates
|
|
65
|
-
- `operator_agents_pack_install` — install the full Core 7 Codex agent roster
|
|
66
|
-
- `operator_plugin_validate` — check plugin bundle source coherence
|
|
67
|
-
- `operator_install_registry` — read the install registry
|
|
68
|
-
- `operator_doctor` — confirm runtime health
|
|
69
|
-
- `operator_audit_replacement_readiness` — confirm Operator is ready to take over provider roles
|
|
70
|
-
|
|
71
|
-
Note: hooks install has no MCP equivalent — use `enact-operator hooks install` via CLI.
|
|
72
|
-
|
|
73
|
-
## Commands
|
|
74
|
-
```
|
|
75
|
-
enact-operator setup
|
|
76
|
-
enact-operator hooks install
|
|
77
|
-
enact-operator hooks status
|
|
78
|
-
enact-operator agents install-pack
|
|
79
|
-
enact-operator plugins validate
|
|
80
|
-
enact-operator doctor
|
|
81
|
-
enact-operator audit replacement-readiness
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Activation
|
|
85
|
-
|
|
86
|
-
When a prompt contains `$enact-operator:<skill-name>` or `$<skill-name>`, Operator's UserPromptSubmit hook records the invocation in `.enact/operator/state/skill-active.json` and adds an MCP-first context note for the agent. That note tells the agent to load/search the Enact Operator MCP namespace immediately if `operator_*` tools are not visible yet, then prefer `operator_*` tools over the `enact-operator` CLI. This skill is operator-driven — there is no durable workflow state to start automatically. The activation log gives operators and the HUD a trace of which skills were explicitly invoked.
|
|
87
|
-
## Final Check
|
|
88
|
-
- `operator_doctor` (or `enact-operator doctor`) reports no errors
|
|
89
|
-
- `operator_plugin_validate` reports the enact-operator source bundle is valid
|
|
90
|
-
- `operator_hooks_status` shows all required hooks registered
|
|
91
|
-
- `.enact/operator/` directory exists with expected subdirectories
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
PACKAGE_NAME="@amsterdamdatalabs/enact-operator"
|
|
5
|
-
BIN_NAME="enact-operator"
|
|
6
|
-
|
|
7
|
-
already_installed() {
|
|
8
|
-
command -v "${BIN_NAME}" >/dev/null 2>&1
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
require_npm() {
|
|
12
|
-
if command -v npm >/dev/null 2>&1; then
|
|
13
|
-
return 0
|
|
14
|
-
fi
|
|
15
|
-
|
|
16
|
-
echo "ERROR: npm is required to install ${PACKAGE_NAME}." >&2
|
|
17
|
-
echo "Install Node.js + npm from https://nodejs.org/ and rerun this script." >&2
|
|
18
|
-
exit 1
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
install_cli() {
|
|
22
|
-
echo "Installing ${PACKAGE_NAME} via npm..."
|
|
23
|
-
npm install -g "${PACKAGE_NAME}"
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
main() {
|
|
27
|
-
if already_installed; then
|
|
28
|
-
local current
|
|
29
|
-
current="$(${BIN_NAME} --version 2>/dev/null | head -1 || echo 'unknown')"
|
|
30
|
-
echo "${BIN_NAME} already installed: ${current}"
|
|
31
|
-
echo "Run '${BIN_NAME} setup' in your repo to initialize Operator state."
|
|
32
|
-
exit 0
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
|
-
require_npm
|
|
36
|
-
install_cli
|
|
37
|
-
|
|
38
|
-
if ! already_installed; then
|
|
39
|
-
echo "ERROR: ${BIN_NAME} was installed but is not on PATH." >&2
|
|
40
|
-
echo "Open a new shell or update your npm global bin PATH, then rerun '${BIN_NAME} --version'." >&2
|
|
41
|
-
exit 1
|
|
42
|
-
fi
|
|
43
|
-
|
|
44
|
-
local current
|
|
45
|
-
current="$(${BIN_NAME} --version 2>/dev/null | head -1 || echo 'unknown')"
|
|
46
|
-
echo "${BIN_NAME} installed: ${current}"
|
|
47
|
-
echo "Next step: run '${BIN_NAME} setup' in the target workspace."
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
main "$@"
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: skill
|
|
3
|
-
description: "Meta-skill: list, discover, and route to available Operator skills. Use when the operator wants to know what skills exist or which skill handles a given task."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Skill
|
|
7
|
-
|
|
8
|
-
## Purpose
|
|
9
|
-
Provides a navigable index of all skills available in the enact-operator plugin. When the operator asks "what can Operator do?" or "which skill should I use for X?", this skill answers by listing the catalog and routing to the correct skill. It does not execute work itself.
|
|
10
|
-
|
|
11
|
-
## Use When
|
|
12
|
-
- The operator wants to see all available Operator skills
|
|
13
|
-
- Choosing between skills for a given task type
|
|
14
|
-
- Checking whether a skill exists before invoking it
|
|
15
|
-
- Auditing the plugin's skill surface for completeness
|
|
16
|
-
|
|
17
|
-
## Execution Policy
|
|
18
|
-
|
|
19
|
-
- start from the repo and `.enact/operator/` truth, not chat memory
|
|
20
|
-
- drive discovery through MCP tools when running inside Codex; CLI commands are the equivalent operator surface
|
|
21
|
-
- this skill is read-only — it writes nothing
|
|
22
|
-
|
|
23
|
-
## Workflow
|
|
24
|
-
1. List all source skills in the operator bundle:
|
|
25
|
-
- MCP: `operator_plugin_list`
|
|
26
|
-
- CLI: `ls enact-operator/extensions/skills/`
|
|
27
|
-
|
|
28
|
-
Plugin installation and host registry state are owned by enact-extensions.
|
|
29
|
-
|
|
30
|
-
2. For a raw directory listing of skill names:
|
|
31
|
-
```
|
|
32
|
-
ls enact-operator/extensions/skills/
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
3. To validate that all skill files are well-formed:
|
|
36
|
-
```
|
|
37
|
-
enact-operator plugins validate
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
4. To read a specific skill's playbook, open its `SKILL.md` directly:
|
|
41
|
-
```
|
|
42
|
-
enact-operator/extensions/skills/<skill-name>/SKILL.md
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
5. Route the operator to the correct skill based on their task:
|
|
46
|
-
|
|
47
|
-
| Task type | Skill |
|
|
48
|
-
|-----------|-------|
|
|
49
|
-
| First-time install or reinstall | `$setup` |
|
|
50
|
-
| Durable multi-executor implementation flow | `$team` |
|
|
51
|
-
| Single executor execution lane | `$executor` |
|
|
52
|
-
| Long-horizon multi-session goal | `$ultragoal` |
|
|
53
|
-
| QA cycling with hard-stop gates | `$ultraqa` |
|
|
54
|
-
| Remove TODO/placeholder noise | `$ai-slop-cleaner` |
|
|
55
|
-
| Read-only investigation | `$analyze` |
|
|
56
|
-
| Specific factual question | `$ask` |
|
|
57
|
-
| Research anchored to a goal | `$autoresearch-goal` |
|
|
58
|
-
| Stop all active modes | `$cancel` |
|
|
59
|
-
| Findings-first review | `$review` |
|
|
60
|
-
| Notification preferences | `$configure-notifications` |
|
|
61
|
-
| Wiki/reference lookup | `$wiki` |
|
|
62
|
-
|
|
63
|
-
## State Contract
|
|
64
|
-
- Reads: `enact-operator/extensions/skills/` directory, `operator_plugin_list` output
|
|
65
|
-
- Writes: nothing
|
|
66
|
-
|
|
67
|
-
## MCP Tools
|
|
68
|
-
|
|
69
|
-
- `operator_plugin_list` — list local operator plugin bundle sources
|
|
70
|
-
|
|
71
|
-
## Commands
|
|
72
|
-
```
|
|
73
|
-
enact-operator plugins validate
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## Activation
|
|
77
|
-
|
|
78
|
-
When a prompt contains `$enact-operator:<skill-name>` or `$<skill-name>`, Operator's UserPromptSubmit hook records the invocation in `.enact/operator/state/skill-active.json` and adds an MCP-first context note for the agent. That note tells the agent to load/search the Enact Operator MCP namespace immediately if `operator_*` tools are not visible yet, then prefer `operator_*` tools over the `enact-operator` CLI. This skill is operator-driven — there is no durable workflow state to start automatically. The activation log gives operators and the HUD a trace of which skills were explicitly invoked.
|
|
79
|
-
## Final Check
|
|
80
|
-
- All skills listed in the routing table are present in `enact-operator/extensions/skills/`
|
|
81
|
-
- `enact-operator plugins validate` passes with no errors
|
|
82
|
-
- The operator was routed to a specific skill, not left with a general answer
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: tdd
|
|
3
|
-
description: "Red-green-refactor mode for behavior with clear inputs, outputs, and regression value."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# TDD
|
|
7
|
-
|
|
8
|
-
## Purpose
|
|
9
|
-
|
|
10
|
-
Use `$tdd` when behavior can be specified before implementation. TDD is for design pressure and regression safety, not for ritual.
|
|
11
|
-
|
|
12
|
-
## Good TDD Candidates
|
|
13
|
-
|
|
14
|
-
- business rules
|
|
15
|
-
- API contracts
|
|
16
|
-
- parsing, formatting, or validation
|
|
17
|
-
- state transitions
|
|
18
|
-
- algorithms and utility behavior
|
|
19
|
-
|
|
20
|
-
## Skip TDD For
|
|
21
|
-
|
|
22
|
-
- pure layout and styling work
|
|
23
|
-
- config-only changes
|
|
24
|
-
- trivial glue code
|
|
25
|
-
- exploratory prototypes where behavior is not yet known
|
|
26
|
-
|
|
27
|
-
## Iron Law
|
|
28
|
-
|
|
29
|
-
No production code without a failing test first.
|
|
30
|
-
|
|
31
|
-
## Cycle
|
|
32
|
-
|
|
33
|
-
1. Red
|
|
34
|
-
- write the smallest failing test for the next behavior
|
|
35
|
-
- run it and prove it fails for the right reason
|
|
36
|
-
2. Green
|
|
37
|
-
- write the minimum code to make it pass
|
|
38
|
-
- rerun the test and the relevant suite
|
|
39
|
-
3. Refactor
|
|
40
|
-
- clean up only after green
|
|
41
|
-
- keep the suite green after every change
|
|
42
|
-
|
|
43
|
-
## Rules
|
|
44
|
-
|
|
45
|
-
- one behavior per cycle
|
|
46
|
-
- do not batch multiple features into one red-green pass
|
|
47
|
-
- prefer regression tests for changed behavior
|
|
48
|
-
- record the verify command in the plan or task notes
|
|
49
|
-
|
|
50
|
-
## Output Standard
|
|
51
|
-
|
|
52
|
-
- what behavior the test locked in
|
|
53
|
-
- the failing signal
|
|
54
|
-
- the minimal implementation
|
|
55
|
-
- the final verification command
|
|
56
|
-
|
|
57
|
-
## Activation
|
|
58
|
-
|
|
59
|
-
When a prompt contains `$enact-operator:<skill-name>` or `$<skill-name>`, Operator's UserPromptSubmit hook records the invocation in `.enact/operator/state/skill-active.json` and adds an MCP-first context note for the agent. That note tells the agent to load/search the Enact Operator MCP namespace immediately if `operator_*` tools are not visible yet, then prefer `operator_*` tools over the `enact-operator` CLI. This skill is operator-driven — there is no durable workflow state to start automatically. The activation log gives operators and the HUD a trace of which skills were explicitly invoked.
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: team
|
|
3
|
-
description: "Durable multi-executor orchestration with queueing, claims, inbox, review gates, and tmux-aware lifecycle control."
|
|
4
|
-
lane: true
|
|
5
|
-
mcpToolPrefix: operator_team_
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Team
|
|
9
|
-
|
|
10
|
-
## Purpose
|
|
11
|
-
|
|
12
|
-
`$team` is the durable execution mode. Use it when you need a shared queue, executor leases, review handoffs, and a runtime that survives beyond one reasoning burst.
|
|
13
|
-
|
|
14
|
-
## Team vs Native Fanout
|
|
15
|
-
|
|
16
|
-
- use native subagents for small, in-session parallelism
|
|
17
|
-
- use `$team` when the work needs durable state, tmux executors, inbox coordination, resumability, or explicit review gates
|
|
18
|
-
|
|
19
|
-
## Use When
|
|
20
|
-
|
|
21
|
-
- the work splits into parallel slices
|
|
22
|
-
- one operator needs durable coordination and review history
|
|
23
|
-
- tasks need claims, heartbeats, inbox messages, and resumable state
|
|
24
|
-
|
|
25
|
-
## Do Not Use When
|
|
26
|
-
|
|
27
|
-
- the task is sequential and small
|
|
28
|
-
- there is no meaningful slice boundary
|
|
29
|
-
- the cost of queueing and review would exceed the value of parallelism
|
|
30
|
-
|
|
31
|
-
## Preconditions
|
|
32
|
-
|
|
33
|
-
Before launching team mode:
|
|
34
|
-
|
|
35
|
-
1. the current task has a clear objective
|
|
36
|
-
2. the first slices are identifiable
|
|
37
|
-
3. the likely file areas are known
|
|
38
|
-
4. there is a verify path
|
|
39
|
-
|
|
40
|
-
If those are missing, run `$deep-interview`, `$trace`, or `$plan` first.
|
|
41
|
-
|
|
42
|
-
## Runtime Contract
|
|
43
|
-
|
|
44
|
-
- if `operator_*` tools are not visible yet, load/search the Enact Operator MCP namespace before doing team work
|
|
45
|
-
- initialize with `operator_team_init`
|
|
46
|
-
- queue work with `operator_team_queue`
|
|
47
|
-
- claim with executor ids via `operator_team_claim`
|
|
48
|
-
- complete into review with `operator_team_complete`, never straight to done
|
|
49
|
-
- record review decisions with `operator_team_review`
|
|
50
|
-
- use `operator_team_inbox`, `operator_team_logs`, `operator_team_status`, and `operator_hud` to monitor real progress
|
|
51
|
-
- shut down only after terminal state or explicit abort via `operator_team_shutdown`
|
|
52
|
-
- for every `operator_team_*` call, `root` means the repository root that owns `.enact/operator`
|
|
53
|
-
- it is **not** the task subdirectory
|
|
54
|
-
- task subdirectories are for code edits and verification only
|
|
55
|
-
- during bootstrap, use sequential MCP calls
|
|
56
|
-
- first confirm `operator_team_status`
|
|
57
|
-
- then `operator_team_init` if absent
|
|
58
|
-
- only after that move to queue / claim / complete / review
|
|
59
|
-
- when no external `taskId` exists, local Operator task discipline is mandatory
|
|
60
|
-
- queue or bootstrap the first local task immediately
|
|
61
|
-
- claim, review, and close by local `taskId`
|
|
62
|
-
- current MCP note: some lifecycle calls still carry that local task id in a `taskId` field
|
|
63
|
-
- do not defer tracker ownership to AzDo
|
|
64
|
-
- executor semantics are team-internal and are not a separate callable skill:
|
|
65
|
-
- executor is the team-internal execution lane, not a root skill
|
|
66
|
-
- executor claims exactly one task at a time
|
|
67
|
-
- executor sends regular heartbeats while active
|
|
68
|
-
- executor reports completion with non-empty summary
|
|
69
|
-
- blocked work must be reported explicitly (`BLOCKED: ...`)
|
|
70
|
-
|
|
71
|
-
## Proof And Closure
|
|
72
|
-
|
|
73
|
-
- `$team` is a current operator lane and should use real Operator proof
|
|
74
|
-
surfaces when its work contributes to closure:
|
|
75
|
-
- `operator_contract_parity_run`
|
|
76
|
-
- `operator_workflow_reconcile`
|
|
77
|
-
- `operator_operator_snapshot`
|
|
78
|
-
- `operator_hud`
|
|
79
|
-
- `contract-parity` should be read from the real gate output, not inferred from
|
|
80
|
-
queue state or reviewer prose alone.
|
|
81
|
-
- Provider note: Operator may use its adapter over the running
|
|
82
|
-
`enact-context` server for proof. That is expected and preferable to
|
|
83
|
-
duplicating analysis in team-local logic.
|
|
84
|
-
|
|
85
|
-
## Lifecycle
|
|
86
|
-
|
|
87
|
-
1. Launch the runtime and inspect backend health.
|
|
88
|
-
2. Queue explicit slices, not vague goals.
|
|
89
|
-
3. Ensure every local task claim maps to a real executor id.
|
|
90
|
-
4. Keep heartbeats and logs current.
|
|
91
|
-
5. Move completions into review with a concrete handoff note.
|
|
92
|
-
6. Monitor:
|
|
93
|
-
- MCP only: `operator_team_init`, `operator_team_status`, `operator_team_spawn`, `operator_team_claim`, `operator_team_heartbeat`, `operator_team_complete`, `operator_team_review`, `operator_team_inbox`, `operator_team_logs`, `operator_team_resume`, `operator_team_shutdown`, `operator_hud`
|
|
94
|
-
7. Shutdown only when active work is terminal or the user wants an abort.
|
|
95
|
-
|
|
96
|
-
## Closure Protocol
|
|
97
|
-
|
|
98
|
-
Use this exact closeout order with the current live `operator_team_*` MCP tools:
|
|
99
|
-
|
|
100
|
-
1. Confirm no in-flight executor work:
|
|
101
|
-
- `operator_team_status`
|
|
102
|
-
2. Verify task queue is terminal (no `queued` or `claimed` tasks remain):
|
|
103
|
-
- `operator_team_task_list`
|
|
104
|
-
3. Ensure task completions and reviewer notes are persisted:
|
|
105
|
-
- `operator_team_complete`
|
|
106
|
-
- `operator_team_review`
|
|
107
|
-
4. Run shutdown:
|
|
108
|
-
- `operator_team_shutdown`
|
|
109
|
-
5. Re-check there is no active team:
|
|
110
|
-
- `operator_team_status`
|
|
111
|
-
|
|
112
|
-
Do not use non-existent shutdown lifecycle tools (for example `shutdown_request`, `shutdown_approve`, or `shutdown_delete`). The active shutdown surface is `operator_team_shutdown`.
|
|
113
|
-
|
|
114
|
-
## Root semantics
|
|
115
|
-
|
|
116
|
-
When the task says “work inside `<path>`”, separate two concepts:
|
|
117
|
-
|
|
118
|
-
1. **Operator root**
|
|
119
|
-
- the repository root that owns `.enact/operator`
|
|
120
|
-
- this is the value passed as `root` to `operator_team_*`
|
|
121
|
-
2. **Task workspace**
|
|
122
|
-
- the subdirectory where code changes happen
|
|
123
|
-
- this is where file reads/edits and verification commands should run
|
|
124
|
-
|
|
125
|
-
Do not point `operator_team_status`, `operator_team_init`, or any other
|
|
126
|
-
`operator_team_*` call at the task subdirectory unless that subdirectory itself
|
|
127
|
-
owns a separate `.enact/operator`.
|
|
128
|
-
|
|
129
|
-
## Degraded Mode
|
|
130
|
-
|
|
131
|
-
If tmux is missing, the runtime may fall back to mock mode. That is acceptable for state flow and testing, not as proof of real detached-executor behavior.
|
|
132
|
-
|
|
133
|
-
## Rules
|
|
134
|
-
|
|
135
|
-
- no silent completions
|
|
136
|
-
- no review without a readable result note
|
|
137
|
-
- no shutdown while work is still active unless aborting
|
|
138
|
-
- no CLI fallback for lifecycle operations; use the `operator_team_*` MCP surface
|
|
139
|
-
- prefer runtime/state MCP tools over ad-hoc pane hacking
|
|
140
|
-
|
|
141
|
-
## Activation
|
|
142
|
-
|
|
143
|
-
When a prompt contains `$enact-operator:<skill-name>` or `$<skill-name>`, Operator's UserPromptSubmit hook records the invocation in `.enact/operator/state/skill-active.json` and adds an MCP-first context note for the agent. That note tells the agent to load/search the Enact Operator MCP namespace immediately if `operator_*` tools are not visible yet, then prefer `operator_*` tools over the `enact-operator` CLI. When no external `taskId` exists, the injected note also means local Operator task discipline is mandatory: queue the first local task immediately and keep queue/review state authoritative in Operator. This skill is operator-driven — there is no durable workflow state to start automatically. The activation log gives operators and the HUD a trace of which skills were explicitly invoked.
|
|
144
|
-
|
|
145
|
-
Team-driven activation is a separate path: observe/MCP should start the runtime directly with `operator_team_init`, not through `operator_operator_activate`.
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
# Executor (team-internal role)
|
|
149
|
-
|
|
150
|
-
This page captures the in-team **executor** semantics for the `team` runtime.
|
|
151
|
-
It is reference-only documentation and **not** a standalone callable skill.
|
|
152
|
-
|
|
153
|
-
Within `$team`, executor-capable work is carried by claimed executor lanes and
|
|
154
|
-
coordinated by team mechanics (spawn, claim, heartbeat, acknowledge, complete).
|
|
155
|
-
|
|
156
|
-
## Purpose
|
|
157
|
-
|
|
158
|
-
An executor is the in-team assignee for a single task slice inside a team session.
|
|
159
|
-
The executor claims one task at a time, maintains heartbeat cadence, and
|
|
160
|
-
reports completion or explicit blockage.
|
|
161
|
-
|
|
162
|
-
## Workflow
|
|
163
|
-
|
|
164
|
-
1. Check available tasks:
|
|
165
|
-
- `operator_team_status`
|
|
166
|
-
2. Claim a task:
|
|
167
|
-
- `operator_team_claim`
|
|
168
|
-
3. Keep heartbeat cadence (typically every 60 seconds):
|
|
169
|
-
- `operator_team_heartbeat`
|
|
170
|
-
4. Report for clarification or status updates:
|
|
171
|
-
- `operator_team_message`
|
|
172
|
-
5. Acknowledge injected instructions after applying them:
|
|
173
|
-
- `operator_team_message_ack`
|
|
174
|
-
6. Complete with summary:
|
|
175
|
-
- `operator_team_complete`
|
|
176
|
-
7. Report blocked work explicitly:
|
|
177
|
-
- `operator_team_complete` with a `BLOCKED: ...` summary
|
|
178
|
-
8. Check inbox for operator instructions:
|
|
179
|
-
- `operator_team_inbox`
|
|
180
|
-
9. Check execution context:
|
|
181
|
-
- `operator_team_logs`
|
|
182
|
-
|
|
183
|
-
Example acknowledgement call:
|
|
184
|
-
|
|
185
|
-
```json
|
|
186
|
-
{
|
|
187
|
-
"tool": "operator_team_message_ack",
|
|
188
|
-
"root": "/path/to/repo-root",
|
|
189
|
-
"executorId": "executor",
|
|
190
|
-
"messageId": "msg_123"
|
|
191
|
-
}
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
## Contract checks
|
|
195
|
-
|
|
196
|
-
- claimed tasks stay in claimed state only with recent heartbeat
|
|
197
|
-
- completed tasks include a non-empty summary
|
|
198
|
-
- blocked completions include a specific reason
|
|
199
|
-
- no second claim without completing or unblocking the first task
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: trace
|
|
3
|
-
description: "Execution-path mapping for entry points, data flow, side effects, and blast radius before risky work."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Trace
|
|
7
|
-
|
|
8
|
-
## Purpose
|
|
9
|
-
|
|
10
|
-
Use `$trace` before a risky edit or review when you need to know what code path actually runs, what it touches, and what could break downstream.
|
|
11
|
-
|
|
12
|
-
## Workflow
|
|
13
|
-
|
|
14
|
-
1. Find the entry points.
|
|
15
|
-
2. Follow data flow through the changed or targeted path.
|
|
16
|
-
3. Map side effects:
|
|
17
|
-
- storage writes
|
|
18
|
-
- network calls
|
|
19
|
-
- UI state changes
|
|
20
|
-
- background work
|
|
21
|
-
4. Identify risky branches and missing guards.
|
|
22
|
-
5. Name the concrete files the next pass should touch.
|
|
23
|
-
|
|
24
|
-
## Suggested Tools
|
|
25
|
-
|
|
26
|
-
- `ctx_search` for symbol and path discovery
|
|
27
|
-
- `ctx_read` for call-path confirmation
|
|
28
|
-
- `ctx_semantic_search` or `ctx_graph` when lexical search is not enough
|
|
29
|
-
- `operator_hud` when runtime state matters to the path
|
|
30
|
-
|
|
31
|
-
## Output Standard
|
|
32
|
-
|
|
33
|
-
- entry points
|
|
34
|
-
- downstream side effects
|
|
35
|
-
- risky branches
|
|
36
|
-
- likely blast radius
|
|
37
|
-
- recommended edit boundary
|
|
38
|
-
|
|
39
|
-
## Activation
|
|
40
|
-
|
|
41
|
-
When a prompt contains `$enact-operator:<skill-name>` or `$<skill-name>`, Operator's UserPromptSubmit hook records the invocation in `.enact/operator/state/skill-active.json` and adds an MCP-first context note for the agent. That note tells the agent to load/search the Enact Operator MCP namespace immediately if `operator_*` tools are not visible yet, then prefer `operator_*` tools over the `enact-operator` CLI. This skill is operator-driven — there is no durable workflow state to start automatically. The activation log gives operators and the HUD a trace of which skills were explicitly invoked.
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ultragoal
|
|
3
|
-
description: "Long-horizon goal mode that manages cross-session continuity for a durable objective, using ultrawork for each individual session."
|
|
4
|
-
lane: true
|
|
5
|
-
mcpToolPrefix: operator_ultragoal_
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Ultragoal
|
|
9
|
-
|
|
10
|
-
## Purpose
|
|
11
|
-
|
|
12
|
-
Wraps a multi-session, long-running objective that cannot be completed in a single context window. Ultragoal continuity lives in reviewable artifacts under `.enact/operator/ultragoal/`, while each individual execution burst is tracked through the real Operator runtime state (`$ultrawork`, and when needed `$autopilot`, `$ralph`, or `$team`).
|
|
13
|
-
|
|
14
|
-
## Use When
|
|
15
|
-
|
|
16
|
-
- a goal spans multiple days or context-window boundaries
|
|
17
|
-
- you need cross-session continuity for a complex engineering objective
|
|
18
|
-
- individual `$ultrawork` sessions should contribute to a shared, durable goal artifact
|
|
19
|
-
- you need one authoritative goal artifact listing remaining vs completed slices across sessions
|
|
20
|
-
|
|
21
|
-
## Workflow
|
|
22
|
-
|
|
23
|
-
1. Define the goal and create or update the goal artifact in `.enact/operator/ultragoal/<goalId>.json`.
|
|
24
|
-
- Prefer MCP: `operator_ultragoal_update`
|
|
25
|
-
- Record at least: `title`, `goal`, `planPath`, `status`, `remainingPbis`, `completedPbis`, `updatedAt`
|
|
26
|
-
2. Start or refresh the current session:
|
|
27
|
-
- MCP: `operator_session_start`
|
|
28
|
-
- CLI fallback: `enact-operator session start`
|
|
29
|
-
3. Start ultrawork for the current execution burst:
|
|
30
|
-
- MCP: `operator_ultrawork_start`
|
|
31
|
-
- CLI fallback: `enact-operator ultrawork start "<goal>"`
|
|
32
|
-
- Do not depend on custom `activationMetadata` shapes for continuity.
|
|
33
|
-
Goal-level continuity belongs in the ultragoal artifact itself; runtime
|
|
34
|
-
activation metadata is only optional provenance.
|
|
35
|
-
4. Link the relevant plan ids and external task ids into ultrawork state when those
|
|
36
|
-
concrete ids exist:
|
|
37
|
-
- MCP: `operator_ultrawork_link_plan`, `operator_ultrawork_link_task`
|
|
38
|
-
- CLI fallback: `enact-operator ultrawork link-plan <planId>`
|
|
39
|
-
- The linked external identifier parameter is `taskId`.
|
|
40
|
-
5. Within each burst, run tasks using `$ultrawork` and keep the ultragoal
|
|
41
|
-
artifact updated as slices move from `remainingPbis` to `completedPbis`.
|
|
42
|
-
6. At natural stopping points, record verified progress:
|
|
43
|
-
- MCP: `operator_ultrawork_verify`
|
|
44
|
-
- CLI fallback: `enact-operator ultrawork verify "<evidence>"`
|
|
45
|
-
7. For closure-sensitive goals, also keep the real parity/hygiene surfaces in
|
|
46
|
-
view across sessions:
|
|
47
|
-
- `operator_contract_parity_run`
|
|
48
|
-
- `operator_operator_snapshot`
|
|
49
|
-
- `operator_hud`
|
|
50
|
-
- `operator_workflow_reconcile`
|
|
51
|
-
8. On the next session, resume by reading:
|
|
52
|
-
- `.enact/operator/ultragoal/<goalId>.json`
|
|
53
|
-
- `operator_ultrawork_status`
|
|
54
|
-
- `operator_session_status`
|
|
55
|
-
- `operator_hud`
|
|
56
|
-
9. When the goal is fully achieved:
|
|
57
|
-
- complete the active runtime burst (`operator_ultrawork_complete`)
|
|
58
|
-
- update the ultragoal artifact to `status: completed`
|
|
59
|
-
- ensure no dangling active runtime remains in HUD/state
|
|
60
|
-
|
|
61
|
-
## State Contract
|
|
62
|
-
|
|
63
|
-
- reads:
|
|
64
|
-
- `.enact/operator/ultragoal/<goalId>.json`
|
|
65
|
-
- plan files
|
|
66
|
-
- session / ultrawork / HUD state
|
|
67
|
-
- writes:
|
|
68
|
-
- `.enact/operator/ultragoal/<goalId>.json`
|
|
69
|
-
- linked ultrawork state via `operator_ultrawork_*`
|
|
70
|
-
- optional parity evidence via `operator_contract_parity_run`
|
|
71
|
-
|
|
72
|
-
## Commands
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
enact-operator session start
|
|
76
|
-
enact-operator ultragoal status <goalId>
|
|
77
|
-
enact-operator ultragoal update <goalId>
|
|
78
|
-
enact-operator ultrawork start "<goal>"
|
|
79
|
-
enact-operator ultrawork status
|
|
80
|
-
enact-operator ultrawork verify "<evidence>"
|
|
81
|
-
enact-operator ultrawork link-plan <planId>
|
|
82
|
-
enact-operator ultrawork link-task <taskId>
|
|
83
|
-
enact-operator ultrawork complete "<summary>"
|
|
84
|
-
enact-operator ultrawork abort "<reason>"
|
|
85
|
-
enact-operator session status
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Activation
|
|
89
|
-
|
|
90
|
-
When a prompt contains `$enact-operator:<skill-name>` or `$<skill-name>`, Operator's UserPromptSubmit hook records the invocation in `.enact/operator/state/skill-active.json` and adds an MCP-first context note for the agent. That note tells the agent to load/search the Enact Operator MCP namespace immediately if `operator_*` tools are not visible yet, then prefer `operator_*` tools over the `enact-operator` CLI. This skill is operator-driven — there is no durable workflow state to start automatically. The activation log gives operators and the HUD a trace of which skills were explicitly invoked.
|
|
91
|
-
## Final Check
|
|
92
|
-
|
|
93
|
-
- `.enact/operator/ultragoal/<goalId>.json` reflects current progress after each session
|
|
94
|
-
- `remainingPbis` and `completedPbis` stay truthful to the codebase
|
|
95
|
-
- no session ends without either verification evidence or a completion summary
|
|
96
|
-
- plan files stay in sync with actual completed work
|
|
97
|
-
- when the goal is done, ultrawork is completed and no dangling execution session remains
|
|
98
|
-
- if closure criteria exist, use the real `contract-parity` gate rather than a
|
|
99
|
-
purely narrative reviewer summary
|