ask
CommandAsk a single expert agent a question - like a Slack ping to a colleague
Cross-project hub on Orca - see every project's orchestrators, ask a stopped one read-only, wake one for gated work (Orca addon)
> /plugin marketplace add restarter/lets-workflow> /plugin install lets@lets-workflow
description: Cross-project hub on Orca - see every project's orchestrators, ask a stopped one read-only, wake one for gated work (Orca addon) argument-hint: "[project or orchestrator] [question]"
One session that looks across the projects Orca knows: which orchestrators exist, which are alive, a read-only answer from a stopped one, or waking one in a visible Orca terminal when the work needs a human at its gates. An Orca addon: it runs only with `LETS_LAUNCHER=orca`.
> **IMPORTANT:** If the spec below invokes any deferred tool (e.g. `AskUserQuestion`), you MUST load and call it as specified. Never skip the call, never substitute a default answer of your own — the tool invocation is part of the contract. This is critical.
[ "{LETS_LAUNCHER}" = "orca" ] || echo HUB_NEEDS_ORCA`HUB_NEEDS_ORCA` -> print one line `/lets:hub is an Orca addon - pick the Orca launcher in /lets:init (LETS_LAUNCHER=orca)` and stop. Otherwise:
lets orca status --json
Not running (`status.running=false` or a `reason`) -> `orca_unavailable` plus the reason; stop.
lets peers who --orca-repos --json
Go validates every repo Orca lists and tags each row with `repo_index`; later calls pass `--repo-index <n>`, never a path. A project's orchestrators are the names recorded in its merge-branch task-state, and only when none of them is live the `<repo>-orc[-<scope>]` convention. Render one row per orchestrator - live ones from `peers[]`, stopped ones from `last_orchestrators[]`:
| project (`repos[index].name`) | orchestrator | scope | alive | last seen |
Name every `degraded[]` entry in one line each. A project with several orchestrators lists each.
Pick the target: the orchestrator the user named; else, when the project has several:
AskUserQuestion(
questions=[{
question: "Which orchestrator of {project}?",
header: "Orchestrator",
options: [ /* up to 3: label = name, description = "{scope} - {alive | stopped}" */ ],
multiSelect: false
}]
)Classify the request, and when unsure treat it as gated. Every message to a live orchestrator goes by its NAME from this run's listing, with `via=hub`: the orc skill sends outside the hub's own repo only to a row this hub run printed. A row marked `duplicate_name` cannot be addressed by name - say so and stop for it.
| request | target alive | target stopped | |---|---|---| | read-only (status, backlog, "what is X doing") | `Skill(skill: "lets:orc", args: "target=\"<name>\" via=hub verb=ask footer=none text=<question>")` | Step 4 ask-ro | | gated (tracker write, commit, PR, anything else) | `Skill(skill: "lets:orc", args: "target=\"<name>\" via=hub verb=tell footer=none text=<request>")` | wake, then the same tell |
Wake (stopped target, gated request), with the session and pid from its `last_orchestrators[]` row:
lets orca wake --repo-index <n> --session '<session>' --pid <pid> --title '<name>' --json
`woken=true` -> the tell above to that row's name (a resume keeps the session and its name), then tell the user the gates are pressed in `<name>`'s Orca terminal. `main_alive` -> it is running after all: use the alive column. `liveness_unknown` from wake or ask-ro -> say so and stop for that project; never retry around it.
1. Write the question with the Write tool to `.lets/cache/ask-ro-<session6>.txt` (`<session6>` = the first 6 chars of the row's `session`). 2. `lets peers ask-ro --repo-index <n> --session '<session>' --pid <pid> --question-file .lets/cache/ask-ro-<session6>.txt --json` (Go reads the file once and removes it). 3. `answered=true` -> relay `answer` whole, marked as that orchestrator's words from a read-only fork. `headless_readonly_unenforceable` -> this `claude` cannot narrow a headless run; say so, offer wake instead. Any other `reason` -> name it.
Close: one prose line - what was relayed, which orchestrator was woken and is waiting on its human gate, or nothing after the listing.
A development workflow plugin for Claude Code Stop babysitting your AI. Start shipping with it.
Ask a single expert agent a question - like a Slack ping to a colleague
Backlog review and cleanup - multi-agent backlog review, quick no-agent pulse (--fast), or interactive triage cleanup
Quick sanity check - code (inline 6-perspective) or plan (--plan).
End a work session - a settlement pass that reconciles uncommitted / unpushed work + session context into git, the tracker, and a…
Execute implementation plan from /lets:plan - inline in native plan mode, or delegated to named implementer subagents you review…
Implement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.