Skip to content

feat: add leteo plugin to the marketplace - #28

Open
asanabrial wants to merge 5 commits into
zai-org:mainfrom
asanabrial:feat/add-leteo-plugin
Open

asanabrial wants to merge 5 commits into
zai-org:mainfrom
asanabrial:feat/add-leteo-plugin

Conversation

@asanabrial

@asanabrial asanabrial commented Aug 26, 2026 •

Copy link
Copy Markdown

Description

Adds Leteo to the marketplace: local-first persistent memory for coding agents — one Rust binary over one SQLite database, no service to sign up to. Sessions, prompts and decisions survive a compaction and a restart.

The plugin carries configuration, not the binary. leteo is installed separately and every hook here invokes it from PATH; the plugin README says so up front.

What it registers

Event Command
SessionStart (startup|clear) leteo hook session-start
SessionStart (compact) leteo hook post-compaction
UserPromptSubmit leteo hook user-prompt-submit
SubagentStop leteo hook subagent-stop
SessionEnd leteo hook session-stop

Plus the MCP server on the agent tool profile in .mcp.json, and a skill under skills/memory carrying the protocol that tells the agent when to reach for those tools.

Every hook is best-effort and bounded: Leteo gives up before Claude Code does, and a hook that could not do its work says so rather than failing silently.

Notes for review

  • node .github/scripts/build-skills.mjs passes locally against this branch; the skill ships valid frontmatter and references no scripts.
  • The marketplace diff is six added lines and nothing else — the file's missing trailing newline is left as it was.
  • Vendored under plugins/leteo/ to match glm-plan-usage and glm-plan-bug, with the manifest at .claude-plugin/plugin.json. Happy to switch the entry to a github source pointing at the upstream repo instead if you would rather not carry a copy — that would also keep version bumps off your plate.
  • MIT licensed. Leteo is a reimplementation of Engram and keeps that attribution in its NOTICE.

I maintain the project and will keep the entry current — tell me the cadence you want for version bumps.

Two corrections since this was opened

Both mine, both pushed to this branch:

  1. The first version shipped the wrong bundle. Leteo has a ZCode-targeted variant that registers three events rather than five, and that is what I submitted. This marketplace is for Claude Code, which fires all five — installed from here, that bundle would have left SubagentStop and SessionEnd unregistered and said nothing: no sub-agent findings captured, and no session ever closed. It is now byte-identical to the Claude Code bundle upstream.
  2. The README told people to run commands that do not exist (zcode plugins marketplace add / install). It now carries this marketplace's own claude plugin marketplace add / claude plugin install.

Checklist

Leteo is local-first persistent memory for coding agents: one Rust binary over
one SQLite database, no service to sign up to. Sessions, prompts and decisions
survive a compaction and a restart.

The bundle registers the three lifecycle events this client fires — two on
SessionStart (startup|clear and compact) and one on UserPromptSubmit — plus the
MCP server on the agent tool profile and a skill carrying the memory protocol.

Three rather than five: SubagentStop and SessionEnd are not among the seven
events supported, so the hooks named for those have nowhere to land, and
session-stop is deliberately not moved onto Stop, which fires at the end of
every reply rather than at the end of a session.

The plugin carries configuration, not the binary; leteo is installed separately
and every hook here invokes it from PATH.
…have

`zcode plugins` lists and enables installed plugins; it does not add
marketplaces. Checked against zcode 0.16.5. Adding one is Settings -> Plugins
-> Create -> Add marketplace.
@asanabrial

Copy link
Copy Markdown
Author

Pushed a correction to the plugin README: it told people to run zcode plugins marketplace add / zcode plugins install, and neither exists. Checked against a real zcode 0.16.5 — zcode plugins lists and enables installed plugins and nothing more, and adding a marketplace is Settings → Plugins → Create → Add marketplace. My mistake, taken from a secondary source rather than from the client.

One thing that came out of the same check, in case it is useful here: the ZCode client resolves a marketplace given as {"source": "github", "repo": "owner/repo"} and reads its manifest from .claude-plugin/marketplace.json — it ships with anthropics/claude-plugins-official registered exactly that way. So this repository is already reachable from ZCode as it stands, without a separate manifest.

Still happy to switch the entry to a github source pointing at the upstream repo instead of carrying a copy here, if you prefer — that keeps version bumps off your side.

This marketplace is for Claude Code -- its prerequisites say so, its install
commands are `claude plugin marketplace add`, and its manifest carries the
Claude Code marketplace schema. The bundle submitted was the ZCode variant,
which registers three lifecycle events rather than five.

Claude Code fires all five. Installed from here, the ZCode bundle would have
left SubagentStop and SessionEnd unregistered and said nothing about it: no
sub-agent findings captured before their context is discarded, and no session
ever closed.

The bundle is now byte-identical to the Claude Code one upstream, and the README
carries this client's install commands.
The vendored bundle was the 0.1.2 one. It lacked mem_consolidate, which 0.3.0 serves to agents, and its manifest named a version two releases old. The four bundle files are now byte-identical to plugin/claude-code at the v0.3.0 tag, which is what the released binary is written against; the README's language count follows the release from twelve to thirteen.
@asanabrial

Copy link
Copy Markdown
Author

Synced the bundle to the current release, 0.3.0. The copy here was the 0.1.2 one: its manifest named a version two releases old, and its skill did not mention mem_consolidate, a tool the 0.3.0 server hands to agents. plugin.json, .mcp.json, hooks/hooks.json and skills/memory/SKILL.md are now byte-identical to plugin/claude-code at the v0.3.0 tag — the tag rather than upstream main, because the skill has to describe the binary people actually install. claude plugin validate passes for the plugin and for the marketplace, and build-skills.mjs still builds.

This is the drift a vendored copy picks up with every release, so the offer stands: I can point the entry at the upstream repository instead, and the version bumps stop landing here.

plugin.json named 0.3.0, and the skill still described the 0.3.0 opening block (pinned memories with a preview) and lacked mem_update's find/replace edit, which the 0.4.x server offers. Both files are now byte-identical to plugin/claude-code at the v0.4.2 tag; .mcp.json and hooks/hooks.json were already identical.
@asanabrial

Copy link
Copy Markdown
Author

Synced the bundle to the current release, 0.4.2. plugin.json named 0.3.0, and the skill still described 0.3.0's opening block and lacked mem_update's find/replace edit, which the 0.4.x server offers. plugin.json and skills/memory/SKILL.md are now byte-identical to plugin/claude-code at the v0.4.2 tag; .mcp.json and hooks/hooks.json already were. claude plugin validate passes for the plugin and for the marketplace, and build-skills.mjs still builds.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant