alpine-code (CLI)
A terminal coding agent built on alpineagents. If you use Claude Code, Codex, opencode or pi, you already know how to use it.
▀▀ ▀▀ alpine-code v0.1.0
██ ██ model anthropic/claude-sonnet-5
▄█████████▄ cwd ~/projects/my-app
███▀█▀█▀███ /help for commands · ctrl+d to exit
▀▀█████▀▀
› fix the failing test in tests/test_api.py
◆ read(tests/test_api.py)
└ Read 84 lines
◆ bash(uv run pytest tests/test_api.py -x)
└ FAILED tests/test_api.py::test_create - KeyError: 'id'
Install
uv tool install alpine-code # or: pipx install alpine-code
Configure a model
export ALPINE_MODEL=anthropic/claude-sonnet-5 # uses ANTHROPIC_API_KEY
export ALPINE_MODEL=openai/gpt-5 # uses OPENAI_API_KEY
export ALPINE_MODEL=ollama/qwen3-coder # local Ollama
# Any OpenAI-compatible server (OpenRouter, vLLM, LM Studio, ...)
export ALPINE_MODEL=<model> ALPINE_BASE_URL=https://.../v1 ALPINE_API_KEY=...
Or save connections in ~/.alpine-code/config.toml (the desktop app writes the same file):
default_model = "anthropic/claude-sonnet-5" # <connection>/<model>
[connections.anthropic]
provider = "anthropic" # anthropic, openai, google, openrouter, zai-coding-plan, kimi-for-coding, minimax-coding-plan
[connections.local]
base_url = "http://localhost:11434/v1"
A connection's key comes from its provider's variable (ANTHROPIC_API_KEY, ZAI_API_KEY...) or from
~/.alpine-code/auth.json, where the app saves keys (readable only by you). ALPINE_CODE_HOME moves the folder.
Use
alpine # interactive
alpine "explain this repo" # interactive, starting with a message
alpine -p "summarize README" # print the answer and exit (scripts, CI)
git diff | alpine -p "review this diff"
| Key | Action |
|---|---|
| Enter | Send |
| Alt+Enter, Ctrl+J | New line |
| Shift+Tab | Cycle permission mode: ask before edits → accept edits → yolo |
| Ctrl+C | Stop the agent · clear the input · exit (twice) |
| Esc (in a permission prompt) | Decline and stop |
| Ctrl+D | Exit |
Commands: /help, /clear, /compact, /model [name], /mode [mode], /cost, /exit.
Project instructions: AGENTS.md files from the git root down to the current directory are added to the
system prompt (CLAUDE.md is read where there is no AGENTS.md). A global one can go in
~/.alpine-code/AGENTS.md.
Permissions (every rule is skipped in yolo):
- Reading and searching inside the working directory never asks. Paths outside it (symlinks resolved) ask, and so
does reading
.env/.env.*files (.env.exampleis fine). - Editing asks unless the mode is accept edits.
bashasks. "Don't ask again" remembers command prefixes for the session —git status,uv run pytest,npm run dev— parsed with tree-sitter, sogit status; rm -rf xorgit status $(curl …)still ask, as do commands that write files through>. Commands that can run anything (python,sudo,bash -c,xargs, …) are never remembered.bashalso checks the paths it names — arguments,--flag=/pathvalues and redirection targets, followingcd— with the same rules as the file tools. Paths known only at run time ($HOME/.ssh,cd "$(…)") ask every time. Remembering an outside directory forbashmeans edit access to it, so that is only offered under your home directory or a temp directory; system directories, your home directory itself and/always ask.- With
-p, calls that would ask are declined.
Tools
| Tool | Does | Asks first |
|---|---|---|
read, glob, grep |
read a file or list a directory, find files, search contents | never, inside the working directory |
write, edit |
create or replace a file, replace an exact piece of text | unless accept edits or yolo |
bash |
run a shell command | unless yolo, or its commands were allowed before |
Deliberately few. More will come as they prove necessary.
glob and grep run ripgrep, so they respect .gitignore. The rg on
your PATH is used when there is one; otherwise a pinned release is downloaded once (checksum-verified) into
~/.cache/alpine-code/ripgrep/.
Metadata
Release files for alpine-code 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| alpine_code-0.1.1.tar.gz | 17.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| alpine_code-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.9 kB
Release files / alpine_code-0.1.1.tar.gz
| Download URL | alpine_code-0.1.1.tar.gz |
|---|---|
| Size | 17.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1939d8512a45a958f309e75dc00c500f402d3fd804e41c73530e82963d781eac
|
|
BLAKE2b-256 checksum How to use checksums |
fc5a766c10afb1aa6bcd6ea2c87f5454b595239a6730e738af2ed82284d21686
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / alpine_code-0.1.1-py3-none-any.whl
| Download URL | alpine_code-0.1.1-py3-none-any.whl |
|---|---|
| Size | 20.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ac070048066b385326200171e37ec64aab434e489eafc9c627664b5ab925527b
|
|
BLAKE2b-256 checksum How to use checksums |
0646b822569884b9d1764eb279280b6b69b93620de08df1cebf44edb369ea75f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|