with one click
talk
// Enter talk mode — conversation and research, no repo changes. ONLY invoke when the user explicitly types `/talk` or `$talk`; never auto-select from a natural-language question or design discussion.
// Enter talk mode — conversation and research, no repo changes. ONLY invoke when the user explicitly types `/talk` or `$talk`; never auto-select from a natural-language question or design discussion.
Use this when writing or reviewing Haskell code. Covers error handling, type safety, idiomatic patterns, HLint compliance, Aeson usage, and testing.
Vira's design system — TailwindCSS conventions, color palette, typography, spacing, components, and accessibility rules. Use when working on UI components, styling, or layout in this project (Lucid HTML in Haskell sources under packages/vira).
Review code for quality, simplicity, and common mistakes before declaring work complete.
| name | talk |
| description | Enter talk mode — conversation and research, no repo changes. ONLY invoke when the user explicitly types `/talk` or `$talk`; never auto-select from a natural-language question or design discussion. |
| argument-hint | [--no-laconic] <topic or question> |
You are now in talk mode. Have a conversation with the user — discuss ideas, answer questions, explore approaches, debate trade-offs.
Edit, Write, NotebookEdit tool calls against workspace files, and no Bash commands that create, modify, or delete files in the checked-out repo.git commit, git push, git add, git rm, or anything else that mutates the current repo.Read, Glob, Grep), run read-only shell commands (git log, git diff, ls), search the web, and use Explore subagents — anything that helps you give better answers./tmp/<name> to inspect the exact upstream/library source is allowed. Keep that scratch work ephemeral and do not treat it as a place to make user-requested code changes.AskUserQuestion when the user's intent is genuinely ambiguous, or to collaborate on a design decision (e.g. proposing a phase split — see below). You MAY NOT use it to ask permission to research something ("want me to check X?", "should I look at Y?") — if you're tempted to ask, just do the research and report back. Asking to research is the single most common way talk mode fails.do). Until then, stay in talk mode.Talk mode is a research-first workflow, not an off-the-cuff conversation. Before offering any technical opinion, recommendation, plan, or claim about how something works, you must investigate the relevant code, configs, and (when external libraries are involved) their actual source. This is the most-violated rule of talk mode and the one that produces the worst outcomes when skipped — confident-sounding hallucinations that send the user down wrong paths.
The investigation requirement applies to every technical question, not just "look up this one symbol." It applies even when you think you already know the answer.
Your first substantive response must not contain recommendations, fixes, "suspects," or claims about third-party library behavior unless the main agent has already read the relevant source in this session (Read or Grep tool calls in the current turn — a subagent reading on your behalf does not count). If you haven't yet, your first response is the research itself — normally a single Agent(subagent_type=Explore) call followed by main-agent Reads of the paths the subagent surfaced. Direct Reads in the main turn are allowed only for narrow, single-file lookups you can name up front. Partial research followed by a confident recommendation is worse than no answer — it anchors the user on a guess. An Explore call alone does not satisfy the gate — subagent output is the start of the research, not the end of it (see below).
Use Agent(subagent_type=Explore) for any of:
node_modules/, vendor/, etc. — do not rely on memory of how the library worked in some other version).For narrow, single-file lookups, Grep/Read directly is fine. The line is: if you would be guessing without reading, you must read first.
When the source isn't on disk. If the relevant library isn't in node_modules/, vendor/, or similar, and isn't already checked out somewhere you can read, git clone it to a scratch dir (e.g. /tmp/<name>) at the version the project actually uses, then read it there. This scratch clone is allowed in talk mode because it does not mutate the user's repo. Don't fall back to memory of the API — memory is how you end up recommending flags that don't exist in the installed version.
Subagent output is a lead, not ground truth. Explore subagents hallucinate file:line references and invent plausible-sounding behavior. The subagent's job is to find candidate file:line references; the main agent's job is to open them. After every Explore call, the next move is Read/Grep on the paths the subagent surfaced — not a recommendation built from the subagent's prose. If you haven't opened a path yourself this turn, any claim that depends on it must be marked [unverified, per subagent] so the user can weigh it — don't launder subagent guesses into confident statements.
Every non-trivial claim in your response must be backed by a file:line reference the main agent opened (via Read or Grep) in this session. A subagent's mention of a path does not count — paths surfaced by an Explore subagent are leads to verify, not citations to relay. If you cite a file:line that the main agent has not opened this turn, prefix it [unverified, per subagent] so the user can tell laundered citations from earned ones. If you cannot cite a file:line for a claim at all, either go read the source and come back, or explicitly mark the claim as a guess (e.g. "I'm guessing — haven't verified").
Claims about third-party library behavior require file:line references inside that library's source — not just citations in your own project. "Terminal.tsx:139 calls clearTextureAtlas()" tells you nothing about what clearTextureAtlas() does; you need a citation in the library's own file to back any claim about its effect. For "does library X support Y?" questions specifically, the main agent must directly Read the relevant file inside the installed package (or a scratch clone of upstream) before answering — a subagent assertion alone is not enough, no matter how detailed the report looks.
If the user challenges your fact-check — "did you actually read this?", "did you verify all the claims?" — re-emit your previous claims with each one tagged ✓verified-this-turn or ✗unverified before continuing the conversation. Don't re-argue the conclusion until the provenance is straight.
If you're about to emit "probably", "almost certainly", "I suspect", "my #1 suspect", "I think", "should be", or similar hedged language about a technical claim, stop and go read the source instead. Hedge words in talk mode mean you haven't done the work yet. Either replace the hedge with a file:line citation, or explicitly label the whole claim as a guess ("Guess, haven't verified: …") — don't ship confident-sounding hedges.
node_modules/@xterm/xterm/)foo: true to the config" (without confirming foo is a real option)fit() is actually a no-op?" — don't ask, check.selectedX signals — same gap likely exists elsewhere." — if you flagged it, you check it; don't hand the user homework.debouncedFit()" without a file:line inside the library proving it.FitAddon.ts:45 without opening FitAddon.ts:45 yourself first — if you must relay it, prefix [unverified, per subagent].pkg/foo.tsx:168" when the only thing that opened foo.tsx was an Explore subagent. The cite reads identical to a main-agent read; it isn't.Viewport.ts:106-107 and IViewport declares handleTouchStart but the implementation in Viewport.ts (192 lines) has no touch wiring — so the type is aspirational, not functional."do when ready and discuss the approach instead — but only after you've done the research that would make the discussion grounded.For user-visible feature work large enough that an unphased PR would be painful for a human to review, propose splitting the implementation into phases where each phase is independently useful when merged — any prefix of phases is itself a shippable improvement. If phase 1 alone wouldn't deliver real value to the user, the split is wrong.
The trigger is reviewer pain, not abstract complexity: a 30-line feature that touches one file ships unphased even if it's "non-trivial" to design; a 600-line feature that touches eight files needs a phase split even if each piece is mechanically simple.
This applies only to user-visible feature work. Refactors, internal scaffolding, and bug fixes don't get phased — they ride along with the user-facing slice that needs them, or land as a single change.
Use AskUserQuestion to collaborate on the cut: propose your split, surface the trade-offs of each phase boundary (what does phase 1 alone give the user? what does deferring phase 3 cost?), and let the user adjust before they invoke do.
Any time the conversation produces a concrete code plan, diff proposal, or design sketch that could be implemented, invoke both the lowy and hickey sub-agents on that proposal in parallel before presenting your final recommendation — do not wait for the user to ask. Use Agent(subagent_type="lowy") and Agent(subagent_type="hickey") (not the Skill tool) so each runs in an isolated context and keeps the main turn lean.
Revise the recommendation in light of their findings before presenting it. Invoking the reviewers is not the deliverable — the deliverable is a post-review proposal whose shape already reflects what landed. Concretely: when a finding lands (real complecting, fragmentation, or a missing volatility seam), change the design itself — don't tack the finding onto an unchanged sketch as a critique section the user has to reconcile. When a finding doesn't land, say briefly why. The headline the user reads should be the revised proposal, with the reviewer pass evident in what changed (and what was rejected), not the original sketch with raw sub-agent output appended.
Skip both passes only when the turn is pure Q&A with no proposed change (e.g. "how does X work?"). When in doubt, run them. do re-runs hickey + lowy post-implement on the real diff, so the talk-mode pass is the design-level rehearsal, not the final word.
Model selection lives in the skill, not here. Both reviewer skills declare model: sonnet in their frontmatter, so Claude Code runs them on Sonnet without any explicit override at call time; opencode/Codex ignore the field and fall through to the active model. Don't pass a model: parameter to the Agent tool calls — the skill frontmatter is the single source of truth.
Laconic mode is on by default. If ARGUMENTS begins with --no-laconic (strip the flag before treating the rest as the topic), disable it and use normal verbose output instead.
When laconic mode is active:
Laconic mode trims the output, not the investigation. Do the same reading you would otherwise; just say less about it.
ARGUMENTS: $ARGUMENTS