- add OPERATIONS table to conductor.agent.md (init, doctor, onboard,
index, memory, telemetry, design, plan, build, verify, integrate,
fast-track) so the conductor agent runs any named operation directly
instead of only the full pipeline
- thin every skill file to a one-line pointer into conductor's
OPERATIONS table, removing duplicated procedure text (contributor
rule: no duplicated behavior in prompts/skills)
- document the operations table in README.md and AGENTS.md
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot CLI has no ask_user/elicitation tool for custom agents (confirmed
via docs: only execute/read/edit/search/agent/web/todo aliases exist).
The only way to get a live human reply is ending the agent's own turn
with plain text and waiting for the next user message. Conductor was
dumping every design question as one big numbered markdown block in a
single turn, which reads as a form, not a conversation.
Now conductor asks exactly one question per turn (plain text, numbered
candidate answers, one Recommended + Why, an Other: option, a Required
flag), ends its turn, waits for the real reply, then asks the next one.
Decisions are only persisted to decisions.md after the last question is
answered.
Enforce single-entry-point: only conductor is user-invocable now.
architect and reviewer remain fully functional but are only reachable
as subagents that conductor delegates to internally, matching the
same internal-only treatment already given to scout/splitter/builder/
verifier/integrator/scribe.
Confirmed via official Copilot CLI docs: there is no ask_user/elicitation
tool available to custom agents (only execute/read/edit/search/agent/web/
todo aliases exist). Subagent calls made through the 'agent' tool are
stateless — they run to completion and return one final result, with no
mechanism to pause mid-task for a live human reply.
This means conductor invoking interrogator via the agent tool could never
work: interrogator would run as a subagent regardless of whether conductor
itself was foreground or backgrounded, and subagents can't get real user
answers. That's why it was silently writing fabricated decisions.md/
questionnaire.md content instead of actually asking anything.
Fix: delete the interrogator agent entirely and fold its full Q&A
procedure directly into conductor's own DESIGN PHASE, run inline in
conductor's own foreground turn — never delegated. Updated the design
skill/prompt, AGENTS.md, README, QUICKSTART, and role-tier config to
match. Single entry point, no subagent path for anything that needs a
live human answer.
Every agent's PROCEDURE/OUTPUTS referenced lh subcommands vaguely (e.g.
'Run lh run event', 'lh memory get --shard failures'), forcing models to
guess flags at runtime instead of following the profile. Two real bugs
found this way:
- 'lh memory get --shard X' silently ignores --shard (it's a positional
arg on get, not a flag) and returns the whole INDEX.md instead of the
targeted shard. Fixed to 'lh memory get X' everywhere.
- lh run event/lane create calls had no required --type/--status/--id/
--kind/--scope documented, so agents had to trial-and-error discover
them. Added full, exact invocation syntax inline for every command
each agent actually issues (run event, lane create, memory get/put,
host --strategy, graph).
- All agent profiles used the misspelled 'user-invokable' property, which
Copilot CLI silently ignores, so internal-only agents (scout, splitter,
builder, verifier, integrator, scribe) were never actually hidden from
the /agent picker. Renamed to the documented 'user-invocable'.
- conductor/architect instructions said only 'Run lh run event' with no
flags, forcing the model to trial-and-error discover --type/--status/
etc. Documented the exact lh run start/event/end CLI syntax inline.
conductor previously jumped straight to lh host, which succeeds even
without .agents/harness.config.json, then silently hit a hard failure
later reading .agents/memory/INDEX.md (lh doctor confirms: config not
initialised). New projects had no automatic recovery path — lh init
was documented as a manual step users had to remember.
- conductor now runs lh doctor first; if config is missing it runs
lh init --yes (non-interactive defaults) and re-checks, before lh host
- still stops and reports the exact failing check if lh doctor finds
something it can't self-heal (e.g. no verify commands configured)
- README/QUICKSTART updated: lh init/lh doctor documented as optional
manual pre-flight, not a required step, since conductor self-heals
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Parallel fleet audit (2 background agents) + direct work:
- src/commands/memory.mjs: `memory put --allow-secrets` was read as
`flags.allowSecrets` (camelCase) but the CLI parser only emits
kebab-case keys, so the flag was always undefined/false. Fixed to
`flags['allow-secrets']`.
- Docs: `lh graph --brief` was referenced 14x across 5 agent.md files,
harness.instructions.md, 4 SKILL.md files, onboard.prompt.md, and
README, but `lh graph` has no --brief flag (terse output is already
the default, --json/--severity are the only flags). Corrected every
reference to match actual CLI surface.
- .github/workflows/ci.yml: run npm install/validate/test on node 20+22.
- Self-dogfooded `lh init --yes` in this repo, producing .agents/
(harness.config.json, architecture.md, conventions.md, memory
shards). `lh doctor` now reports all required checks green.
- Deduped .gitignore harness block against init's auto-managed block.
Verified: 53/53 tests pass, validate 0 errors, doctor all-green.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Recovered from crashed session (Node OOM). Repo contains full P0-P6
scaffold: plugin.json/marketplace.json, AGENTS.md, ADRs 0001-0006,
lh CLI (init/index/graph/lane/run/memory/host/report/doctor), 10
.github/agents, 12 CLI skills, instructions, context7 mcp.json, and
unit/e2e test suite.
Fixed: run.mjs read --in-tokens/--out-tokens but tests and CLI docs
use --input-tokens/--output-tokens, so telemetry totals were always 0.
Now accepts both forms.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>