aish

Cut agent context by up to 77%.

AI coding agents use terminals designed for humans. AgentShell gives them compact, evidence-preserving observations for repo inspection, file reading, search, git status, diffs, tests, and builds.

GitHub
aish demo

Before / after

python -m pytest
============================= test session starts ==============================
platform linux -- Python 3.11.4, pytest-7.4.0
collected 14 items

tests/test_auth.py ..........F.                                       [100%]

=================================== FAILURES ===================================
_____________________________ test_empty_password ______________________________

    def test_empty_password():
>       assert login("user", "") == 400
E       AssertionError: assert 200 == 400

tests/test_auth.py:44: AssertionError
=========================== short test summary info ============================
FAILED tests/test_auth.py::test_empty_password - AssertionError: assert 200 == 400
========================= 1 failed, 13 passed in 0.42s ==========================
aish test -- python -m pytest
status=failed exit=1 passed=13 failed=1 command="python -m pytest"
FAIL tests/test_auth.py::test_empty_password AssertionError: assert 200 == 400
omitted=passing_tests,progress,full_stack_traces
parser=pytest
truncated=false

How it works

aish tree
project=python files=24 dirs=6 important=pyproject.toml,src,tests
root: pyproject.toml,src,tests,README.md
omitted: .git,__pycache__
aish view src/auth.py
file=src/auth.py lines=284 imports=5 exports=0 funcs=login:22-62,logout:70-110
use: aish view src/auth.py:22-62
omitted=full_file
aish search login
query=login matches=12 files=3 backend=rg
src/auth.py count=5 lines=22,44,91
src/LoginPage.tsx count=4 lines=8,31
aish status
branch=main changed=4 staged=1 unstaged=2 untracked=1
 M src/auth.py
A  tests/test_auth.py
?? notes.md
aish diff
diff=unstaged files=3 added=42 removed=18
M src/auth.py +22 -7
next: aish diff src/auth.py
aish test -- <command>
status=failed exit=1 passed=? failed=2 command="python -m pytest"
FAIL tests/test_auth.py::test_empty_password AssertionError: expected 400
omitted=passing_tests,progress,full_stack_traces
aish build -- <command>
status=failed exit=2 warnings=1 command="npm install"
ERROR npm ERR! code ERESOLVE
omitted=progress,downloads,successful_steps

Works with your agent

claude codex cursor opencode

Run aish init once and it writes routing rules so each of these agents prefers aish over raw shell commands automatically.

Measured, not guessed

77.2%
smaller git diff output
73.1%
smaller pytest failure output
5/5
fixtures, evidence fully preserved

From aish benchmark, deterministic fixture-backed comparisons of raw vs. compact output. Evidence preserved: paths, line numbers, test IDs, errors, commands, exit codes.