llmpro
llmpro keeps what your AI assistants know in one place, and keeps secrets out of it.
Claude Code, Codex, Copilot, Copilot CLI and opencode each keep their own chats, memories, instruction files and skills. llmpro collects them into one plain-text git repo, the store (default ~/.agents). Every assistant can read it. Secrets are redacted on the way in and checked before every commit and push.
Install
You need Python 3.11 or later and git.
pipx install llmpro
For the git identity features, install gitpro too. Either of these works:
pipx install "llmpro[git]"
pipx install gitpro
Set up
First look at what would change. This changes nothing.
llmpro setup -n
Then apply it. llmpro shows the same list, asks once, and writes an undo script.
llmpro setup
Setup creates the store, moves each assistant's chat folders into it (a link stays behind), points each assistant's instruction file at the store, installs the secret-check hooks, registers the llmpro MCP server with Claude Code and Codex, and puts the llmpro skill in the store. To import everything now:
llmpro sync --local
Commands
llmpro syncimports chats, memories and instructions, commits, and exchanges commits with your hub.--localleaves the hub out.-nshows what a sync would do.llmpro find WORDS...searches past chats and memories.llmpro checklooks for secrets in the store.--stagedand--historychange what it looks at.--fixrebuilds the memory index.llmpro summarysets the summary at the top of a chat.llmpro setupsets up this machine.-nonly shows.-ydoes not ask.llmpro uninstalltakes llmpro off this machine. It keeps the store.-nonly shows.llmpro resumelists the open assistant sessions.llmpro resume TARGETcontinues one.llmpro resume --watchkeeps the list current. See Live sessions.llmpro send TARGET TEXTgives one message to a session and prints the answer. See Live sessions.llmpro git ...runs gitpro, if it is installed.llmpro mcpserves llmpro's tools to assistants over stdio.
Every command accepts --store PATH, -q and -v. Many accept --json. Exit codes: 0 done, 1 a check or step failed or something is missing, 2 usage or other error.
For your assistants
llmpro gives assistants three things.
- The store's
AGENTS.md, which tells them to read the memory index first. - The skill
skills/llmpro, copied into the store byllmpro setup. Assistants that readskills/from the store get it with no more work. - The MCP server, with the tools
find,checkandsync_status. When gitpro is installed it adds gitpro's tools with agit_prefix. All of them are read-only.
Claude Code plugin
The plugin brings the skill, the MCP server and a hook in one step.
/plugin marketplace add Yantrakar/llmpro
/plugin install llmpro@llmpro
The hook runs before each Bash call. If gitpro is installed and can check commands, llmpro hands the call to gitpro agent-check. Otherwise it does nothing and never blocks. If gitpro's own plugin is enabled too, the check runs twice. Keep one of them.
llmpro setup also registers the MCP server with Claude Code. With the plugin installed, Claude Code then starts it twice. Keep the plugin's and run claude mcp remove --scope user llmpro.
Live sessions
Linux only. llmpro reads the records that Claude Code, Copilot CLI and opencode keep of their sessions. It never writes into them.
llmpro resumelists the open sessions here and on the machines in[machines]ofconfig.toml, each with its state:needs-approval,needs-reply,workingorunknown.--localasks this machine only.--jsonprints the rows.llmpro resume TARGETcontinues a session in your terminal. TARGET is[tool:]name-or-id-prefix[@machine]. A session that is open in another terminal on this machine is taken over only while it is idle:needs-replyfor at least 10 seconds, its terminal untouched for 60 seconds, and no child processes. llmpro shows what it will close, asks once (-yanswers yes), stops the process, checks again, sends it SIGHUP (never SIGKILL) and continues the session here. Anything typed there and not sent is lost, and llmpro prints the command that continues the session again. A session on another machine is taken over by that machine's llmpro, over ssh.-nshows the check and the plan and changes nothing.llmpro resume --watchkeeps the list current and sends a desktop notice when a session starts waiting.[sessions] refreshandnotifyinconfig.tomltune it.llmpro send TARGET TEXTgives one message to a session that is not open, to an opencode session, or to a new session (claude:new,copilot:new,opencode:new, with--folder DIR). It prints the answer.TEXTof-reads stdin.-nshows the command and runs nothing.
Limits on send:
- The message goes to the tool on stdin, never on the command line.
- llmpro never adds a flag that allows tools or skips a permission. A turn that needs a permission is refused by the tool.
- It never types into a session that is open in a terminal.
- A message carries a hop count.
[sessions] max_hops(default 2) stops loops made by mistake.sends_per_hour(default 20) limits one session.send_timeout(default 900 seconds) ends a send that takes too long. - From inside a session, a send to a local-only project is refused. This stops mistakes. It is not a security boundary.
sendis not an MCP tool. The MCP server stays read-only.
Push guard
The push guard checks what a push adds, in any repo, for secrets. If it finds one, the push stops.
It works through gitpro's global git hooks. llmpro setup adds this to ~/.config/gitpro.toml, in the same preview and question as the rest, and keeps the file as it was in ~/.config/gitpro.toml.before-llmpro:
[guard]
chain_to = "~/.local/share/llmpro/hooks"
Then it runs gitpro setup -y --agent none, so gitpro's hooks run the push guard. The undo script puts the file back. llmpro uninstall takes the line out again. If the file is one llmpro cannot edit safely (for example chain_to is already set), setup leaves it and prints the line to add.
To let one push through, run LLMPRO_SKIP=1 git push.
Keep work chats on this machine
Folders listed in local_only keep their chats out of the git history that you sync. With gitpro installed you can do it by git identity instead. In the store's config.toml:
[privacy]
local_only = ["~/code/private"]
local_identities = ["work"]
Chats of any project that gitpro places under the work identity go to local/, which git ignores. If llmpro cannot tell which identity a folder belongs to, its chats stay local. If gitpro is missing while local_identities is set, sync stops and says why.
How gitpro fits
gitpro is a separate tool that picks the git name, email, SSH key and commit signing for each repo by its remote. It has its own releases. llmpro never imports it: it finds the gitpro program, asks what it can do, and runs its commands. If gitpro is missing or older than 0.4, the git features are hidden and the rest works. See https://github.com/Yantrakar/gitpro.
When gitpro has setup work to do, llmpro setup lists it in the same preview and runs gitpro setup -y --agent none after your yes. The option --agent none stops gitpro from registering a second MCP server and hook.
Uninstall
llmpro uninstall -n
llmpro uninstall
This takes back what setup did: the hooks, the registrations and the moved folders. The store is never deleted. Every setup and uninstall writes an undo script, and prints its path.
Development
uv venv .venv && uv pip install -e '.[test]'
.venv/bin/pytest -q
Tests run offline, in a temporary home folder, with a fake gitpro. See docs/releasing.md for how a release is made.
Metadata
Release files for llmpro 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| llmpro-0.1.4.tar.gz | 159.4 kB | With provenance | Details for llmpro-0.1.4.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| llmpro-0.1.4-py3-none-any.whl | Python 3 | none | any | Details for llmpro-0.1.4-py3-none-any.whl |
Total release size: 347.4 kB
Release files / llmpro-0.1.4.tar.gz
| Download URL | llmpro-0.1.4.tar.gz |
|---|---|
| Size | 159.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f01d8755063d44563667a532b51928c93922cc523f745340e1569729ce023dbe
|
|
BLAKE2b-256 checksum How to use checksums |
57d615de7e0b6e868b180c3904a6f107ae19e062569dd32fe814634c7f9017dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 27, 2026.
Transparency logRelease files / llmpro-0.1.4-py3-none-any.whl
| Download URL | llmpro-0.1.4-py3-none-any.whl |
|---|---|
| Size | 188.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0c6b7e5878317444c9cadcd068bab0b99f2be815dfdbd21dba850bfc6dc1844c
|
|
BLAKE2b-256 checksum How to use checksums |
3fa37f7d796b6438908ee80150732c9b057dc1cbb8f5a3cf11a2c989a90be6f9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 27, 2026.
Transparency logSecurity for llmpro 0.1.4
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for llmpro-0.1.4.tar.gz
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 27, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.