Skip to main content

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 uvxjun 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jun-0.1.1.tar.gz (31.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jun-0.1.1-py3-none-any.whl (31.4 kB view details)

Uploaded Python 3

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

Hashes for jun-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6440f27b01ebb63a834513872342e6cdaa76e429f4ec2ba6f2a392b43c6c05a2
MD5 2d1f1f041c06c1757aaade2cc9c0c71f
BLAKE2b-256 d0b4d5e5f799a13a973d4dc488fdd62bb0fcef59b4ed96bb67b4a307298f8262

See more details on using hashes here.

Provenance

The following attestation bundles were made for jun-0.1.1.tar.gz:

Publisher: publish.yml on gauthierpiarrette/jun

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for jun-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 88cfc2f09e23964d33a316ca13b93177d958e7173d4a5929e7fe612b9f3443b6
MD5 b034179df3c6963ed98ba6e512a031f7
BLAKE2b-256 7eaf3ca2caeaa1f957863139fde4b5107a08e86aab5839c3e5ac4d08cded7bb5

See more details on using hashes here.

Provenance

The following attestation bundles were made for jun-0.1.1-py3-none-any.whl:

Publisher: publish.yml on gauthierpiarrette/jun

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page