Give your LangGraph agent a June memory — mirror chat history from any LangGraph checkpointer into a searchable, cited June knowledge canvas. Three commands, no code changes.
Project description
june-langgraph
Give your LangGraph agent a June memory. If your agent saves conversations with a LangGraph checkpointer (SQLite or Postgres), this connects that history to Junê — so you can search every conversation, ask questions about them ("what did we decide about pricing?") and get grounded, cited answers, and give the agent itself memory of past sessions.
No code changes required. Three commands:
pip install "june-langgraph[sqlite]" # [postgres] / [mysql] for server DBs
june-langgraph connect # one-time setup — it finds everything
june-langgraph watch # keeps June updated while your agent runs
connect is a small wizard: it looks for June on your computer (it finds the
Junê desktop app automatically), looks for your agent's chat database in the
current folder, checks the whole path works, and saves the setup. watch
then quietly mirrors every new message into a June canvas as your agent runs.
Run june-langgraph sync once to bring in the history you already have.
your LangGraph app ──▶ checkpointer DB ──▶ june-langgraph ──▶ June canvas
(unchanged) (unchanged) (watch/sync) (search · ask · cite)
Your checkpoint database is never modified — it is only read, and always through LangGraph's own deserializer, so what June sees is exactly what your agent saved.
Why
LangGraph checkpointers are built for resuming a conversation, not for finding one. The history lives in serialized checkpoint blobs across several tables — fine for the framework, hopeless for "show me everything we said about the contract". June turns that history into a searchable, cited knowledge graph.
Everyday commands
| command | what it does |
|---|---|
june-langgraph connect |
one-time setup wizard (safe to re-run any time) |
june-langgraph sync |
one catch-up pass — brings existing history into June |
june-langgraph watch |
keeps syncing while your agent runs (Ctrl+C to stop) |
june-langgraph status |
what's configured + how much has synced |
june-langgraph doctor |
checks every part of the setup, PASS/FAIL per item |
Everything is incremental: only new messages are sent, tracked per message in
a small ledger, so re-running never duplicates. If June is offline, watch
keeps trying quietly and catches up when it's back; your agent is never
affected.
For developers: mirror in-process instead
If you'd rather not run a second process, wrap your checkpointer — one line:
from langgraph.checkpoint.sqlite import SqliteSaver
from june_langgraph import JuneSaver
with SqliteSaver.from_conn_string("checkpoints.sqlite") as inner:
app = graph.compile(checkpointer=JuneSaver(
inner, # any BaseCheckpointSaver
june_url="http://127.0.0.1:8799", # the Junê app's local engine
api_key="local",
canvas="agent-chats",
state_file=".june_pushed.json", # dedupe ledger, survives restarts
))
LangGraph behaviour is untouched (resume, time travel, .list() — everything
delegates to the inner saver). New messages mirror to June at save time, while
they're still live objects — nothing is ever deserialized. Sync and async
graphs both work. If June is down the agent keeps running and unpushed
messages retry on the next save.
Pairs with june-mcp
Both packages speak the same env vars (JUNE_BASE_URL, JUNE_API_KEY,
JUNE_CANVAS) and the same canvas semantics. Point
june-mcp at the same canvas and Claude
(Desktop or Code) can answer questions over your agent's entire chat history —
june_answer with citations, june_search, june_enumerate — while
june-langgraph watch keeps it current. Your LangGraph app can also read June
at runtime (/v1/search, /v1/context) to give the agent long-term memory.
Which databases work
| your checkpointer | install | --db looks like |
|---|---|---|
SqliteSaver |
june-langgraph[sqlite] |
checkpoints.sqlite |
PostgresSaver |
june-langgraph[postgres] |
postgresql://user:pw@host/db |
PyMySQLSaver (community) |
june-langgraph[mysql] |
mysql://user:pw@host/db |
| anything else (Redis, Mongo, …) | that saver's package | its conn string + --saver |
The --saver escape hatch accepts any BaseCheckpointSaver via a
package.module:factory spec — the factory is called with your --db string:
june-langgraph sync --db "redis://localhost:6379" \
--saver "langgraph.checkpoint.redis:RedisSaver.from_conn_string"
So new community checkpointers work the day they exist, without waiting for a june-langgraph release. (Custom savers always use the full-scan change detection; the metadata-only fast path is SQLite-specific.)
Configuration
connect writes ~/.june/langgraph.json (key-holding, chmod 600). Everything
can be overridden per-run with flags (--db, --june-url, --june-key,
--canvas) or the env vars above. JUNE_LANGGRAPH_HOME relocates the config
directory. Custom state key? messages_key in the config file (default
messages).
Troubleshooting
Run june-langgraph doctor. It checks, in order: configuration → June
reachable → canvas resolves → database readable → ledger writable, and prints
a mapped hint for each FAIL. Exits 0 only when everything passes.
License
MIT. The Junê engine itself is a separate, closed-source product — this connector is the open part, by design.
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 june_langgraph-0.1.0.tar.gz.
File metadata
- Download URL: june_langgraph-0.1.0.tar.gz
- Upload date:
- Size: 24.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6fadd756e5c9532bdd962c64ca564f12189cd4f8b2d5f596ffd32c21ec208c7
|
|
| MD5 |
90d9583bf7dfbc26f1e887d5910b1dbf
|
|
| BLAKE2b-256 |
bb3235f7adda9f15b55517c9a8ea92b1d5a1688a782b76a94be6f34fd54d7160
|
Provenance
The following attestation bundles were made for june_langgraph-0.1.0.tar.gz:
Publisher:
publish.yml on Junemind/june-langgraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
june_langgraph-0.1.0.tar.gz -
Subject digest:
c6fadd756e5c9532bdd962c64ca564f12189cd4f8b2d5f596ffd32c21ec208c7 - Sigstore transparency entry: 2302598188
- Sigstore integration time:
-
Permalink:
Junemind/june-langgraph@c4953c4a4110c1ee863edc0fa8cf3a9349bb9323 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Junemind
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c4953c4a4110c1ee863edc0fa8cf3a9349bb9323 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file june_langgraph-0.1.0-py3-none-any.whl.
File metadata
- Download URL: june_langgraph-0.1.0-py3-none-any.whl
- Upload date:
- Size: 21.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b654f97a5921508584a18451d8b37d56852a7260132e30cc2e646bf006c37b2c
|
|
| MD5 |
ccd6ba32353c18b72ed232ef5c12d2e0
|
|
| BLAKE2b-256 |
79dd97688255dbc0d0126e49a0870b098f17821c03ed86391b03ee9735dd279d
|
Provenance
The following attestation bundles were made for june_langgraph-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on Junemind/june-langgraph
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
june_langgraph-0.1.0-py3-none-any.whl -
Subject digest:
b654f97a5921508584a18451d8b37d56852a7260132e30cc2e646bf006c37b2c - Sigstore transparency entry: 2302598262
- Sigstore integration time:
-
Permalink:
Junemind/june-langgraph@c4953c4a4110c1ee863edc0fa8cf3a9349bb9323 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Junemind
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c4953c4a4110c1ee863edc0fa8cf3a9349bb9323 -
Trigger Event:
workflow_dispatch
-
Statement type: