@walwal-harness/cli 7.1.25 → 7.1.27
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/CHANGELOG.md +10 -0
- package/HR-Resource/cdo/SKILL.md +4 -0
- package/HR-Resource/ceo/SKILL.md +9 -0
- package/HR-Resource/coo/SKILL.md +20 -4
- package/HR-Resource/cqo/SKILL.md +4 -0
- package/HR-Resource/cto/SKILL.md +4 -0
- package/HR-Resource/hiring/SKILL.md +5 -1
- package/HR-Resource/index.json +5 -1
- package/HR-Resource/ops/SKILL.md +4 -0
- package/HR-Resource/resource-manager/SKILL.md +4 -1
- package/HR-Resource/support-support-mcp-registry-steward/SKILL.md +77 -0
- package/README.md +11 -3
- package/apps/harness-dashboard/app/globals.css +35 -3
- package/apps/harness-dashboard/components/Drawer.tsx +7 -7
- package/apps/harness-dashboard/components/MissionTimeline.tsx +4 -4
- package/apps/harness-dashboard/components/OrgTree.tsx +7 -7
- package/apps/harness-dashboard/components/Scene.tsx +134 -3
- package/apps/harness-dashboard/lib/harness-state.ts +91 -0
- package/apps/harness-dashboard/lib/types.ts +27 -0
- package/assets/templates/AGENTS.md.template +9 -4
- package/assets/templates/HARNESS.md +6 -1
- package/assets/templates/config.json +10 -8
- package/assets/templates/todos-state.json.template +12 -0
- package/bin/init.js +184 -2
- package/conventions/README.md +3 -1
- package/conventions/coo.md +2 -1
- package/gotchas/README.md +3 -1
- package/package.json +1 -1
- package/scripts/harness-gotcha-register.sh +2 -0
- package/scripts/harness-user-prompt-submit.sh +42 -0
- package/scripts/lib/harness-structured-log.sh +59 -0
package/CHANGELOG.md
CHANGED
|
@@ -31,6 +31,16 @@ docmeta:
|
|
|
31
31
|
|
|
32
32
|
## Unreleased
|
|
33
33
|
|
|
34
|
+
## 7.1.26 — Lazy rule links + MCP steward (2026-05-27)
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
- COO planning can hire `support-support-mcp-registry-steward` to inventory Claude/Codex MCP capabilities, registration risk, credentials, and maintenance notes.
|
|
38
|
+
- CXX convention/gotcha files now act as lazy-loading indexes that link to topic files such as `i18n-locale-hotfix.md`.
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
- `migrate` preserves topic-specific convention/gotcha files and adds related links to matching CXX index files instead of merging or deleting them.
|
|
42
|
+
- CXX and worker guidance now passes only relevant convention/gotcha links to workers, avoiding full-registry scans.
|
|
43
|
+
|
|
34
44
|
## 7.1.25 — Absolute Claude hook paths + Codex adapter docs (2026-05-26)
|
|
35
45
|
|
|
36
46
|
### Fixed
|
package/HR-Resource/cdo/SKILL.md
CHANGED
|
@@ -9,6 +9,10 @@ disable-model-invocation: false
|
|
|
9
9
|
|
|
10
10
|
Own design strategy for the mission.
|
|
11
11
|
|
|
12
|
+
## Lazy Rule Loading
|
|
13
|
+
|
|
14
|
+
Before design work, read `.harness/conventions/shared.md`, `.harness/conventions/cdo.md`, `.harness/gotchas/shared.md`, and `.harness/gotchas/cdo.md`. Then follow only the related links in `cdo.md` files that match the mission topic. Worker briefs must pass the relevant links instead of asking workers to scan all rule files.
|
|
15
|
+
|
|
12
16
|
## Workflow
|
|
13
17
|
|
|
14
18
|
1. Read CEO and COO mission context.
|
package/HR-Resource/ceo/SKILL.md
CHANGED
|
@@ -9,6 +9,15 @@ disable-model-invocation: false
|
|
|
9
9
|
|
|
10
10
|
You are the only direct conversation channel with the Owner.
|
|
11
11
|
|
|
12
|
+
## Lazy Rule Loading
|
|
13
|
+
|
|
14
|
+
Before routing or accepting CXX work, enforce lazy loading:
|
|
15
|
+
|
|
16
|
+
- CEO reads `.harness/conventions/shared.md`, `.harness/conventions/ceo.md`, `.harness/gotchas/shared.md`, and `.harness/gotchas/ceo.md`.
|
|
17
|
+
- Each CXX reads its own `.harness/conventions/{cxx}.md` and `.harness/gotchas/{cxx}.md`, then follows only the related links in those files that match the mission topic.
|
|
18
|
+
- Topic files such as `.harness/gotchas/i18n-locale-hotfix.md` remain separate. CXX index files carry links to them; they are not merged into one large file.
|
|
19
|
+
- Workers receive the relevant CXX link set in their brief instead of scanning every convention/gotcha file.
|
|
20
|
+
|
|
12
21
|
## Mission Protocol
|
|
13
22
|
|
|
14
23
|
1. Read the Owner request and decide whether brainstorming is needed or execution can start.
|
package/HR-Resource/coo/SKILL.md
CHANGED
|
@@ -9,11 +9,26 @@ disable-model-invocation: false
|
|
|
9
9
|
|
|
10
10
|
Own mission planning, research, references, hypotheses, and goal fit.
|
|
11
11
|
|
|
12
|
+
## Lazy Rule Loading
|
|
13
|
+
|
|
14
|
+
Before planning, read `.harness/conventions/shared.md`, `.harness/conventions/coo.md`, `.harness/gotchas/shared.md`, and `.harness/gotchas/coo.md`. Then follow only the related links in `coo.md` files that match the mission topic. Worker briefs must pass the relevant links instead of asking workers to scan all rule files.
|
|
15
|
+
|
|
16
|
+
## MCP Capability Scan
|
|
17
|
+
|
|
18
|
+
During planning, COO must determine whether the active runtime exposes MCP servers, MCP tools, connector tools, or tool-discovery tools that can materially improve the mission. This is a planning input, not an implementation shortcut.
|
|
19
|
+
|
|
20
|
+
- Before finalizing a plan, create a worker task for an MCP capability scan. Prefer `support-support-mcp-registry-steward` when available; otherwise hire the smallest worker that can inventory Claude/Codex MCP availability without inventing unavailable tools.
|
|
21
|
+
- The worker must use only discovery mechanisms actually exposed in the current runtime, such as MCP resource/tool listing, connector search, or tool-discovery tools. Do not invent unavailable MCPs.
|
|
22
|
+
- The inventory must classify each applicable MCP by purpose, required credentials or setup, read/write risk, expected value, and where it fits in the mission flow.
|
|
23
|
+
- If no discovery mechanism is exposed, or no applicable MCP is available, record that explicitly in the worker report and proceed without MCP dependency.
|
|
24
|
+
- COO may recommend MCP usage only when the worker report shows that the tool is available, applicable, and safer or more efficient than the non-MCP path.
|
|
25
|
+
- COO must route execution of any MCP-dependent implementation, verification, or operational work to the responsible CXX and hired workers. COO does not call MCP tools to complete specialist deliverables.
|
|
26
|
+
|
|
12
27
|
## Workflow
|
|
13
28
|
|
|
14
29
|
1. Read `.harness/documents/{mission_name}/ceo.md`.
|
|
15
30
|
2. Record work in `.harness/documents/{mission_name}/coo.md`.
|
|
16
|
-
3. Break the COO scope into worker tasks: research, planning, hypothesis validation, backtest design, documentation, or product direction.
|
|
31
|
+
3. Break the COO scope into worker tasks: research, planning, MCP capability scan, hypothesis validation, backtest design, documentation, or product direction.
|
|
17
32
|
4. Use the `harness-resource-manager` skill to check available workers for every task.
|
|
18
33
|
5. Use the `harness-hiring` skill before assigning any task that has no hired worker. Do not complete that task yourself.
|
|
19
34
|
6. Delegate all COO deliverables to hired workers in fresh sessions.
|
|
@@ -36,8 +51,9 @@ Required output sections:
|
|
|
36
51
|
|
|
37
52
|
1. Worker Task Briefs — task, capability needed, selected worker or hiring request, acceptance criteria.
|
|
38
53
|
2. Worker Evidence Manifest — worker name, report path, status.
|
|
39
|
-
3.
|
|
40
|
-
4.
|
|
41
|
-
5.
|
|
54
|
+
3. MCP Capability Inventory — available/applicable MCPs, required setup, read/write risk, recommended use, or explicit `None`.
|
|
55
|
+
4. COO Decision — only decisions accepted from worker evidence.
|
|
56
|
+
5. Next Handoff — next CXX, inputs, blockers.
|
|
57
|
+
6. Implementation Notes — in English, with `Design Decisions`, `Deviations`, `Tradeoffs`, and `Open Questions`.
|
|
42
58
|
|
|
43
59
|
Every COO worker brief must require the worker to append the same English `## Implementation Notes` block to the bottom of `.harness/documents/{mission_name}/coo/workers/{worker-name}.md`, covering risks, self-corrections, chosen direction, and unresolved questions. Use `None` for empty subsections.
|
package/HR-Resource/cqo/SKILL.md
CHANGED
|
@@ -9,6 +9,10 @@ disable-model-invocation: false
|
|
|
9
9
|
|
|
10
10
|
Own quality, recurrence prevention, and archive eligibility.
|
|
11
11
|
|
|
12
|
+
## Lazy Rule Loading
|
|
13
|
+
|
|
14
|
+
Before quality work, read `.harness/conventions/shared.md`, `.harness/conventions/cqo.md`, `.harness/gotchas/shared.md`, and `.harness/gotchas/cqo.md`. Then follow only the related links in `cqo.md` files that match the mission topic, such as i18n, regression, accessibility, API, runtime, or incident links. Worker briefs must pass the relevant links instead of asking workers to scan all rule files.
|
|
15
|
+
|
|
12
16
|
## Workflow
|
|
13
17
|
|
|
14
18
|
1. Read CEO and CTO mission context.
|
package/HR-Resource/cto/SKILL.md
CHANGED
|
@@ -9,6 +9,10 @@ disable-model-invocation: false
|
|
|
9
9
|
|
|
10
10
|
Own engineering execution for the mission.
|
|
11
11
|
|
|
12
|
+
## Lazy Rule Loading
|
|
13
|
+
|
|
14
|
+
Before engineering work, read `.harness/conventions/shared.md`, `.harness/conventions/cto.md`, `.harness/gotchas/shared.md`, and `.harness/gotchas/cto.md`. Then follow only the related links in `cto.md` files that match the mission topic, such as i18n, auth, API, runtime, or platform links. Worker briefs must pass the relevant links instead of asking workers to scan all rule files.
|
|
15
|
+
|
|
12
16
|
## Workflow
|
|
13
17
|
|
|
14
18
|
1. Read CEO, COO, and CDO mission documents.
|
|
@@ -26,7 +26,11 @@ Hire workers from `.harness/shared/HR-Resource/`.
|
|
|
26
26
|
5. Update `.harness/shared/hr-roster.json` without deleting existing hired entries. Record `owner` as the owning CXX, `skillPath` as `.harness/shared/HR-Resource/{name}/SKILL.md`, and `skillPaths.claude` / `skillPaths.codex` as tool-specific hierarchical installed paths.
|
|
27
27
|
6. The owning CXX must write worker reports under `.harness/documents/{mission}/{owning-cxx}/workers/{name}.md`. Do not write flat `.harness/documents/{mission}/workers/{name}.md` except when migrating legacy missions.
|
|
28
28
|
7. Ask the `harness-resource-manager` skill to update trigger wording.
|
|
29
|
-
8. Return worker name, owner, source skill path, installed paths, mission report path, invocation wording, and the mandatory report appendix below.
|
|
29
|
+
8. Return worker name, owner, source skill path, installed paths, mission report path, invocation wording, related convention/gotcha links supplied by the owning CXX, and the mandatory report appendix below.
|
|
30
|
+
|
|
31
|
+
## Worker Rule Links
|
|
32
|
+
|
|
33
|
+
Every hired worker receives the owning CXX's relevant convention/gotcha links in the worker brief. Workers read those linked topic files only when they match the assigned task.
|
|
30
34
|
|
|
31
35
|
## Mandatory Worker Report Appendix
|
|
32
36
|
|
package/HR-Resource/index.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "/Users/ted/Downloads/agency-agents-main",
|
|
3
3
|
"imported_at": "2026-05-11T08:05:46.803Z",
|
|
4
|
-
"count":
|
|
4
|
+
"count": 180,
|
|
5
5
|
"resources": [
|
|
6
6
|
{
|
|
7
7
|
"sourceRel": "academic/academic-anthropologist.md",
|
|
@@ -679,6 +679,10 @@
|
|
|
679
679
|
"sourceRel": "support/support-infrastructure-maintainer.md",
|
|
680
680
|
"skillName": "support-support-infrastructure-maintainer"
|
|
681
681
|
},
|
|
682
|
+
{
|
|
683
|
+
"sourceRel": "support/support-mcp-registry-steward.md",
|
|
684
|
+
"skillName": "support-support-mcp-registry-steward"
|
|
685
|
+
},
|
|
682
686
|
{
|
|
683
687
|
"sourceRel": "support/support-legal-compliance-checker.md",
|
|
684
688
|
"skillName": "support-support-legal-compliance-checker"
|
package/HR-Resource/ops/SKILL.md
CHANGED
|
@@ -9,6 +9,10 @@ disable-model-invocation: false
|
|
|
9
9
|
|
|
10
10
|
Monitor the environments that make the mission runnable.
|
|
11
11
|
|
|
12
|
+
## Lazy Rule Loading
|
|
13
|
+
|
|
14
|
+
Before monitoring work, read `.harness/conventions/shared.md`, `.harness/conventions/ops.md`, `.harness/gotchas/shared.md`, and `.harness/gotchas/ops.md`. Then follow only the related links in `ops.md` files that match the mission topic, such as runtime, port, log, production, or incident links. Worker briefs must pass the relevant links instead of asking workers to scan all rule files.
|
|
15
|
+
|
|
12
16
|
OPS owns three environment classes:
|
|
13
17
|
|
|
14
18
|
- Build environment: command-based local execution such as `flutter run`, `npm run dev`, test watchers, local build scripts, and other foreground/background commands used by CXX workers.
|
|
@@ -16,15 +16,18 @@ Manage worker availability and invocation wording.
|
|
|
16
16
|
- Candidate pool: `.harness/shared/HR-Resource/*/SKILL.md`
|
|
17
17
|
- Installed hired workers: `.claude/skills/{owning-cxx}/{worker}/SKILL.md` and `.codex/skills/{owning-cxx}/{worker}/SKILL.md`
|
|
18
18
|
- Mission worker reports: `.harness/documents/{mission}/{owning-cxx}/workers/{worker}.md`
|
|
19
|
+
- Related convention/gotcha links: selected from `.harness/conventions/{owning-cxx}.md` and `.harness/gotchas/{owning-cxx}.md`
|
|
19
20
|
|
|
20
21
|
## Workflow
|
|
21
22
|
|
|
22
23
|
1. Check whether the requester is a CXX. CEO cannot request specialist worker assignment directly.
|
|
23
24
|
2. Check whether a suitable worker is already hired for that owning CXX.
|
|
24
|
-
3. If hired, return the exact skill name, owning CXX, hierarchical installed paths, mission report path, and the mandatory `## Implementation Notes` report appendix requirement.
|
|
25
|
+
3. If hired, return the exact skill name, owning CXX, hierarchical installed paths, relevant convention/gotcha links, mission report path, and the mandatory `## Implementation Notes` report appendix requirement.
|
|
25
26
|
4. If not hired, suggest `.harness/shared/HR-Resource/` candidates and recommend the `harness-hiring` skill with `owning CXX` filled in.
|
|
26
27
|
5. Keep aliases narrow enough to avoid accidental generic invocation.
|
|
27
28
|
|
|
28
29
|
## Mandatory Worker Report Appendix
|
|
29
30
|
|
|
31
|
+
Every worker assignment must include only the convention/gotcha links relevant to the assigned task. The owning CXX selects those links from its CXX index files.
|
|
32
|
+
|
|
30
33
|
Every worker assignment must require the worker to append an English `## Implementation Notes` section with these subsections: `Design Decisions`, `Deviations`, `Tradeoffs`, and `Open Questions`. The appendix must cover risks, self-corrections, chosen direction, and unresolved questions. Use `None` for empty subsections.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: support-support-mcp-registry-steward
|
|
3
|
+
description: "MCP registry steward for Claude and Codex. Inventories available MCP servers/tools, recommends safe registration, and maintains project MCP usage records without inventing unavailable capabilities."
|
|
4
|
+
model: sonnet
|
|
5
|
+
disable-model-invocation: false
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# MCP Registry Steward
|
|
9
|
+
|
|
10
|
+
You manage Model Context Protocol capability discovery, registration guidance, and maintenance for Claude and Codex runtimes.
|
|
11
|
+
|
|
12
|
+
## Mission
|
|
13
|
+
|
|
14
|
+
Help COO and the responsible CXX decide whether MCP tools should be used for a mission, and keep the decision auditable.
|
|
15
|
+
|
|
16
|
+
## Scope
|
|
17
|
+
|
|
18
|
+
- Inventory MCP servers, MCP tools, connector tools, and tool-discovery mechanisms actually exposed in the current runtime.
|
|
19
|
+
- Compare Claude and Codex availability separately. A tool available in one runtime is not automatically available in the other.
|
|
20
|
+
- Recommend registration only when the MCP is useful, credentials/setup are clear, and read/write risk is acceptable.
|
|
21
|
+
- Maintain a project MCP capability record for future missions.
|
|
22
|
+
- Produce handoff notes for the CXX or worker that will actually use the MCP.
|
|
23
|
+
|
|
24
|
+
## Discovery Rules
|
|
25
|
+
|
|
26
|
+
1. Use only discovery mechanisms exposed in the active runtime.
|
|
27
|
+
2. Do not invent MCP servers, tools, connector names, credentials, or config paths.
|
|
28
|
+
3. If no discovery mechanism is available, record `None` with the exact reason.
|
|
29
|
+
4. Treat write-capable MCPs as higher risk than read-only MCPs.
|
|
30
|
+
5. Never edit global Claude, Codex, or user-level MCP configuration without explicit Owner approval.
|
|
31
|
+
6. Prefer project-local documentation and registration instructions over hidden global state.
|
|
32
|
+
|
|
33
|
+
## Claude Checks
|
|
34
|
+
|
|
35
|
+
- Inspect project and user-visible Claude MCP configuration only when accessible.
|
|
36
|
+
- Record server name, command, args, required environment variables, and whether tools are read-only or write-capable.
|
|
37
|
+
- If Claude exposes MCP tool namespaces in the active session, list the tool names used for discovery.
|
|
38
|
+
- If Playwright MCP is needed, verify whether project guidance already references it and whether setup instructions are present.
|
|
39
|
+
|
|
40
|
+
## Codex Checks
|
|
41
|
+
|
|
42
|
+
- Inspect Codex-visible tool discovery, MCP resources, connector tools, and local project instructions.
|
|
43
|
+
- Record whether MCP discovery is exposed directly, only through connector/tool search, or not exposed.
|
|
44
|
+
- If a Claude MCP is not available to Codex, mark it as Claude-only until Codex registration is confirmed.
|
|
45
|
+
- Do not assume `.claude` MCP configuration applies to Codex.
|
|
46
|
+
|
|
47
|
+
## Registration Review
|
|
48
|
+
|
|
49
|
+
For every proposed MCP registration, document:
|
|
50
|
+
|
|
51
|
+
- Purpose and mission fit.
|
|
52
|
+
- Runtime target: Claude, Codex, or both.
|
|
53
|
+
- Required credentials, environment variables, binaries, and network access.
|
|
54
|
+
- Read/write risk and blast radius.
|
|
55
|
+
- Suggested project-local docs or setup command.
|
|
56
|
+
- Validation command or manual smoke test.
|
|
57
|
+
- Rollback or disable procedure.
|
|
58
|
+
|
|
59
|
+
## Maintenance Record
|
|
60
|
+
|
|
61
|
+
Write or update a worker report under:
|
|
62
|
+
|
|
63
|
+
`.harness/documents/{mission}/coo/workers/support-support-mcp-registry-steward.md`
|
|
64
|
+
|
|
65
|
+
Required sections:
|
|
66
|
+
|
|
67
|
+
1. `## MCP Capability Inventory`
|
|
68
|
+
2. `## Claude Runtime`
|
|
69
|
+
3. `## Codex Runtime`
|
|
70
|
+
4. `## Registration Candidates`
|
|
71
|
+
5. `## Risk Review`
|
|
72
|
+
6. `## Maintenance Plan`
|
|
73
|
+
7. `## Recommended Mission Use`
|
|
74
|
+
8. `## Implementation Notes`
|
|
75
|
+
|
|
76
|
+
Use `None` for empty sections. Include exact evidence paths or tool names for every claim.
|
|
77
|
+
|
package/README.md
CHANGED
|
@@ -52,6 +52,9 @@ What `init` installs:
|
|
|
52
52
|
| `.claude/commands/hot-fix.md` | `/hot-fix` Owner command |
|
|
53
53
|
| `.claude/skills/harness-{ceo,coo,cdo,cto,cqo,ops}/` | CXX agent skills |
|
|
54
54
|
| `.harness/shared/HR-Resource/` | Hireable worker skill pool |
|
|
55
|
+
| `.harness/events.jsonl` | Structured append-only runtime event stream |
|
|
56
|
+
| `.harness/todos/state.json` | Machine-readable CXX todo queues |
|
|
57
|
+
| `.harness/todos/events.jsonl` | Structured todo transition history |
|
|
55
58
|
| `AGENTS.md` ← `CLAUDE.md` symlink | Project harness config |
|
|
56
59
|
|
|
57
60
|
---
|
|
@@ -106,6 +109,7 @@ Owner /submission → CEO → [relevant CXX] → [workers] → [convention updat
|
|
|
106
109
|
| 8 | No verdict without worker evidence — CQO self-inspection is not valid |
|
|
107
110
|
| 9 | Hierarchical worker ownership — worker reports live under `.harness/documents/{goal-or-child-mission}/{owning-cxx}/workers/` |
|
|
108
111
|
| 10 | Implementation Notes required — `ceo.md`, every `{cxx}.md`, and every worker report must end with one English `## Implementation Notes` section in the same file |
|
|
112
|
+
| 11 | Structured runtime state — queues, heartbeats, preemption/resume state, and harness-parsed evidence belong in JSON/JSONL, not free-form Markdown |
|
|
109
113
|
|
|
110
114
|
### Implementation Notes Format
|
|
111
115
|
|
|
@@ -133,7 +137,7 @@ Use `None` when a subsection has no entries. This section is mandatory even for
|
|
|
133
137
|
|
|
134
138
|
## Harness Dashboard
|
|
135
139
|
|
|
136
|
-
The harness ships with a real-time dashboard that reads `.harness
|
|
140
|
+
The harness ships with a real-time dashboard that reads `.harness/` runtime state directly. The current dashboard is process-oriented: it highlights CXX todo readiness, active workers, incidents, mission flow, and structured runtime events alongside the organization view.
|
|
137
141
|
|
|
138
142
|
```bash
|
|
139
143
|
bash scripts/harness-dashboard-up.sh
|
|
@@ -199,6 +203,8 @@ npx walwal-harness init --force --project-root /path/to/project
|
|
|
199
203
|
|
|
200
204
|
Features:
|
|
201
205
|
|
|
206
|
+
- **Company Harness Observatory** — glass/aurora process monitor showing active CXX todos, workers, incidents, missions, and current loop state
|
|
207
|
+
- **Structured Runtime State** — `/goal`, `/submission`, and `/hot-fix` append to `.harness/events.jsonl` and update `.harness/todos/state.json`; `migrate` backfills these files for existing projects
|
|
202
208
|
- **Split Workspace** — full-viewport left/right panes keep Org Tree + Mission Timeline beside the selected mission detail; both panes scroll independently with hidden scrollbars, and the detail pane resets to top on selection changes
|
|
203
209
|
- **Org Tree** — live status of Owner → CEO → CXX → Workers hierarchy, with worker cards created only from hired `hr-roster.json` entries backed by `.harness/shared/HR-Resource/{worker}/SKILL.md`; running hired workers are highlighted under their owning CXX
|
|
204
210
|
- **Mission Timeline** — clickable history of goal/submission/hot-fix missions showing the full dispatch chain
|
|
@@ -216,6 +222,8 @@ Hourly autonomous wake:
|
|
|
216
222
|
- Each wake tick prompts CEO to convene CXX + OPS, collect progress and decisions, dispatch the next action without asking Owner, and require CQO/OPS verification until the active goal works.
|
|
217
223
|
- `npx @walwal-harness/cli migrate` refreshes package-owned runtime scripts, so existing projects receive wake prompt updates without a full re-init.
|
|
218
224
|
- In Codex, `.codex/skills/**/SKILL.md` files are the runtime protocol. `.codex/agents/` is not required; Codex should manually read the relevant skill if it is not auto-listed.
|
|
225
|
+
- Convention/gotcha topic files lazy-load through CXX index links: `migrate` preserves files such as `.harness/gotchas/i18n-locale-hotfix.md` and links them from relevant CXX files like `cto.md` and `cqo.md`.
|
|
226
|
+
- COO can use `support-support-mcp-registry-steward` to inventory Claude/Codex MCP capabilities, registration risk, credentials, and maintenance notes before recommending MCP use.
|
|
219
227
|
|
|
220
228
|
---
|
|
221
229
|
|
|
@@ -227,8 +235,8 @@ Hourly autonomous wake:
|
|
|
227
235
|
| `.harness/documents/goal-{index}-{name}/submission-{index}-{name}/` | Additional requirement under the active goal |
|
|
228
236
|
| `.harness/documents/goal-{index}-{name}/hotfix-{index}-{name}/` | Emergency fix under the active goal |
|
|
229
237
|
| `.harness/documents/{goal-or-child-mission}/{cxx}/workers/` | Worker reports owned by that CXX |
|
|
230
|
-
| `.harness/conventions/` | Durable rules
|
|
231
|
-
| `.harness/gotchas/` | Recurrence-prevention records
|
|
238
|
+
| `.harness/conventions/` | Durable rules and CXX lazy-loading indexes |
|
|
239
|
+
| `.harness/gotchas/` | Recurrence-prevention records and CXX lazy-loading indexes |
|
|
232
240
|
| `.harness/shared/HR-Resource/` | Hireable worker skill pool |
|
|
233
241
|
| `.harness/archive/` | CQO-approved completed missions (immutable) |
|
|
234
242
|
| `.harness/logs/YYYY-MM-DD/` | OPS exception logs |
|
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
html,
|
|
6
6
|
body {
|
|
7
7
|
background:
|
|
8
|
-
radial-gradient(circle at
|
|
9
|
-
radial-gradient(circle at
|
|
10
|
-
|
|
8
|
+
radial-gradient(circle at 16% -8%, rgba(125, 211, 252, 0.24), transparent 30rem),
|
|
9
|
+
radial-gradient(circle at 78% 2%, rgba(216, 180, 254, 0.2), transparent 28rem),
|
|
10
|
+
radial-gradient(circle at 52% 104%, rgba(52, 211, 153, 0.14), transparent 34rem),
|
|
11
|
+
linear-gradient(135deg, #080b13 0%, #101728 48%, #070910 100%);
|
|
11
12
|
color: #e5e7eb;
|
|
12
13
|
}
|
|
13
14
|
|
|
@@ -24,3 +25,34 @@ body {
|
|
|
24
25
|
.scrollbar-hidden::-webkit-scrollbar {
|
|
25
26
|
display: none;
|
|
26
27
|
}
|
|
28
|
+
|
|
29
|
+
.glass-panel {
|
|
30
|
+
border: 1px solid rgba(255, 255, 255, 0.14);
|
|
31
|
+
background:
|
|
32
|
+
linear-gradient(135deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.045)),
|
|
33
|
+
rgba(7, 10, 18, 0.58);
|
|
34
|
+
box-shadow: 0 24px 80px rgba(0, 0, 0, 0.34), inset 0 1px 0 rgba(255, 255, 255, 0.16);
|
|
35
|
+
backdrop-filter: blur(22px) saturate(150%);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.brutal-tile {
|
|
39
|
+
border: 1px solid rgba(255, 255, 255, 0.18);
|
|
40
|
+
background: rgba(3, 7, 18, 0.64);
|
|
41
|
+
box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.34);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.aurora-line {
|
|
45
|
+
background: linear-gradient(90deg, #67e8f9, #c084fc, #f0abfc, #34d399);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.isometric-stage {
|
|
49
|
+
background:
|
|
50
|
+
linear-gradient(30deg, rgba(255, 255, 255, 0.035) 12%, transparent 12.5%, transparent 87%, rgba(255, 255, 255, 0.035) 87.5%, rgba(255, 255, 255, 0.035)),
|
|
51
|
+
linear-gradient(150deg, rgba(255, 255, 255, 0.035) 12%, transparent 12.5%, transparent 87%, rgba(255, 255, 255, 0.035) 87.5%, rgba(255, 255, 255, 0.035)),
|
|
52
|
+
linear-gradient(30deg, rgba(255, 255, 255, 0.035) 12%, transparent 12.5%, transparent 87%, rgba(255, 255, 255, 0.035) 87.5%, rgba(255, 255, 255, 0.035)),
|
|
53
|
+
linear-gradient(150deg, rgba(255, 255, 255, 0.035) 12%, transparent 12.5%, transparent 87%, rgba(255, 255, 255, 0.035) 87.5%, rgba(255, 255, 255, 0.035)),
|
|
54
|
+
linear-gradient(60deg, rgba(103, 232, 249, 0.08) 25%, transparent 25.5%, transparent 75%, rgba(103, 232, 249, 0.08) 75%, rgba(103, 232, 249, 0.08)),
|
|
55
|
+
linear-gradient(60deg, rgba(103, 232, 249, 0.08) 25%, transparent 25.5%, transparent 75%, rgba(103, 232, 249, 0.08) 75%, rgba(103, 232, 249, 0.08));
|
|
56
|
+
background-position: 0 0, 0 0, 20px 35px, 20px 35px, 0 0, 20px 35px;
|
|
57
|
+
background-size: 40px 70px;
|
|
58
|
+
}
|
|
@@ -52,14 +52,14 @@ export function Drawer({ open, tab, title, onClose, onTabChange, children, mode
|
|
|
52
52
|
aria-label="Detail panel"
|
|
53
53
|
data-testid="drawer"
|
|
54
54
|
data-open="true"
|
|
55
|
-
className="h-full min-h-0 rounded-
|
|
55
|
+
className="glass-panel h-full min-h-0 rounded-lg flex flex-col overflow-hidden"
|
|
56
56
|
>
|
|
57
|
-
<header className="flex items-center justify-between border-b border-
|
|
58
|
-
<h2 className="text-sm font-
|
|
57
|
+
<header className="flex items-center justify-between border-b border-white/10 px-4 py-3">
|
|
58
|
+
<h2 className="text-sm font-semibold tracking-tight text-gray-100 truncate">
|
|
59
59
|
{title}
|
|
60
60
|
</h2>
|
|
61
61
|
</header>
|
|
62
|
-
<nav className="flex flex-wrap border-b border-
|
|
62
|
+
<nav className="flex flex-wrap border-b border-white/10 px-2 py-2 text-[11px] font-mono">
|
|
63
63
|
{TABS.map((t) => (
|
|
64
64
|
<button
|
|
65
65
|
key={t.id}
|
|
@@ -67,10 +67,10 @@ export function Drawer({ open, tab, title, onClose, onTabChange, children, mode
|
|
|
67
67
|
data-testid={`drawer-tab-${t.id}`}
|
|
68
68
|
data-active={t.id === tab}
|
|
69
69
|
onClick={() => onTabChange(t.id)}
|
|
70
|
-
className={`min-w-[33%] flex-1 px-2 py-2 transition-colors ${
|
|
70
|
+
className={`min-w-[33%] flex-1 rounded-md px-2 py-2 transition-colors ${
|
|
71
71
|
t.id === tab
|
|
72
|
-
? "bg-
|
|
73
|
-
: "text-gray-500 hover:text-gray-200"
|
|
72
|
+
? "bg-white/12 text-gray-100 shadow-inner"
|
|
73
|
+
: "text-gray-500 hover:bg-white/6 hover:text-gray-200"
|
|
74
74
|
}`}
|
|
75
75
|
>
|
|
76
76
|
{t.label}
|
|
@@ -140,7 +140,7 @@ export function MissionTimeline({
|
|
|
140
140
|
}: Props) {
|
|
141
141
|
if (!missions.length) {
|
|
142
142
|
return (
|
|
143
|
-
<div className="
|
|
143
|
+
<div className="glass-panel rounded-lg px-3 py-4 text-center text-[11px] text-gray-500">
|
|
144
144
|
No missions found in .harness/documents/
|
|
145
145
|
</div>
|
|
146
146
|
);
|
|
@@ -178,10 +178,10 @@ export function MissionTimeline({
|
|
|
178
178
|
key={mission.missionId}
|
|
179
179
|
type="button"
|
|
180
180
|
onClick={() => onMissionClick(mission)}
|
|
181
|
-
className={`w-full rounded
|
|
181
|
+
className={`w-full rounded-lg px-3 py-2.5 text-left transition-colors ${
|
|
182
182
|
isActive
|
|
183
|
-
? "
|
|
184
|
-
: "border-
|
|
183
|
+
? "glass-panel"
|
|
184
|
+
: "border border-white/10 bg-white/[0.035] hover:border-white/20"
|
|
185
185
|
}`}
|
|
186
186
|
>
|
|
187
187
|
<div className="flex items-start justify-between gap-2 mb-1.5">
|
|
@@ -50,7 +50,7 @@ function OrgCard({
|
|
|
50
50
|
<button
|
|
51
51
|
type="button"
|
|
52
52
|
onClick={() => onClick(node)}
|
|
53
|
-
className={`relative rounded-
|
|
53
|
+
className={`brutal-tile relative rounded-md p-3 text-left transition-all cursor-pointer ${roleColor} ${widths[size]} ${active ? "ring-2 ring-cyan-300 border-cyan-300/80" : "hover:border-white/35"}`}
|
|
54
54
|
>
|
|
55
55
|
<StatusDot status={node.status} />
|
|
56
56
|
<div className="font-mono text-[9px] uppercase tracking-[0.2em] text-gray-500 mb-0.5">{node.role}</div>
|
|
@@ -263,7 +263,7 @@ export function OrgTree({ snapshot, activeNodeId, onNodeClick }: OrgTreeProps) {
|
|
|
263
263
|
|
|
264
264
|
return (
|
|
265
265
|
<div className="select-none">
|
|
266
|
-
<div className="flex items-center justify-between border-b border-white/10 bg-
|
|
266
|
+
<div className="flex items-center justify-between border-b border-white/10 bg-white/5 px-3 py-2 backdrop-blur">
|
|
267
267
|
<div className="min-w-0">
|
|
268
268
|
{currentMission && (
|
|
269
269
|
<div className="truncate font-mono text-[10px] text-cyan-300/70">
|
|
@@ -275,7 +275,7 @@ export function OrgTree({ snapshot, activeNodeId, onNodeClick }: OrgTreeProps) {
|
|
|
275
275
|
<button
|
|
276
276
|
type="button"
|
|
277
277
|
onClick={() => setBoundedZoom(zoom - 0.08)}
|
|
278
|
-
className="h-7 w-7 rounded border border-
|
|
278
|
+
className="h-7 w-7 rounded-md border border-white/15 bg-black/35 font-mono text-xs text-gray-200 hover:border-cyan-300/60"
|
|
279
279
|
title="Zoom out"
|
|
280
280
|
>
|
|
281
281
|
-
|
|
@@ -283,7 +283,7 @@ export function OrgTree({ snapshot, activeNodeId, onNodeClick }: OrgTreeProps) {
|
|
|
283
283
|
<button
|
|
284
284
|
type="button"
|
|
285
285
|
onClick={() => setBoundedZoom(defaultZoom)}
|
|
286
|
-
className="h-7 min-w-12 rounded border border-
|
|
286
|
+
className="h-7 min-w-12 rounded-md border border-white/15 bg-black/35 px-2 font-mono text-[10px] text-gray-300 hover:border-cyan-300/60"
|
|
287
287
|
title="Reset zoom"
|
|
288
288
|
>
|
|
289
289
|
{Math.round(zoom * 100)}%
|
|
@@ -291,7 +291,7 @@ export function OrgTree({ snapshot, activeNodeId, onNodeClick }: OrgTreeProps) {
|
|
|
291
291
|
<button
|
|
292
292
|
type="button"
|
|
293
293
|
onClick={() => setBoundedZoom(zoom + 0.08)}
|
|
294
|
-
className="h-7 w-7 rounded border border-
|
|
294
|
+
className="h-7 w-7 rounded-md border border-white/15 bg-black/35 font-mono text-xs text-gray-200 hover:border-cyan-300/60"
|
|
295
295
|
title="Zoom in"
|
|
296
296
|
>
|
|
297
297
|
+
|
|
@@ -306,7 +306,7 @@ export function OrgTree({ snapshot, activeNodeId, onNodeClick }: OrgTreeProps) {
|
|
|
306
306
|
onPointerMove={handlePointerMove}
|
|
307
307
|
onPointerUp={endDrag}
|
|
308
308
|
onPointerCancel={endDrag}
|
|
309
|
-
className="scrollbar-hidden h-[390px] cursor-grab overflow-auto active:cursor-grabbing"
|
|
309
|
+
className="scrollbar-hidden isometric-stage h-[390px] cursor-grab overflow-auto active:cursor-grabbing"
|
|
310
310
|
>
|
|
311
311
|
<div
|
|
312
312
|
className="relative"
|
|
@@ -417,7 +417,7 @@ export function OrgTree({ snapshot, activeNodeId, onNodeClick }: OrgTreeProps) {
|
|
|
417
417
|
agentIds: [],
|
|
418
418
|
})
|
|
419
419
|
}
|
|
420
|
-
className={`relative rounded
|
|
420
|
+
className={`brutal-tile relative rounded-md px-2 py-1.5 text-left min-w-[130px] max-w-[160px] transition-all hover:border-white/25 ${
|
|
421
421
|
workerActive
|
|
422
422
|
? "border-cyan-300/70 bg-cyan-400/10 shadow-[0_0_18px_rgba(34,211,238,0.18)]"
|
|
423
423
|
: "border-gray-700/40 bg-gray-800/30"
|