Python-native headless coding-agent backend built around PydanticAI
Project description
just-another-coding-agent
read_when: you need the repo overview, scope, or setup commands
Python-native coding-agent backend built around PydanticAI, with a thin first-party Go terminal UI.
This repo preserves the backend product shape of pi's coding agent while rebuilding it as a clean Python implementation around PydanticAI. It does not inherit pi-mono's monorepo layout, extension ecosystem, or migration burden.
It is intentionally narrow: coding-agent backend first, a thin first-party terminal UI, strict contracts, no fallbacks, and no compatibility glue. PydanticAI should provide as much of the agent machinery as possible; local code exists to define and enforce the coding-agent product contract.
Scope
- Headless coding-agent runtime
- Thin first-party terminal UI built on the same runtime
- File and shell tools
- Streaming run events
- Session persistence
- JSON-over-stdio RPC for non-Python consumers
Non-goals
- General-purpose agent framework work
- Backward compatibility layers
- Legacy migration shims
Project Layout
cmd/jaca/- Go TUI entrypointinternal/jaca/- Go TUI client, rendering, config, and RPC bridgesrc/just_another_coding_agent/- canonical Python packagesrc/just_another_coding_agent/runtime/- runtime and orchestration entrypointssrc/just_another_coding_agent/tools/- coding toolssrc/just_another_coding_agent/session/- session persistencesrc/just_another_coding_agent/rpc/- RPC transportsrc/just_another_coding_agent/contracts/- public contract helpers and schemastests/- unit tests first, e2e laterdocs/- scope, architecture, contracts, ADRs, development
Install
For normal use outside a repo checkout, prefer one of these published-package paths:
uv tool install just-another-coding-agent
jaca
uvx --from just-another-coding-agent jaca
uv tool installis the persistent daily-use pathuvxis the ephemeral no-install path- installed builds update explicitly with:
uv tool upgrade just-another-coding-agent
JACA does not auto-upgrade or self-reinstall on startup.
Installed uv tool builds may show an optional update prompt with:
Update nowSkipSkip until next release
When Update now is available, JACA shows the exact upgrade command before it
runs it, then asks you to relaunch explicitly after a successful update.
Repo Setup
uv sync --extra dev --extra test
uv run ruff check .
uv run pytest
That default uv sync --extra dev --extra test path is for the Python backend,
Harbor, and headless evaluation flows. It stays Go-free.
If you want the interactive TUI too, rebuild the package explicitly with Go enabled:
JACA_BUILD_TUI=1 uv sync --reinstall-package just-another-coding-agent --extra dev --extra test
Run
Launch the long-lived stdio RPC server with explicit backend configuration:
uv run just-another-coding-agent \
--model <provider:model> \
--workspace-root /abs/path/to/workspace \
--sessions-root /abs/path/to/sessions
The process reads one JSON RPC request per stdin line and writes one or more JSON lines to stdout.
Launch the first-party terminal UI:
uv run jaca
In a repo checkout, uv run jaca is the canonical development launcher. The
interactive launcher talks to the Python backend over stdio RPC.
In a live repo checkout, uv run jaca prefers go run ./cmd/jaca when go
is available so the TUI always reflects current source.
Outside a repo checkout, the installed jaca command launches the installed
jaca-go binary.
If uv run jaca says the Go TUI binary is missing, rebuild the environment with:
JACA_BUILD_TUI=1 uv sync --reinstall-package just-another-coding-agent --extra dev --extra test
First Run
The TUI keeps provider, model, and trace preferences in ~/.jaca/config.json.
Inside jaca:
/provider ollamaselects local Ollama and requires no key/provider openaiselects OpenAI and starts masked auth ifOPENAI_API_KEYis missing/provider anthropicselects Anthropic and starts masked auth ifANTHROPIC_API_KEYis missing/auth openaior/auth anthropicstores credentials without echoing the secret into the transcript/model <provider:model>switches the active model and aligns provider state to that model/trace offdisables tracing/trace localstores spans locally under~/.jaca/traces//trace logfireexports spans to Logfire
Tracing is off by default. Local and Logfire tracing both require the optional trace dependency:
uv sync --extra trace
For logfire mode, authenticate first:
uv run logfire auth
uv run logfire projects use <project>
For direct Go TUI development, pass the backend command explicitly:
go run ./cmd/jaca \
--backend-command-json='["uv","run","python","-m","just_another_coding_agent"]'
Docs
docs/README.mddocs/goal.mddocs/tui.mddocs/architecture.mddocs/contracts.mddocs/grounding.mddocs/development.mddocs/adr/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file just_another_coding_agent-0.1.3-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: just_another_coding_agent-0.1.3-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 7.8 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
207739210537d27e992809ee8391c955993c1c1b707f18ee843b7cd64aced6b1
|
|
| MD5 |
350dbd2b904cac513aba8c6fe9d0f73e
|
|
| BLAKE2b-256 |
126c94abc7f866df87dd39ead53e7fe3535e7160d23f86e1983d9dbf4907c3bc
|
Provenance
The following attestation bundles were made for just_another_coding_agent-0.1.3-py3-none-manylinux_2_17_x86_64.whl:
Publisher:
release.yml on SahilDahiya/just-another-coding-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
just_another_coding_agent-0.1.3-py3-none-manylinux_2_17_x86_64.whl -
Subject digest:
207739210537d27e992809ee8391c955993c1c1b707f18ee843b7cd64aced6b1 - Sigstore transparency entry: 1202014111
- Sigstore integration time:
-
Permalink:
SahilDahiya/just-another-coding-agent@c08ab31e32c2d1479778425620d5fa60b708b217 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/SahilDahiya
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c08ab31e32c2d1479778425620d5fa60b708b217 -
Trigger Event:
push
-
Statement type:
File details
Details for the file just_another_coding_agent-0.1.3-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: just_another_coding_agent-0.1.3-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 8.0 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e85c74dd37e55c8cfb7610f847cd6791be57347b4d95dc9cb3e02051cd5d6b49
|
|
| MD5 |
be47849fcc5c5678b6f4aaa195ba516e
|
|
| BLAKE2b-256 |
1d98a2a7ac5500a3c3c77fd90760361babfca7b1ad873f1cd6a557f80d368f75
|
Provenance
The following attestation bundles were made for just_another_coding_agent-0.1.3-cp312-cp312-win_amd64.whl:
Publisher:
release.yml on SahilDahiya/just-another-coding-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
just_another_coding_agent-0.1.3-cp312-cp312-win_amd64.whl -
Subject digest:
e85c74dd37e55c8cfb7610f847cd6791be57347b4d95dc9cb3e02051cd5d6b49 - Sigstore transparency entry: 1202014172
- Sigstore integration time:
-
Permalink:
SahilDahiya/just-another-coding-agent@c08ab31e32c2d1479778425620d5fa60b708b217 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/SahilDahiya
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c08ab31e32c2d1479778425620d5fa60b708b217 -
Trigger Event:
push
-
Statement type:
File details
Details for the file just_another_coding_agent-0.1.3-cp312-cp312-macosx_15_0_x86_64.whl.
File metadata
- Download URL: just_another_coding_agent-0.1.3-cp312-cp312-macosx_15_0_x86_64.whl
- Upload date:
- Size: 7.6 MB
- Tags: CPython 3.12, macOS 15.0+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb14348e6b1b9a1ccb596f22aae31e4d1d7372f272066679568f0350be16633e
|
|
| MD5 |
1193adb1ca09bdbfbba402a77303d65a
|
|
| BLAKE2b-256 |
cb05dcb26d6c0be78e82c52094ac538628b23f23ac401c6165e283286b7351d2
|
Provenance
The following attestation bundles were made for just_another_coding_agent-0.1.3-cp312-cp312-macosx_15_0_x86_64.whl:
Publisher:
release.yml on SahilDahiya/just-another-coding-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
just_another_coding_agent-0.1.3-cp312-cp312-macosx_15_0_x86_64.whl -
Subject digest:
eb14348e6b1b9a1ccb596f22aae31e4d1d7372f272066679568f0350be16633e - Sigstore transparency entry: 1202014149
- Sigstore integration time:
-
Permalink:
SahilDahiya/just-another-coding-agent@c08ab31e32c2d1479778425620d5fa60b708b217 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/SahilDahiya
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c08ab31e32c2d1479778425620d5fa60b708b217 -
Trigger Event:
push
-
Statement type:
File details
Details for the file just_another_coding_agent-0.1.3-cp312-cp312-macosx_14_0_arm64.whl.
File metadata
- Download URL: just_another_coding_agent-0.1.3-cp312-cp312-macosx_14_0_arm64.whl
- Upload date:
- Size: 7.3 MB
- Tags: CPython 3.12, macOS 14.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a8d2ec65579073e2efe0980ba84b3f86e7f70f96a5cddc73fb950095d86ae51
|
|
| MD5 |
5d1ee0687440a9a2a92a8ca3c51e8697
|
|
| BLAKE2b-256 |
c8f321b3aa3c20ae6a85fa3e22c8643f620ac6172618d1ac6e28f962106e57cb
|
Provenance
The following attestation bundles were made for just_another_coding_agent-0.1.3-cp312-cp312-macosx_14_0_arm64.whl:
Publisher:
release.yml on SahilDahiya/just-another-coding-agent
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
just_another_coding_agent-0.1.3-cp312-cp312-macosx_14_0_arm64.whl -
Subject digest:
0a8d2ec65579073e2efe0980ba84b3f86e7f70f96a5cddc73fb950095d86ae51 - Sigstore transparency entry: 1202014191
- Sigstore integration time:
-
Permalink:
SahilDahiya/just-another-coding-agent@c08ab31e32c2d1479778425620d5fa60b708b217 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/SahilDahiya
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@c08ab31e32c2d1479778425620d5fa60b708b217 -
Trigger Event:
push
-
Statement type: