Context and Problem Statement
Spec Kitty commands currently mix interactive prompts with CLI flags. This makes automation fragile and causes failures in non-TTY environments (CI, scripted tests, headless containers). We need a consistent rule that every command can be fully driven by CLI arguments without requiring interactive input, while still allowing interactive UX when available.
Decision Drivers
- CI/CD and automated testing must be reliable and deterministic.
- Non-TTY environments cannot use keypress-based menus.
- Agents and scripts should not need to simulate interactive input.
- Interactive UX is still valuable for humans at the terminal.
- Command behavior should be explicit, discoverable, and documented.
Considered Options
- Option 1: CLI-first for all commands with optional interactive mode
- Option 2: Interactive-first with partial CLI overrides
- Option 3: Separate interactive and non-interactive command variants
Decision Outcome
Chosen option: "Option 1: CLI-first for all commands with optional interactive mode", because it guarantees automation compatibility while preserving interactive UX. Every command must be fully operable via flags/env without prompting.
Consequences
Positive
- All commands become scriptable and CI-friendly.
- Automated tests avoid brittle input mocking.
- CLI help becomes a complete contract for command behavior.
- Interactive UX remains available for manual use.
Negative
- More flags/options to maintain and document.
- Additional validation logic to reconcile interactive vs non-interactive paths.
Neutral
- Interactive prompts are treated as a convenience layer over CLI defaults.
- Non-interactive mode may require explicit flags for safety.
Confirmation
We will validate this decision by:
- Ensuring every command has a complete CLI path with no required prompts.
- Maintaining CI tests that run commands in non-interactive mode.
- Auditing new commands for CLI completeness during review.
Pros and Cons of the Options
Option 1: CLI-first with optional interactive mode
Pros:
- Works in CI and automation by default
- Clear, testable command contract
- Keeps interactive UX for humans
Cons:
- Requires more flags and documentation
- Slightly more implementation complexity
Option 2: Interactive-first with partial CLI overrides
Pros:
- Simpler UX for manual use
- Fewer flags to define initially
Cons:
- Automation remains brittle
- Non-TTY environments fail without workarounds
- Inconsistent behavior across environments
Option 3: Separate interactive and non-interactive commands
Pros:
- Clear separation of concerns
- Simpler validation within each mode
Cons:
- Duplicated commands and help text
- Users must learn two interfaces
- Increased maintenance surface
More Information
- Related implementation:
src/specify_cli/cli/commands/init.py(non-interactive support) - Docs:
docs/how-to/non-interactive-init.md