Graphene
See your coding agents' plan and change it before any code.
uv tool install git+https://github.com/Alex-lop/Graphene
then graphene demo to watch a recorded run, no API key needed
Why I built this
I believe that whether it comes from new models, better harnesses or something off the LLM frame entirely, the limit on building software won't be tokens or cost. It'll be the human direction it takes to actually get the software out. I know that sounds a little wild. But no matter how many tokens you have, if you don't say which direction the application should go, the agent has to infer most of it, and you find out what it inferred in the diff, after the time and money are spent. Graphene tries to bridge that: the agent shows you what it understood, as a plan, and you shape it before anything runs.
What it looks like
A real run from tonight on feeds, a small test repo I built: csv and json load, a new supplier's XML doesn't yet, and there are acceptance checks the agents never see. Claude Code (on Sonnet) planned and did the work. Trimmed where you see …:
$ graphene ask "Look at this repo. I want the new Northwind XML feed to load the same way csv and json …"
the planner says:
I left these alone: vendor/, legacy/, normalize/money.py (its `to_major` is flagged as owned by a
ticket), tests/test_contract.py (marked as not to be edited), and scripts/nightly.sh (stale, but it
only runs csv).
$ graphene plan accept && graphene run --parallel 2
run: 2 done · agents <1 min, $0.3009 at list price · you 0 acts, 0 min
$ graphene plan --view tree
Load the Northwind XML feed with the same `load` command as csv and json…
┌───────────────┴───────────────┐
✓ zero ✓ xml
Skip zero prices for every… Northwind XML source
│ │
✓ zero-rule ✓ xml-feed
Reject price 0 in… $0.13 · <1m Add the xml… $0.17 · <1m
2 sub-goals · 2 leaves
$ git log --graph --oneline
* 6944ab4 Add the xml reader and wire it in (xml-feed)
|\
| * 6449b2a Add the xml reader and wire it in
|/
* 807669b Reject price 0 in validation (zero-rule)
…
It asked me nothing this time. It said what it would leave alone, which is exactly what I'd have checked first, and it was right. Against the hidden checks it passed 18 of 20 (the 2 misses are a change of mind I never sent) and 12 of 12 held-out, and the six files I'd put off limits weren't touched. Honestly though, in the three comparisons so far a plain paragraph to the same agent did just as well for less (the latest). What I'm betting on is when you find out what it understood: before the work, not after.
What's different
- It's held by git and the check, not by the agent promising to behave.
- It runs whatever executor you like: Claude Code, Codex, Nemotron, or any command.
- Your history reads like the plan: every leaf lands as its own merge.
The meter
While the agents work, graphene watch shows what each one is doing and what it has spent, and every run ends with one line: the agents' minutes and dollars, next to your own acts. Not claiming it makes the work any better (it just makes it visible), but honestly, the second number is the one I care about.
Try it on your repo
uv tool install git+https://github.com/Alex-lop/Graphene
cd your-repo && graphene init # picks a planner and an executor: claude or codex
graphene ask "what you want, in a paragraph"
graphene watch
In watch: y accepts the plan, d drops a leaf you don't want, R runs what's ready. ? shows the rest.
Where it's at
Honestly, it's early, and I'm building it in the open. If you try it on a real repo, what I most want to hear is where the plan misread what you meant, because that's the whole game. Bugs and ideas go in Issues.
How it works · Nemotron on Token Factory · my site · Apache-2.0
Metadata
Release files for graphene-map 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| graphene_map-0.5.0.tar.gz | 2.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| graphene_map-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.0 MB
Release files / graphene_map-0.5.0.tar.gz
| Download URL | graphene_map-0.5.0.tar.gz |
|---|---|
| Size | 2.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
161f69ad4251a843bdef52cf9419171299109b1919dcbdfbf841c1da191bf747
|
|
BLAKE2b-256 checksum How to use checksums |
f473b28bfe3c37d087852eb9fd2df41b1588b5dae204df69d55a51c19ec5550a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / graphene_map-0.5.0-py3-none-any.whl
| Download URL | graphene_map-0.5.0-py3-none-any.whl |
|---|---|
| Size | 372.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f5a4aea360a523b32ce7685d0a1c81ba3d5300d8415a7f694b5aa839cb5c1a4f
|
|
BLAKE2b-256 checksum How to use checksums |
0c1705819e255c5c6ad05fda2736c90ee23d9281edec0f21de68633809480cf3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency log