The official plugin marketplace for Mayfly and DeepSeek Harness (dsh): Ephemeral AI Lab's own plugins (source in this repo), curated dsh optional plugins, and community submissions.
Two things live here:
plugins/— the source of Ephemeral AI Lab's official plugins.registry/— the marketplace: one JSON manifest per listing. CI aggregates them intodist/index.json, the document Mayfly's/plugincommand and the website catalog consume.
In Mayfly (TUI):
/plugin # browse, search, inspect, install, remove
/plugin install <id> # e.g. /plugin install loop
Or with the dsh CLI directly (works for any profile):
# npm source
dsh plugin --profile mayfly add @deepseek-ai/dsh-terminal-bash @deepseek-ai/dsh-tool-terminal
# GitHub source (monorepo subdirectories work; pinned refs preferred)
dsh plugin --profile mayfly add 'github:Ephemeral-AI-Lab/dsh-plugins#main&path:plugins/loop'Restart the profile and start a new session after installing. Entries with
activation: profile-patch additionally need their rows in the profile's
cordis.patch.yml — the /plugin command does this for you; see
docs/market.md for the manual path.
| id | source | surfaces | what it adds |
|---|---|---|---|
codex-terminal |
official | server | Codex-style persistent shell: exec_command / write_stdin |
loop |
official | server · web | Recurring prompts & alarms: loop_* tools, /loop, Web panel |
mock |
official | server · web | Deterministic mock model turns: /mock run / replay (unstable) |
sessions |
official | server | Multi-session orchestration: session_status/create/send tools |
coding-plan |
official | server | Reuse codex login / grok login subscriptions as providers |
preset-builder |
official | web | Preset details page in dsh Web Settings |
workbench-ui |
official | web | The Web workbench frame other panels dock into |
sidechat |
official | server · web | Side-chat panel on the Web workbench (needs workbench-ui) |
terminal |
dsh | server | PTY terminal: terminal_open/send/read/signal/close/list |
lsp |
dsh | server | Read-only lsp navigation tool |
mcp |
dsh | server | MCP client: mcp__server__tool external tools |
acp |
dsh | server | Agent Client Protocol server |
code-runtime-ts |
dsh | server | run_code TypeScript worker-thread runtime |
code-runtime-py |
dsh | server | run_code Python runtime |
server plugins work in any frontend (tools render generically); web adds a
dsh Web client module; tui adds Mayfly-native UI. A plugin is useful in a
given frontend if it has server or that frontend's own contribution.
Published an npm package (or a GitHub repo with committed build output)? Submit a listing:
- Read
registry/community/README.md. - Copy
registry/submission-template.jsontoregistry/community/<slug>.jsonand open a PR. - CI scratch-installs every declared source; a maintainer reviews against the review checklist.
The manifest spec is docs/market.md — manifests are
discovery/install metadata only; the runtime contract is still your
package plus its cordis.patch.yml.
node scripts/validate-manifests.mjs # schema + semantics, zero deps
node scripts/verify-packages.mjs # npm tarball + GitHub scratch-install checks
node scripts/build-index.mjs # rebuild dist/index.json + dist/catalog.jsondist/ is generated — changes land through the index-publish workflow's
auto-merged PR, never by hand.
Each plugin under plugins/ is an independently installable package:
cd plugins/loop
pnpm install
pnpm test
pnpm buildThe source tree intentionally stays outside the DeepSeek Harness repository; dsh composes plugins through profile-scoped installation and patch layers. See AGENTS.md for the agent working rules and docs/ for architecture notes and how-to guides.
- Marketplace & manifest spec
- Plugin docs — each plugin directory has its own README
- Architecture & how-to guides
- Mayfly · Mayfly website
Issues, ideas, and pull requests are welcome. Keep plugins focused, document their runtime contracts, and include tests for changes to tools, persistence, or UI behavior.
Released under the MIT License.
