A turn-based roguelike you play while your AI coding agent works.
Project description
jun
Raise a daemon that hunts while your AI coding agent works.
jun runs in a terminal pane next to Claude Code. You hatch a daemon — a creature that lives in your repo. When your agent works, your daemon hunts: every tool call the agent makes flies in as a token, and you catch it in rhythm. Catches chain into a combo; the daemon feeds on the essence and grows.
Its form is generative — shaped by how you actually code. Lots of edits → more limbs. Lots of test runs → armor. Lots of reading → more eyes. No two daemons are alike, and yours is the thing you screenshot and share.
While you're away, other developers' daemons wander through your den and leave gifts, and a daily expedition ranks the whole community. You're never alone in the terminal.
Quick start
uvx jun # play (zero install)
uv tool install jun # or install it permanently
jun # play
jun init # install Claude Code hooks (so the agent drives your hunts)
jun wrapped # print the shareable daemon card
jun new # release your daemon and start fresh
Run jun init once — that's what connects jun to your agent. After that,
a hunt starts on its own the moment your agent picks up a task, and your
daemon only grows from that real work.
Controls
| key | action |
|---|---|
space |
catch a token · start a training run |
1 2 |
choose a form at an evolution fork |
esc |
end the hunt · leave a screen |
? |
help — the loop and the controls |
q |
quit (always saved) |
A live hunt starts by itself when your agent works — that is the game, and
it is what grows your daemon. With no agent running, space starts a
training run against a simulated one: good for learning the catch, but it
banks nothing. The daemon is a record of your real coding.
How it connects to Claude Code
jun is a standalone program — it never launches or wraps Claude Code. Run
it in a separate pane. jun init adds two hooks to ~/.claude/settings.json:
PostToolUse (each tool call → a catch) and Stop (ends the hunt).
Status
Working: the agent connection (Claude Code hooks → live hunts that start on
their own and grow the daemon), the daemon (generative ASCII), the hunt with
focus (a hunt can collapse — every catch matters), combo surges,
evolutions (three permanent forks → eight daemons), daily objectives,
training mode, the shared world (visitors, gifts, daily expedition), the jun wrapped card, crash-safe atomic saves, first-run intro and ? help.
Simulated for now: the shared world is generated on-device — genuinely multiplayer needs a small registry server (the one swap left to make).
Development
uv sync
uv run jun
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 Distribution
Built Distribution
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 jun-0.1.0.tar.gz.
File metadata
- Download URL: jun-0.1.0.tar.gz
- Upload date:
- Size: 22.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c20a76c48094d12592d9c9ed6e56c83ca2cceb269db2d8797b67e1ee7b41568f
|
|
| MD5 |
5ef1db6c77551de198de67b6431d371c
|
|
| BLAKE2b-256 |
fa8815f45ae189ead2ea31daedfead638a2ea6962903cb5992b143b4d8c7843c
|
Provenance
The following attestation bundles were made for jun-0.1.0.tar.gz:
Publisher:
publish.yml on gauthierpiarrette/jun
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jun-0.1.0.tar.gz -
Subject digest:
c20a76c48094d12592d9c9ed6e56c83ca2cceb269db2d8797b67e1ee7b41568f - Sigstore transparency entry: 1563311792
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/jun@309d0b3b3d2ba6821ad032e116a9f3a8760b5591 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gauthierpiarrette
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@309d0b3b3d2ba6821ad032e116a9f3a8760b5591 -
Trigger Event:
push
-
Statement type:
File details
Details for the file jun-0.1.0-py3-none-any.whl.
File metadata
- Download URL: jun-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b2122151895b299659435e4e9acfcadb38788d76cc43f1a72246494948058229
|
|
| MD5 |
cdc647259749c90943ddebbeb18d2688
|
|
| BLAKE2b-256 |
43bd583455236fdd1702aa737521006468a2c787c1ebb8ca8cdec20aed58b593
|
Provenance
The following attestation bundles were made for jun-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on gauthierpiarrette/jun
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
jun-0.1.0-py3-none-any.whl -
Subject digest:
b2122151895b299659435e4e9acfcadb38788d76cc43f1a72246494948058229 - Sigstore transparency entry: 1563312120
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/jun@309d0b3b3d2ba6821ad032e116a9f3a8760b5591 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/gauthierpiarrette
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@309d0b3b3d2ba6821ad032e116a9f3a8760b5591 -
Trigger Event:
push
-
Statement type: