A plugin that helps Codex save, recall, and share reusable entities across workspaces.
⭐ Star the repo: https://github.com/AgentToolkit/altk-evolve
- Automatic recall through a repo-level Codex
UserPromptSubmithook when Codex hooks are enabled - Manual
evolve-lite:learnskill to save reusable entities into.evolve/entities/ - Manual
evolve-lite:recallskill to inspect everything stored for the current repo - Manual
evolve-lite:publishskill to publish private guidelines to your public repo - Manual
evolve-lite:subscribeandevolve-lite:unsubscribeskills to manage shared guideline repos - Automatic or manual
evolve-lite:syncto mirror subscribed repos into local recall storage
Entities and sharing data are stored in the active workspace under:
.evolve/
entities/
guideline/
use-context-managers-for-file-operations.md # private
subscribed/
memory/ # write-scope clone (publish target)
guideline/
my-published-guideline.md
alice/ # read-scope clone
guideline/
prefer-small-functions.md
audit.log
Each entity is a markdown file with lightweight YAML frontmatter.
Sharing configuration lives in evolve.config.yaml at the repo root, as a
single unified list of repos (both read- and write-scope):
identity:
user: alice
repos:
- name: memory
scope: write
remote: git@github.com:alice/evolve-memory.git
branch: main
notes: public memory for foobar project
- name: team
scope: read
remote: git@github.com:myorg/evolve-guidelines.git
branch: main
sync:
on_session_start: trueThis source tree intentionally omits lib/.
The shared library lives in:
platform-integrations/claude/plugins/evolve-lite/lib/
platform-integrations/install.sh installs Codex in this order:
- copy the Codex plugin source into
plugins/evolve-lite/ - copy the shared
lib/from the Claude plugin intoplugins/evolve-lite/lib/ - wire the marketplace entry
- wire the Codex hooks
Use the platform installer from the repo root:
platform-integrations/install.sh install --platform codexThat installs:
plugins/evolve-lite/.agents/plugins/marketplace.json.codex/hooks.json
Automatic recall requires Codex hooks to be enabled in ~/.codex/config.toml:
[features]
codex_hooks = trueIf you do not want to enable Codex hooks, you can still invoke the installed evolve-lite:recall skill manually to load or inspect the saved guidance for the current repo.
The installed Codex hook does not require git. It walks upward from the current working directory until it finds the repo-local plugins/evolve-lite/.../retrieve_entities.py script.
The installer always registers a SessionStart hook with matcher startup|resume; it runs on every Codex session start or resume and exits quickly unless sync.on_session_start is enabled and at least one repo is configured in evolve.config.yaml.
Evolve Lite treats shared guidelines as multi-reader / multi-writer git
databases. A single unified repos: list in evolve.config.yaml describes
every external guideline repo; each entry has a scope of read (subscribe
only) or write (publish target that is also pulled on sync).
Sharing uses evolve.config.yaml at the project root. Minimal structure:
identity:
user: yourname
repos:
- name: memory
scope: write
remote: git@github.com:yourname/evolve-memory.git
branch: main
notes: public memory for my open-source projects
sync:
on_session_start: trueThe .evolve/ directory is kept out of version control.
Use evolve-lite:subscribe to add either a read-only subscription or a
write-scope publish target. The repo is cloned directly into
.evolve/entities/subscribed/{name}/ so recall picks it up immediately.
Names must use only letters, numbers, ., _, and -.
Use evolve-lite:publish to share local guidelines via a write-scope
repo:
- The skill selects (or asks about) the write-scope target repo
- Pick a file from
.evolve/entities/guideline/ - Publish moves it into
.evolve/entities/subscribed/{repo}/guideline/, stamps it withvisibility: public,published_at,owner, and asourcelabel derived from the repo's remote - The original private guideline is removed from
.evolve/entities/guideline/
Because the publish target is also a subscribed repo, your next sync pulls in anything other writers have pushed to the same remote.
Use evolve-lite:sync to pull the latest changes from every configured
repo (both scopes). Read-scope repos use git fetch + git reset --hard;
write-scope repos use git fetch + git rebase so unpushed local publish
commits are preserved.
If sync.on_session_start: true is set in config, this runs automatically
whenever a Codex session starts or resumes.
Use evolve-lite:unsubscribe to remove any configured repo and delete its
local clone at .evolve/entities/subscribed/{name}/.
.evolve/
entities/
guideline/
private-guideline.md # private local guideline
subscribed/
memory/ # write-scope clone — publishes land here
guideline/
my-published-guideline.md
alice/ # read-scope clone
guideline/
her-guideline.md # recall annotates as [from: alice]
See the Codex example walkthrough for a step-by-step example showing the save-then-recall loop in a Codex workspace.
Analyze the current session and save proactive Evolve entities as markdown files.
Show the entities already stored for the current workspace, including
guidelines pulled from any write- or read-scope repo under
.evolve/entities/subscribed/.
Move a selected private guideline into a configured write-scope repo's
local clone at .evolve/entities/subscribed/{repo}/guideline/, stamp it
as public, commit it, and push it.
Add an entry to the unified repos: list (read- or write-scope) and clone
the remote into .evolve/entities/subscribed/{name}/.
Remove a configured repo from repos: and delete its local clone.
Pull the latest from every configured repo (both scopes). Write-scope repos use rebase to preserve unpushed local publish commits; read-scope repos use hard reset to mirror the remote exactly.
EVOLVE_DIR: Override the default.evolvedirectory location for entities, sharing data, audit logs, and the mirrored subscription store.
After installation, verify that:
plugins/evolve-lite/exists in the repo.agents/plugins/marketplace.jsoncontains theevolve-liteentry.codex/hooks.jsoncontains the EvolveUserPromptSubmitandSessionStarthooks
You can also run:
platform-integrations/install.sh statusevolve-lite/
├── .codex-plugin/
│ └── plugin.json
├── skills/
│ ├── learn/
│ │ ├── SKILL.md
│ │ └── scripts/
│ │ └── save_entities.py
│ ├── recall/
│ │ ├── SKILL.md
│ │ └── scripts/
│ │ └── retrieve_entities.py
│ ├── publish/
│ │ ├── SKILL.md
│ │ └── scripts/
│ │ └── publish.py
│ ├── subscribe/
│ │ ├── SKILL.md
│ │ └── scripts/
│ │ └── subscribe.py
│ ├── unsubscribe/
│ │ ├── SKILL.md
│ │ └── scripts/
│ │ └── unsubscribe.py
│ └── sync/
│ ├── SKILL.md
│ └── scripts/
│ └── sync.py
├── README.md
└── lib/ # copied in at install time from the Claude plugin