Raise a daemon that hunts while your AI coding agent works.
Project description
jun is a tiny terminal game for the age of AI coding. It runs in its own pane beside Claude Code. Every tool call your agent makes becomes prey — catch it in rhythm, chain combos, and raise a daemon that's a portrait of how you actually code.
pip install jun
jun init # connect Claude Code, then restart it
jun # the hunt begins
daemon getting too powerful?
jun off.
Claude Code works. you hunt.
The instant your agent picks up a task, the hunt is live. Its tool calls fly in as tokens — catch them in the green, chain a combo, trigger a surge. Every catch feeds the daemon you're raising.
| call | becomes |
|---|---|
edit |
a strike |
bash |
a heavy hit — land it in two |
read / grep |
a wide, gentle scan |
| a quiet agent | your daemon catches its breath |
The daemon's form is generative, shaped by how you actually code. Lots of edits grow more limbs. Lots of test runs grow armor. Lots of reading grows more eyes. No two daemons are alike, and yours is the thing you screenshot and share.
·˘˘˘·
╭─────────╮
│ ● ● ● ● │
│ ‿ ‿ │
╰─────────╯
│ │ │ │ │
╨ ╨ ╨ ╨ ╨
what works
- Live hunts that start on their own — driven by your agent's real tool calls, not a simulation.
- Per-kind cursor motion — a read drifts, a test run races, a thinking pause makes the cursor waver. The kind tells you how to time the catch.
- Heavy tokens — a test run takes two timed hits, one per cursor pass.
- Golden tokens — a rare jackpot, claimed with a quick double-tap in the zone. A perfect golden catch can permanently mutate the daemon with a spark.
- Focus as the stakes — misses drain it, a quiet agent lets it recover, and at zero the hunt collapses.
- Combo surges every five clean catches.
- Evolutions — four permanent forks, sixteen possible daemons.
- Daily streaks with a one-miss shield, and daily objectives that re-seed at midnight.
- Training mode — practice against a simulated agent. Banks nothing; the daemon records only real work.
jun card— a shareable daemon card with your best run.?help, first-run intro, crash-safe atomic saves.
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 on its own when your agent works — that is the game,
and it is what grows your daemon. With no agent, space starts a training
run. The daemon is a record of your real coding.
how it connects to Claude Code
jun is standalone — it never launches or wraps Claude Code. Run it in
a separate pane. jun init adds three hooks to ~/.claude/settings.json:
PostToolUse— each tool call becomes a hunt eventStop— ends the huntNotification— surfaces "⚠ Claude needs you" in jun, so you never miss a permission prompt while you're catching tokens
The hook is written as an absolute <python> -m jun ... command, so it
works even when jun isn't on Claude Code's PATH. Restart Claude
Code after jun init — it only loads hooks at startup. jun off
removes them cleanly.
If you installed jun with uvx (ephemeral), jun init would record a
path that disappears after the run — install jun persistently instead
(pip install jun, or uv tool install jun).
all commands
jun # play (the default)
jun init # connect Claude Code's hooks (run once, then restart Claude Code)
jun off # remove the hooks
jun card # print the shareable daemon card
jun new # release your daemon and start fresh
development
uv sync
uv run jun
Issues and PRs welcome — bug reports especially. Release notes live in CHANGELOG.md.
jun is not productivity software
It is not a SaaS. It will not 10× your output. It's a daemon. It lives in your terminal. It's a little bit feral — and that's the whole point.
the AI doesn't need you. your daemon does.
Never be bored vibe coding again.
Released under the Apache License 2.0.
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.2.0.tar.gz.
File metadata
- Download URL: jun-0.2.0.tar.gz
- Upload date:
- Size: 33.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f440c5d270fc90de778b3e521db39ef42b8717775b31e68ca160147851deda0e
|
|
| MD5 |
b8da784c6b0ce1a604ace97ff05ad1c6
|
|
| BLAKE2b-256 |
52b0489f4a2e5b94473bdde18e0b0b4522d4f73a4878a363efef7fc950539bb6
|
Provenance
The following attestation bundles were made for jun-0.2.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.2.0.tar.gz -
Subject digest:
f440c5d270fc90de778b3e521db39ef42b8717775b31e68ca160147851deda0e - Sigstore transparency entry: 1575645661
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/jun@d6c129891be5f10af767ae597a8019847f3df19a -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/gauthierpiarrette
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d6c129891be5f10af767ae597a8019847f3df19a -
Trigger Event:
push
-
Statement type:
File details
Details for the file jun-0.2.0-py3-none-any.whl.
File metadata
- Download URL: jun-0.2.0-py3-none-any.whl
- Upload date:
- Size: 33.7 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 |
10fa68fdedb17bfa3abe9dc85531fa9258f6fc4e3f7acd9e23e035e3375e1769
|
|
| MD5 |
c2a1db55116357b6a484efb4f74237b6
|
|
| BLAKE2b-256 |
787ce1b744f905e0ba3b4b34c8a0d052a851cbaa85379662ee8b8d9097235cae
|
Provenance
The following attestation bundles were made for jun-0.2.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.2.0-py3-none-any.whl -
Subject digest:
10fa68fdedb17bfa3abe9dc85531fa9258f6fc4e3f7acd9e23e035e3375e1769 - Sigstore transparency entry: 1575645698
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/jun@d6c129891be5f10af767ae597a8019847f3df19a -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/gauthierpiarrette
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d6c129891be5f10af767ae597a8019847f3df19a -
Trigger Event:
push
-
Statement type: