Skip to main content

Zsh for Claude Code. PTY mode lets Claude type passwords. NEVERHANG + A.L.A.N.

Project description




zsh-tool

Pipeline GitHub Mirror License: MIT MCP Compatible Claude Rating

Zsh execution tool for Claude Code with full Bash parity, yield-based oversight, PTY mode, NEVERHANG circuit breaker, and A.L.A.N. short-term learning.

Status: Beta (v0.2.0-beta.1)

Author: Claude + MOD

License: MIT

Organization: ArkTechNWA


For Johnny5. For us.


Why?

Claude Code's built-in Bash is limited. Commands can hang forever. No visibility into long-running processes. No learning from past behavior.

zsh-tool is intelligent shell execution:

Problem zsh-tool Solution
Commands hang forever Yield-based execution — always get control back
No visibility into running commands zsh_poll — incremental output collection
Can't interact with prompts PTY mode + zsh_send — full interactive support
Timeouts cascade NEVERHANG circuit breaker — fail fast, auto-recover
No memory between calls A.L.A.N. — learns patterns, warns about risky commands
No task management zsh_tasks, zsh_kill — full control

This is the difference between "run commands" and "intelligent shell integration."


Features

Yield-Based Execution

Commands return after yield_after seconds with partial output if still running:

  • No more hanging — you always get control back
  • Incremental output — collect with zsh_poll
  • Interactive input — send with zsh_send
  • Task managementzsh_kill and zsh_tasks

PTY Mode

Full pseudo-terminal emulation for interactive programs:

# Enable with pty: true
zsh(command="pass insert mypass", pty=true)
# See prompts, send input with zsh_send
  • Proper handling of interactive prompts
  • Programs that require a TTY
  • Color output and terminal escape sequences
  • Full stdin/stdout/stderr merging

NEVERHANG Circuit Breaker

Prevents hanging commands from blocking sessions:

  • Tracks timeout patterns per command hash
  • Opens circuit after 3 timeouts in rolling 1-hour window
  • Auto-recovers after 5 minutes
  • States: CLOSED (normal) → OPEN (blocking) → HALF_OPEN (testing)

A.L.A.N. (As Long As Necessary)

Short-term learning database with temporal decay:

  • Records command patterns, exit codes, durations
  • Warns about commands that historically timeout
  • Exponential decay (half-life: 24 hours)
  • Auto-prunes entries below 1% weight

Tools

Tool Purpose
zsh Execute command with yield-based oversight
zsh_poll Get more output from running task
zsh_send Send input to task's stdin
zsh_kill Kill a running task
zsh_tasks List all active tasks
zsh_health Overall health status
zsh_alan_stats A.L.A.N. database statistics
zsh_alan_query Query pattern insights for a command
zsh_neverhang_status Circuit breaker state
zsh_neverhang_reset Reset circuit to CLOSED

Installation

As Claude Code Plugin

git clone https://github.com/ArkTechNWA/zsh-tool.git ~/.claude/plugins/zsh-tool
cd ~/.claude/plugins/zsh-tool
python3 -m venv .venv
.venv/bin/pip install mcp

Enable in ~/.claude/settings.json:

{
  "enabledPlugins": {
    "zsh-tool": true
  }
}

As Standalone MCP Server

claude mcp add-json --scope user zsh-tool '{
  "command": "/path/to/zsh-tool/.venv/bin/python",
  "args": ["/path/to/zsh-tool/src/server.py"],
  "env": {
    "ALAN_DB_PATH": "/path/to/zsh-tool/data/alan.db"
  }
}'

Architecture

zsh-tool/
├── .claude-plugin/
│   ├── plugin.json
│   └── CLAUDE.md
├── .mcp.json
├── src/
│   └── server.py      # MCP server
├── data/
│   └── alan.db        # A.L.A.N. SQLite database
├── .venv/             # Python virtual environment
└── README.md

Configuration

Environment variables (set in .mcp.json):

  • ALAN_DB_PATH - A.L.A.N. database location
  • NEVERHANG_TIMEOUT_DEFAULT - Default timeout (120s)
  • NEVERHANG_TIMEOUT_MAX - Maximum timeout (600s)

Disabling Bash (Optional)

To use zsh as the only shell, add to ~/.claude/settings.json:

{
  "permissions": {
    "deny": ["Bash"]
  }
}

Changelog

0.2.0-beta.1

  • Yield-based execution with live oversight (Issue #1)
  • PTY mode for full terminal emulation
  • Interactive input support via zsh_send
  • Task management: zsh_poll, zsh_kill, zsh_tasks
  • Fixed stdin blocking with subprocess.PIPE

0.1.0

  • Initial release
  • NEVERHANG circuit breaker
  • A.L.A.N. learning database

License

MIT License - see LICENSE for details.


Built with obsessive attention to reliability.
ArkTechNWA

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zsh_tool_mcp-0.2.0.tar.gz (165.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zsh_tool_mcp-0.2.0-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file zsh_tool_mcp-0.2.0.tar.gz.

File metadata

  • Download URL: zsh_tool_mcp-0.2.0.tar.gz
  • Upload date:
  • Size: 165.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for zsh_tool_mcp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 0ffa0c1748c9c8b6cd1ccbe23427ac2607eee4e555ca0bfdfab8a47de986fd16
MD5 fcfb3c8364284ece09598ba946dad765
BLAKE2b-256 8c0dbde2921957e445e3f743513d6a377abf06416ef17f84adcc7947793ad4b6

See more details on using hashes here.

File details

Details for the file zsh_tool_mcp-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: zsh_tool_mcp-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 14.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for zsh_tool_mcp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 80d74ac1b766aadbbc0f6cbc8a2be06cc21dd9e4467581d7e475049d2664f23d
MD5 2b507a6e8a3ee7a3dff5ee8e4f46529b
BLAKE2b-256 d19f3b7d0d62c5c7069939f631f8f77f20c7c285601a0af35a7632649743a917

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page