Merges feature/platform-specific-structured-interaction which adds:
- Per-IDE template variants (claude, opencode, gemini, kiro, etc.)
- Explicit {interaction_style} session variable lookup in all RULE directives
- Fallback default to structured mode when variable is undetermined
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Change all 34 RULE directives from bare "When interaction_style is"
to explicit "Check your stored {interaction_style} session variable
from activation step 2" with a fallback default to structured mode.
Addresses cynical review finding that LLMs struggle with implicit
natural-language conditionals and need explicit variable lookup
instructions plus failure mode handling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Standardize all 27 template RULE lines to use "EVERY question"
phrasing. The free-form escape clause prevents over-restriction
while EVERY strengthens the default structured behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace emphatic "EVERY...MUST...Do NOT...No exceptions" phrasing with
clearer natural language that includes an explicit free-form override.
Research shows single clear sentences with conditional logic outperform
stacked absolute directives for LLM compliance.
New wording: "questions to the user MUST use structured options with a
numbered list unless the workflow or user explicitly requests free-form
input."
Also extracts RULE from step 4 in gemini-task.toml to standalone.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace Claude-specific AskUserQuestion in default-* templates with generic
numbered-list wording since these are universal fallbacks for all IDEs
- Fix hardcoded _bmad paths to use {{bmadFolderName}} in antigravity, rovodev,
trae, windsurf-workflow, and default-agent templates
- Extract RULE from numbered steps to standalone directive in gemini and
opencode workflow/tool templates
- Standardize RULE wording: add "Do NOT ask open-ended inline questions" to
all templates missing it for consistency
- Move RULE before execution instructions in default-task and rovodev templates
- Add {document_output_language} to activation-steps session variables
- Add interaction_style confirmation to gemini-agent preflight checklist
- Document all config settings including interaction_style in install guide
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Isolated test branch with just IDE template rules and module.yaml config.
No core agent-component or workflow.xml changes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a new `interaction_style` config option (structured/open) to core
module.yaml so users can choose how agents ask questions. When set to
"structured" (default), agents present numbered option lists and wait
for selection. When "open", agents ask questions naturally.
Changes:
- src/core/module.yaml: new interaction_style config with single-select
- activation-rules.txt: conditional rule based on {interaction_style}
- activation-steps.txt: include {interaction_style} in stored variables
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(opencode): use mode: all in agent template, remove name frontmatter, fix directory names
- Replace name: '{{name}}' with mode: all in opencode-agent.md
mode: all enables both Tab-key agent switching in the TUI and @subagent
invocation via the Task tool (mode: primary blocked subagent use)
- Remove name: '{{name}}' from opencode-task/tool/workflow/workflow-yaml templates
OpenCode derives command name from filename, not from a name frontmatter field;
the bare {{name}} value was overriding the bmad- prefixed filename causing
name collisions with built-in OpenCode commands (fixes#1762)
- Fix deprecated singular directory names in platform-codes.yaml:
.opencode/agent -> .opencode/agents, .opencode/command -> .opencode/commands
- Add legacy_targets migration: cleanup() now removes stale bmad-* files from
old singular directories on reinstall so existing users don't get duplicates
- Fix removeEmptyParents to continue walking up to parent when starting dir is
already absent instead of breaking early
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(opencode): address code review findings for cleanup and schema docs
- Add project boundary guard to removeEmptyParents() using path.resolve
and startsWith check to prevent traversal outside projectDir (Augment)
- Fix JSDoc: "Recursively remove" -> "Walk up ancestor directories"
- Add user-visible migration log message when processing legacy_targets
- Document legacy_targets field in Installer Config Schema comment block
in platform-codes.yaml (CodeRabbit + Augment)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix(opencode): improve removeEmptyParents error handling and loop clarity
- Distinguish recoverable errors (ENOTEMPTY, ENOENT) from fatal errors in
removeEmptyParents() catch block — skip level and continue upward on
TOCTOU races or concurrent removal, break only on fatal errors (EACCES)
- Add comment clarifying loop invariant for missing-path continue branch
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Brian <bmadcode@gmail.com>
Remove hallucinated mode: primary from opencode-agent template - OpenCode
defaults to mode: all and mode: primary does not enable Tab-switching as
the original PR #1556 claimed. Restore the name frontmatter field across
all OpenCode templates to match the standard pattern used by other IDEs.