What happened
As of Claude Code 2.1.198, subagents run in the background by default. From the subagents doc:
Claude runs a subagent in the foreground when it needs the result before continuing. Background
subagents run with a smaller built-in tool set than foreground subagents […]
vine-verification is a gate, not a background researcher. It declares tools: Read, Glob, Grep, Bash and needs Bash to run lint, typecheck, and tests. Every caller consumes its report
immediately:
navigate step 4a — "If validation fails, fix the issues within the same slice"
pair → Validate — "Fix any issues before moving to the commit step"
evolve → Cross-Slice Integration Check
navigate phase-group verification — "When the report comes back…"
Yet nothing in the shipped content says the result is required before proceeding. A grep across
plugins/vine/agents/ and every calling skill turns up zero foreground/background handling. The
agent's own contract already assumes foreground — vine-verification.md:112 says "The engineer is
waiting" — but nothing enforces it.
What you expected
The validation gate runs in the foreground with its full declared tool set, or fails loudly. A
tool-starved verification pass that returns a clean report is the worst available outcome: it
looks like a green gate.
Steps to reproduce
- Phase:
vine:navigate (also vine:pair, vine:evolve)
- What you were doing: completing a slice's code changes, reaching the validate step
- What went wrong: the delegation carries no foreground requirement. Claude usually foregrounds
when it needs a result, so this is latent rather than constant — but it's unguarded, and the
failure is silent when it fires.
Environment
- VINE installation: plugin 0.5.0
- Claude Code version: 2.1.198+ (behavior changed at that version)
- Project type: any
Notes
Candidate fixes, probably both:
- State the requirement in
plugins/vine/agents/vine-verification.md — this agent is a gate, it
runs in the foreground, Bash is required not optional.
- Make each delegation site say the report is needed before the next step, so the "needs the
result before continuing" heuristic has something concrete to match.
Frontmatter background is documented for subagents only as "set to true to always run in the
background" — worth confirming empirically whether background: false is honored on a subagent
before relying on it, rather than assuming symmetry with the skills field.
vine-codebase-explorer is the opposite case and should be looked at in the same pass: verify
explicitly wants it researching while the conversation continues, so background is correct there.
inquire consumes its result directly, so that call site isn't.
What happened
As of Claude Code 2.1.198, subagents run in the background by default. From the subagents doc:
vine-verificationis a gate, not a background researcher. It declarestools: Read, Glob, Grep, Bashand needsBashto run lint, typecheck, and tests. Every caller consumes its reportimmediately:
navigatestep 4a — "If validation fails, fix the issues within the same slice"pair→ Validate — "Fix any issues before moving to the commit step"evolve→ Cross-Slice Integration Checknavigatephase-group verification — "When the report comes back…"Yet nothing in the shipped content says the result is required before proceeding. A grep across
plugins/vine/agents/and every calling skill turns up zero foreground/background handling. Theagent's own contract already assumes foreground —
vine-verification.md:112says "The engineer iswaiting" — but nothing enforces it.
What you expected
The validation gate runs in the foreground with its full declared tool set, or fails loudly. A
tool-starved verification pass that returns a clean report is the worst available outcome: it
looks like a green gate.
Steps to reproduce
vine:navigate(alsovine:pair,vine:evolve)when it needs a result, so this is latent rather than constant — but it's unguarded, and the
failure is silent when it fires.
Environment
Notes
Candidate fixes, probably both:
plugins/vine/agents/vine-verification.md— this agent is a gate, itruns in the foreground,
Bashis required not optional.result before continuing" heuristic has something concrete to match.
Frontmatter
backgroundis documented for subagents only as "set totrueto always run in thebackground" — worth confirming empirically whether
background: falseis honored on a subagentbefore relying on it, rather than assuming symmetry with the skills field.
vine-codebase-exploreris the opposite case and should be looked at in the same pass:verifyexplicitly wants it researching while the conversation continues, so background is correct there.
inquireconsumes its result directly, so that call site isn't.