v0.13.3 — open source

Not a shell that lives
in an agent —
an agent that lives
in a shell.

A shell. An agent. What emerged between them.

npm install -g agent-sh Docs on GitHub →
agent-sh
~/projects/agent-sh/src main *3 base py 12:15:16 PM
>git push
To github.com:you/app.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs
~/projects/agent-sh/src main *3 base py 12:15:42 PM
ash (model-name) >what do i do?
> ash / model-name
what do i do?
Someone pushed to main while you were working, so your local branch has diverged. Two options:
git pull --rebase — replay your commits on top of theirs (clean history)
git pull — merge their changes in, creates a merge commit
Rebase is usually what you want for short-lived feature work.
↑ 7853 ↓ 139 ctx: 7.9k/200k (4%)
~/projects/agent-sh/src main *3 base py 12:16:02 PM
ash (model-name)>git pull --rebase

An agent with no session boundary.

A shell has no sessions — it's a continuous stream that just works when you open it. agent-sh extends that principle to its agent: memory streams to disk like zsh history, persistent across terminals and days. No sessions to manage, nothing to re-explain.

Building your own agent on top is surprisingly easy — agent-sh is extensible by design. I built my own, called ash, and packaged it with the project. You can swap it out for your own, or plug in an existing agent like Claude Code or pi.