pijota
$ pj --version
pijota v0.2.2
A minimalist coding agent written in pure Java. One native binary, any model. Reads and edits code, runs commands, searches the web, speaks MCP, delegates to sub-agents. No alt-screen takeover: output stays in your scrollback, so copy, search and panes keep working. Sessions resume, fork and export. Apache-2.0. Heavily inspired by pi.dev, unashamedly so.
$ pj -p "why java?"
Java is fast. pijota is pure Java, written to stay compatible with GraalVM Native Image: one binary, instant start, no JVM to install. jbang pulls it from Maven Central in one line. No node, no python, no version manager, no lockfile. One file on your PATH, the same everywhere.
$ pj -p "how to install?"
on the jvm, needs JDK 21:
$ jbang app install --name pj org.pijota:pijota:RELEASE
or a GraalVM native binary:
$ jbang app install --name pj org.pijota:pijota:RELEASE --native
or refresh an existing install:
$ jbang app install --force --fresh --name pj org.pijota:pijota:RELEASE
set a key and go (pj login does oauth): $ KIMI_API_KEY=sk-... pj -m kimi-coding/k3 # pj runs with your permissions, not a sandbox. # --readonly, a container, or a worktree to isolate.
linux · macos · windows via wsl · build from source
$ pj -p "why does CartTest fail? fix it"
ls . 4 entries glob **/* 30 paths read src/main/java/store/Cart.java read src/test/java/store/CartTest.java read target/surefire-reports/store.CartTest.txt edit src/main/java/store/Cart.java +1 -1 bash mvn -q test 2>&1 | tail -20 no output bash mvn test 2>&1 | grep -E "Tests run|BUILD" BUILD SUCCESS done · 30s · 35k tokens · deepseek/deepseek-v4-flash
$ pj --help
usage: pj [options] [prompt] frontends pj interactive TUI, append-only pj -p "..." print mode, one turn, exits pj --mode rpc JSON-RPC over stdio pj --mode json NDJSON event stream pj acp editor integration (Zed, JetBrains) pj web [host:port] local web UI pj telegram telegram bot commands pj login oauth and api keys pj worktree temporary pooled git worktree models -m provider/model e.g. -m anthropic/claude-sonnet-4-5 --thinking level reasoning effort --list-models what you can reach right now sessions -c continue the last session -r session picker -s id load by id or path --export file transcript to markdown tools read write edit apply_patch grep glob ls bash webfetch websearch question task · extensions add more --readonly read, search, fetch; nothing writes --tool a,b,c allowlist --no-tool a,b,c denylist; deny wins --browse browser automation
$ history | grep pj
512 pj 513 cat error.log | pj -p "what broke?" 519 pj -m kimi-coding/k3 --thinking high 534 pj --readonly -p "review this diff" 541 cd $(pj worktree get) && pj -p "fix the flaky test" 547 pj --browse -p "is staging up?" 548 pj -c
$ pj -p "which providers are built in?"
deepseek anthropic google openai groq xai mistral together
openrouter cerebras fireworks baseten openai-codex kimi-coding
moonshotai moonshotai-cn xiaomi-token-plan-{cn,ams,sgp} zai
huggingface nvidia minimax
set a key and go:
$ KIMI_API_KEY=sk-... pj -m kimi-coding/k3
$ DEEPSEEK_API_KEY=sk-... pj -m deepseek/deepseek-v4-flash
# 23 built in · pj login does oauth
# add any openai-compatible endpoint in settings.json
$ ls ~/.pijota
auth.json browser/ history logs/ mcp.json models-cache.json sessions/ settings.json themes/ tool-output/ trust.json worktrees/ # extensions/, skills/ and agents/ appear once you add them. # a project's .pijota/ loads only after you trust the folder.