Skip to content

feat(bash)!: simplify the async tool surface - #19

Open
unrelentingfox wants to merge 2 commits into
mainfrom
feat/fold-bash-async-into-bash
Open

unrelentingfox wants to merge 2 commits into
mainfrom
feat/fold-bash-async-into-bash

Conversation

@unrelentingfox

@unrelentingfox unrelentingfox commented Sep 21, 2026 •

Copy link
Copy Markdown
Owner

What

Reduces the extension to two tools: bash and bash_async.

  • bash — the shadowed Bash tool. Foreground by default; run_async: true starts detached work; description labels the job; notify: false suppresses the terminal notification for run_async starts. timeout applies to the foreground path (auto-background, or kill when not auto-background-eligible) and is ignored with run_async.
  • bash_async — job management, renamed from bash_async_list: list, output, kill, attach, search, cleanup, stats.

All shell execution now goes through the bash tool name that pi-permission-system inspects.

Removed

Removed Replacement
bash_async (start tool) bash with run_async: true
bash_async_list renamed to bash_async
bash_async_watch removed
bash_async_decide removed
async decision-timeout flow removed
streaming watch (monitor* modules) removed

The dead machinery those tools left behind is deleted too: Job.kind, Job.stop, the job-id kind prefixes, the split-stderr errPath path, EVENT.monitorEvent, the MONITOR_* constants, the monitor/kind render and notify branches, and the now-unreachable notification overrides.

Breaking changes

  • The start tool bash_async is gone. Start async work with bash and run_async: true.
  • bash_async_list, bash_async_watch, and bash_async_decide are gone. bash_async now names the job-management tool.
  • timeout no longer applies to asynchronous jobs.

Slash commands

/bash-async and /bash-async-list are unchanged.

Validation

pnpm run check: 191 tests pass, 0 fail, tsc --noEmit clean, package payload verified.

Remove the separate bash_async tool so every shell command runs
through the permission-checked bash tool name. Start async work
with bash and run_async=true; the name parameter becomes
description. notify suppresses the terminal notification for
run_async starts only, while a command backgrounded from the
foreground always notifies. With run_async, timeout is the decision
timeout resolved by bash_async_decide; foreground timeout still
auto-backgrounds. Delete the unused async call renderer.
Reduce the tool surface to bash and bash_async.

Remove the bash_async decide and watch tools plus the async
decision-timeout flow, so bash timeout is foreground-only and is
ignored with run_async=true. Rename the job-management tool
bash_async_list to bash_async, and drop the machinery the removed
tools left behind.

Start async work with bash and run_async=true.
@unrelentingfox unrelentingfox changed the title feat(bash)!: fold bash_async into bash tool feat(bash)!: simplify the async tool surface Sep 21, 2026
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