Skip to content

feat!: require session names and rework wait, send, and kill flags#11

Merged
kylecarbs merged 1 commit into
mainfrom
cli-refinements
Jun 10, 2026
Merged

feat!: require session names and rework wait, send, and kill flags#11
kylecarbs merged 1 commit into
mainfrom
cli-refinements

Conversation

@kylecarbs

Copy link
Copy Markdown
Member

Summary

Breaking CLI refinements based on usage feedback:

  • wait flags reworked: --idle is now a plain flag that fires once output has settled for 2 seconds. --text <t> replaces --for <t>. --timeout <dur> is the only flag that takes a duration.
  • send syntax reworked: the session name is now positional (boo send <name> --text <t>), text moved behind --text, and -s is removed. --key, --enter, and --stdin are unchanged; stdin remains the default when neither --text nor --key is given.
  • Session names are required everywhere: attach, send, peek, wait, and kill now exit 2 with usage when no name is given. Most-recent-session fallback is removed; unambiguous prefix matching is kept.
  • exorcise removed: boo kill --all is the only end-everything path and prints the names it kills.
  • Duration parsing: accepts ms, s, m, h/hr, and d units (e.g. --timeout=4h, --timeout=10d), with overflow rejected.

Both --flag value and --flag=value spellings are supported for all value-taking flags.

Testing

  • zig build test-all --summary all: 67/67 pass (Debug and ReleaseSafe)
  • zig fmt --check build.zig build.zig.zon src test: clean
  • Manual smoke: new send/wait syntax, --text=/--timeout= forms, bare attach/kill/peek/wait exit 2, removed exorcise exits 2, kill --all, 10d/4hr durations parse, 9x rejected.
Decision log
  • Idle threshold fixed at 2s (idle_settle_ms const in main.zig): a flag-with-value would reintroduce the duration ambiguity the rework removes; 2s matches the agent polling loop in the docs.
  • flagValue helper: one parser supports both --flag value and --flag=value so all commands behave identically.
  • Prefix matching kept: requiring names everywhere makes typing full names common, and unambiguous prefixes (exit 3 on ambiguity) keep that cheap without the magic of most-recent fallback.
  • pickMostRecent and the Pick enum deleted rather than parked: no remaining callers, and kill --all covers the bulk-cleanup use case exorcise served.

Generated with Coder Agents on behalf of @kylecarbs.

CLI surface changes from dogfooding feedback:

- wait: --idle is now a plain flag (fires after 2s of quiet) and
  --text replaces --for, so --timeout is the only duration. Durations
  accept h, hr, and d units, and value flags accept --flag=value.
- send: the session is a positional argument and text moves behind
  --text: 'boo send build --text make --enter'. The -s flag is gone.
- Session names are required everywhere: the implicit only-session
  and most-recently-active fallbacks are removed, along with the
  unused pick-most-recent machinery.
- exorcise is removed; 'boo kill --all' is the one way to end every
  session.

Bump version to 0.4.0.
@kylecarbs kylecarbs merged commit 9c7fe12 into main Jun 10, 2026
4 checks passed
@kylecarbs kylecarbs deleted the cli-refinements branch June 10, 2026 17:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant