No Block
Run finite Bash jobs without blocking Pi while they finish.
No Block replaces Pi's Bash tool for commands that must return an exit code. Quick commands return normally. A slow command yields after 30 seconds, remains supervised, and reports its terminal result when it exits.
No Block builds on aliou/pi-processes. It retains the process panel, bounded logs, process-group cleanup, stdin support, and log watches from that project.
Choose the correct process lane
| Command type | Use |
|---|---|
| Tests, checks, migrations, exports, archives, and other finite jobs | No Block bash |
| Dev servers, watchers, local APIs, tunnels, port forwards, and log tails | A service process manager such as whiskd |
| Docker or Podman workloads | The native container lifecycle |
A finite job has a meaningful terminal result. An indefinite service is successful while it stays alive. Do not use No Block as a service manager.
Installation
From npm after the first release:
pi install npm:@jeecabs/no-block
From git:
pi install git:github.com/Jeecabs/no-block
Bash behavior
The bash tool accepts these fields:
type BashInput = {
command: string;
name?: string;
backgroundAfter?: number;
timeout?: number;
};
commandis the finite shell command.nameis an optional job name.backgroundAfteris the foreground wait in seconds. The default is30.timeoutis a hard lifetime limit in seconds.
No Block starts every Bash job in the process manager.
If the job exits before backgroundAfter, Bash returns its output and exit status normally. No Block does not send a lifecycle notification because the tool result already reports the terminal state.
If the job is still running at backgroundAfter, Bash returns its process ID and log paths. The agent can continue other work. No Block sends one follow-up when the process exits.
A hard timeout remains active after background handoff. When it expires, No Block stops the process group and reports the terminal event once.
Python output
Direct Python commands use a compact view inside the existing Bash tool. Virtualenv paths such as .venv/bin/python work too.
The collapsed view shows the job name, status, and up to three output lines. Expand the tool result to inspect inline source, the original command, output, and log paths.
No Block executes the original command without changes. Python uses the same foreground wait, timeout, cancellation, and background notifications as other Bash jobs. Compound commands and unsupported Python invocations keep the normal Bash view.
See Python presentation for supported commands and limits.
Completion delivery
No Block uses followUp for an unobserved background completion. It does not steer an active tool batch.
Lifecycle delivery uses explicit states:
pending -> publishing -> published
|
+-> pending after a synchronous enqueue failure
A transient synchronous enqueue failure schedules a bounded retry. No Block marks a notification as published only after Pi accepts the message.
Pi does not provide a provider-turn acknowledgment. No Block can guarantee retryable message enqueue, not exactly-once model processing.
Inspect a yielded job
Use /no-block to open the job panel. It shows running and recently finished finite jobs.
Use /no-block:logs [id] for retained output. Use /no-block:kill [id] to stop a job. Use /no-block:clear to remove finished entries and their log storage.
The model can use the inherited process tool to list jobs and inspect output. It can also write stdin, update log watches, stop jobs, and clear finished entries.
Output and cleanup
No Block stores stdout, stderr, and combined logs. Each log file has a 64 MiB cap. Model-visible output remains bounded.
Commands run in detached POSIX process groups. A stop targets the full group. Session shutdown stops live jobs and removes temporary manager state.
No Block supports macOS and Linux. It does not support Windows.
Configuration
Use /no-block:settings for inherited process settings. These settings control shell path, output limits, panel size, follow mode, dock behavior, and the optional status widget.
The inherited background-command interception option blocks shell patterns such as &, nohup, disown, and setsid. Keep service-shaped routing in the separate service manager integration.
Development
pnpm install
pnpm typecheck
pnpm lint
pnpm test
pnpm test:e2e
The package uses TypeScript, Node.js 22.19 or newer, pnpm, Biome, Vitest, and Changesets.
Upstream and license
No Block is a fork of @aliou/pi-processes. The original process manager, user interface, protocol, and documentation structure remain under the MIT license.
No Block is also MIT licensed.