Raise a daemon that hunts 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.
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 off # remove the Claude Code hooks
jun wrapped # print the shareable daemon card
jun new # release your daemon and start fresh
The first time you run jun, it offers to connect to Claude Code for you —
say yes and you're set (or run jun init yourself). After that, a hunt starts
on its own the moment your agent picks up a task, your daemon only grows from
that real work, and jun flags it the instant Claude needs your input.
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 three hooks to ~/.claude/settings.json:
PostToolUse (each tool call → a catch), Stop (ends the hunt), and
Notification (Claude needs you → a "⚠ Claude needs you" alert in jun, so you
never miss a permission prompt while you're watching the hunt).
The hook is written as an absolute <python> -m jun ... command, so it works
even when jun isn't on your PATH. Restart Claude Code after jun init
so it reloads the hooks. jun off removes them cleanly.
For the hooks to keep working, install jun persistently (uv tool install jun)
rather than via the ephemeral uvx — jun init records the path of the Python
that ran it, and an uvx environment is deleted after the run.
Status
Working: the agent connection (Claude Code hooks → live hunts that start on
their own and grow the daemon, plus a "Claude needs you" alert), the daemon
(generative ASCII), the hunt with
focus (a hunt can collapse — every catch matters), combo surges,
golden tokens (a rare jackpot that can mutate the daemon with a spark),
a daily streak (with a one-miss shield), evolutions (three permanent
forks → eight daemons), daily objectives, training mode, the jun wrapped
card, crash-safe atomic saves, first-run intro and ? help.
Development
uv sync
uv run jun
License
jun is released under the Apache License 2.0 — see LICENSE. Release notes live in CHANGELOG.md.
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.1.tar.gz.
File metadata
- Download URL: jun-0.1.1.tar.gz
- Upload date:
- Size: 31.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6440f27b01ebb63a834513872342e6cdaa76e429f4ec2ba6f2a392b43c6c05a2
|
|
| MD5 |
2d1f1f041c06c1757aaade2cc9c0c71f
|
|
| BLAKE2b-256 |
d0b4d5e5f799a13a973d4dc488fdd62bb0fcef59b4ed96bb67b4a307298f8262
|
Provenance
The following attestation bundles were made for jun-0.1.1.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.1.tar.gz -
Subject digest:
6440f27b01ebb63a834513872342e6cdaa76e429f4ec2ba6f2a392b43c6c05a2 - Sigstore transparency entry: 1570237817
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/jun@9012f796e3562853f04347074a65375dbad13b8e -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/gauthierpiarrette
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9012f796e3562853f04347074a65375dbad13b8e -
Trigger Event:
push
-
Statement type:
File details
Details for the file jun-0.1.1-py3-none-any.whl.
File metadata
- Download URL: jun-0.1.1-py3-none-any.whl
- Upload date:
- Size: 31.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 |
88cfc2f09e23964d33a316ca13b93177d958e7173d4a5929e7fe612b9f3443b6
|
|
| MD5 |
b034179df3c6963ed98ba6e512a031f7
|
|
| BLAKE2b-256 |
7eaf3ca2caeaa1f957863139fde4b5107a08e86aab5839c3e5ac4d08cded7bb5
|
Provenance
The following attestation bundles were made for jun-0.1.1-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.1-py3-none-any.whl -
Subject digest:
88cfc2f09e23964d33a316ca13b93177d958e7173d4a5929e7fe612b9f3443b6 - Sigstore transparency entry: 1570237959
- Sigstore integration time:
-
Permalink:
gauthierpiarrette/jun@9012f796e3562853f04347074a65375dbad13b8e -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/gauthierpiarrette
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9012f796e3562853f04347074a65375dbad13b8e -
Trigger Event:
push
-
Statement type: