$ pijota

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.