@1agh/maude

中文文档
2.0.8发布于 2026/11/08MITES Module构建来源已验证近 30 天下载 2924

Marketplace of Claude Code plugins by Michal Dovrtěl: design (canvas-first design iteration) + flow (generic agentic workflow loop with .ai second brain). Ships the maude CLI (with mdcc legacy alias) to scaffold workspace, run the design dev serve

原始使用文档
文档目录18 节
  1. Quick start
  2. 1. Add the marketplace inside Claude Code
  3. 2. Install the plugins you want
  4. 3. Install the CLI
  5. 4. Bootstrap a repo
  6. Health check — maude doctor
  7. Sidecar cache — maude cache
  8. Plugins call maude for executable logic
  9. Runtime requirements
  10. Collaboration model
  11. Security
  12. What's where
  13. Workspaces
  14. Updating
  15. Releasing
  16. One-time setup (project owner)
  17. Local development (plugin authors)
  18. License

Maude

A personal marketplace of Claude Code and Codex plugins. Two plugins today, plus a maude CLI for scaffolding and running the bundled dev tooling.

📚 Full docs: https://maude.sh (or browse the source under site/content/docs/ until the public URL lands). Contributing? See CONTRIBUTING.md. Security? See SECURITY.md.

PluginWhat it does
designCanvas-first iteration on TSX/JSX mocks under .design/ — element selection via Cmd+Click, auto-managed dev server, chained UX/DS critique. Canvases can also be video-comps (Remotion compositions previewed in-app, exported to MP4/GIF through Maude's own capture engine — no extra install).
flowGeneric agentic workflow loop with a second-brain .ai/ workspace. /flow:plan, /flow:execute, /flow:validate, /flow:done, /flow:bug-rca, /flow:bug-fix, /flow:release, /flow:record-ddr, /flow:init, /flow:run (10 commands; variants are flags — see Flow migration). Project-agnostic via <project> placeholders + per-repo .ai/workflows.config.json.

Plus the maude CLI — maude init scaffolds a fresh .ai/ workspace from the flow plugin skeleton; maude design serve boots the design dev server. The legacy mdcc alias still works (prints a deprecation warning) and will be removed in v0.17.x.

Quick start

Codex CLI: use the native plugin installation guide. It uses the same workflow procedures; Studio ACP support is a separate follow-up.

Using Maude Desktop? With only Claude Code installed, the desktop app's built-in chat panel auto-loads the design + flow plugins for its session — /design:* and /flow:* just work, nothing to install (power users who already installed the plugins see a no-op, no double-load). The steps below are the manual / power-user path — for the maude CLI, the web maude design serve flow, or driving /design:* from your own terminal Claude Code. Full detail: maude.sh/desktop.

1. Add the marketplace inside Claude Code

/plugin marketplace add 1aGh/maude

2. Install the plugins you want

/plugin install design@maude
/plugin install flow@maude

Then /reload-plugins and you should see /design:edit, /design:*, /flow:plan, /flow:execute, etc.

3. Install the CLI

# From npm:
npm i -g @1agh/maude

# Or directly from GitHub:
npm i -g github:1aGh/maude

After install you have these bins on $PATH:

  • maude — the primary CLI (init, config, design serve).
  • mdcc — legacy alias for maude. Prints a deprecation warning; will be removed in v0.17.x.

4. Bootstrap a repo

In any project root:

maude init                          # scaffold .ai/ second-brain workspace

Then inside Claude Code (with flow@maude installed):

/init                  # Anthropic's built-in — generates CLAUDE.md tailored to your codebase
/flow:init    # populates .ai/workflows.config.json with detected stack
/flow:run --status     # confirm everything wired up

/init writes the CLAUDE.md Claude auto-loads every session (conventions, build commands, gotchas). /flow:init handles the structured workspace config — they're complementary, not duplicates.

Health check — maude doctor

maude doctor reports missing dependencies, config schema errors, stack drift, and missing quality-gate declarations in one shot. --fix applies safe auto-fixes (prompts per dependency install; never overwrites existing user config values). --json for programmatic consumers. Run it after stack changes or before opening a PR.

maude doctor          # full health check (deps + config + quality)
maude doctor --fix    # install missing deps (per-item prompt) + apply safe config fixes
maude doctor --json   # machine-readable envelope

Quality gates are declared in .ai/workflows.config.json under the top-level quality map — a flat gate → shell command mapping (e.g. { "lint": "pnpm lint", "tests": "pnpm test" }). Flow commands (/flow:validate, /flow:validate --fast, /flow:execute --quick) read it directly and run each via eval. There is no maude quality run wrapper — pnpm <script> is already the runner. Hook it into your own pre-commit tool with a one-liner: eval $(jq -r '.quality.lint' .ai/workflows.config.json). Populate the block by running maude doctor --fix once your package.json scripts exist (additive — it never overwrites a command you tuned).

Sidecar cache — maude cache

Flow + design commands reuse expensive cross-session work through a small sidecar cache at .ai/cache/ (DDR-061): domain research (skips 30–90 s of WebSearch on a same-domain brief), codebase-intelligence scans (skips rescan when the tree is unchanged), parsed design-system vocabulary, and security-review reuse (one shared 1-hour window across /flow:validate, /flow:done, /flow:validate --security). Correctness comes first — most layers are content-addressed (a changed input changes the key → guaranteed miss), and a stale entry is never served speculatively.

maude cache list              # layers, entry counts, sizes, last-write time
maude cache stats             # hit/miss counters + hit-rate per layer
maude cache inspect <layer>   # list a layer's entries; add a <key> to print one
maude cache clear [layer]     # wipe one layer (or everything)

The research/domain and codebase-intelligence layers are committed (deterministic on a given tree, so collaborators share the hit); the per-brief, design-context, security, and scenario layers are gitignored. maude init drops a .ai/.gitignore that encodes the split.

Plugins call maude for executable logic

Plugin slash-commands reach all executable logic through the on-PATH maude binary — never a relative cli/lib/*.mjs path or a raw $CLAUDE_PLUGIN_ROOT/dev-server/bin/*.sh invocation (DDR-062). The marketplace copies each plugin alone (no sibling cli/, no dev-server/), and a flow command's $CLAUDE_PLUGIN_ROOT points at the flow plugin (which has no dev-server at all) — so the only contract that holds across every install shape is maude, which resolves bundled helpers from its own package root. Cache/preflight go via maude cache … / maude preflight …; the design dev-server's bash helpers go via maude design <verb> (screenshot, server-up, prep, slug, smoke, runtime-health, …) — see maude design help. Keep the global maude current; a stale binary means stale helpers.

Runtime requirements

  • Node ≥ 20 — for the dev server and CLI. Zero npm runtime deps.
  • Claude Code — desktop app, CLI, or IDE extension.
  • Optional: agent-browser for design screenshot evidence.

Collaboration model

Two clean paths, no middle ground (DDR-047):

  • v1.0 — git handoff OR loopback multi-tab. Push / pull is the cross-machine story. On a single machine, two browser tabs (or two Claude Code instances editing the same repo) sync cursors, comments, and annotations live over loopback WebSocket. The dev server refuses any non-loopback host header on the collab WS endpoint.
  • v1.1 — deploy a hub (Phase 9, in-flight). Cross-machine live collab needs a hub binary you deploy yourself. No tunnel mode; no shared cloud. Boot order can't eat your work (DDR-102): a per-machine journal tells clean catch-ups apart from genuine divergence; diverged canvases snapshot both versions to _history/ before the newer one wins, so the loser is one /design:rollback away — and maude design status reports per-canvas sync state honestly (synced / pending / auth-rejected).

Security

Solo mode (the default) is fully local — no accounts, no telemetry, no network trust surface, and the canvas sandbox is on by default. Linked (hub) mode is opt-in and carries a documented trust model with disclosed, bounded residuals (hub-pushed content is treated as untrusted input). The full account — what runs where, what the canvas sandbox does and doesn't close, .tsx sync's double opt-in, untrusted-context handling — is at /docs/security (source: site/content/docs/security.mdx). To report a vulnerability, see SECURITY.md.

What's where

User-facing docs live in two places — the README points you the right way:

The docs site auto-generates per-command pages from plugins/{flow,design}/commands/*.md frontmatter and a typed schema reference from plugins/flow/.claude-plugin/config.schema.json. Adding a new command → docs update on next build.

Workspaces

The repo is a pnpm workspace monorepo with one published npm package (@1agh/maude). Internal workspaces are "private": true and never publish:

WorkspacePurpose
. (root)The single npm publisher — CLI, dev-server entry, plugin templates that ship to npm.
site/Docs site — Fumadocs + Next.js, served by Cloudflare Workers (DDR-005).
apps/studio/Zero-dep Node dev server + browser client. Bundled output (dist/) is the only thing in the npm tarball.
apps/hub/Reserved for the v1.1 federated hub (Phase 9).

Common scripts at the root:

pnpm install          # bootstrap everything
pnpm dev              # boot the design dev server
pnpm dev:site         # docs site dev server
pnpm build            # build every workspace that defines `build`
pnpm lint             # biome over the whole repo
pnpm test             # node --test over cli/**/*.test.mjs
pnpm changeset        # add a changeset for the next release

The site workspace's Next.js dependencies are heavy — contributors fixing plugin code can keep working with pnpm install --filter '!@maude/site' to skip them.

Updating

In Claude Code, after a new version lands on the marketplace:

/plugin marketplace update maude
/plugin install design@maude
/plugin install flow@maude

Releasing

The npm package (@1agh/maude) and the Claude Code plugins (design@maude, flow@maude) share one version. The standard release path is Changesets:

# 1. Each PR with shipped behavior includes a changeset
pnpm changeset

# 2. When ready to release, the maintainer runs:
pnpm version            # = bash scripts/changesets-version.sh
                        #   → consumes .changeset/*.md
                        #   → bumps package.json + CHANGELOG
                        #   → propagates version to plugin manifests
                        #   → re-runs scripts/check-version-parity.sh

git commit -am "chore: release v$(node -p "require('./package.json').version")"
# ANNOTATED (-a -m) is required — `git push --follow-tags` only pushes annotated
# tags. A lightweight `git tag vX.Y.Z` will silently stay local and no release
# workflow ever fires.
VER="v$(node -p "require('./package.json').version")"
git tag -a "$VER" -m "$VER"
git push --follow-tags

The v* tag triggers .github/workflows/publish.yml, which re-runs the parity check, verifies the tag matches package.json, builds workspaces, publishes with --access public --provenance, and creates a GitHub Release using the CHANGELOG entry for that version.

scripts/bump-version.sh patch|minor|major|X.Y.Z remains as a manual fallback for emergency hotfixes outside the Changesets flow.

One-time setup (project owner)

  1. Create an Automation token at https://www.npmjs.com/settings/~/tokens.
  2. GitHub repo → Settings → Secrets → Actions → NPM_TOKEN.
  3. id-token: write is already enabled in publish.yml for npm provenance.

Local development (plugin authors)

/plugin marketplace add /absolute/path/to/maude
/plugin install design@maude
/plugin install flow@maude

Working on plugin internals:

  1. Edit in place — the local marketplace points at your working tree.
  2. Reload after edits:
    • Commands / agents / skills → /plugin marketplace update maude then /reload-plugins.
    • Dev server code → kill the running process (lsof -i :<port> → kill) and let the next /design:edit invocation auto-restart.
  3. Test in isolation — open Claude Code from a scratch project (cd /tmp && claude) so plugins aren't entangled with this repo's own .ai/.
  4. Dogfood — Maude itself uses flow for plan/execute/done. Once flow is installed against this marketplace, you can drive its own development with /flow:plan, /flow:execute, etc.

License

MIT — see LICENSE.

版本与发布记录

@1agh/maude 共发布 126 个版本,首次发布于 2026/05/20;过去 12 个月发布了 126 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.0.8latest2026/11/08今天
2.0.62026/11/061 天前
2.0.42026/11/052 天前
2.0.32026/11/053 天前
2.0.22026/11/043 天前
2.0.12026/11/044 天前

其他发布通道:next → 2.0.0-rc.2。

关于 @1agh/maude 的常见问题

@1agh/maude 是什么?

Marketplace of Claude Code plugins by Michal Dovrtěl: design (canvas-first design iteration) + flow (generic agentic workflow loop with .ai second brain). Ships the maude CLI (with mdcc legacy alias) to scaffold workspace, run the design dev serve

如何安装 @1agh/maude?

在项目目录运行 npm install @1agh/maude,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mdcc、maude、mdcc-safe、maude-safe、claude-design-server,可以用 npx mdcc 直接运行。

@1agh/maude 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/1agh__maude 是否存在。

@1agh/maude 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@1agh/maude 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@1agh/maude 可以商用吗?

@1agh/maude 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@1agh/maude 的下载量有多少?

根据 npm 官方下载统计,@1agh/maude 在 2026/10/05 – 2026/11/03 这 30 天内被下载 2,924 次,日均约 97 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@1agh/maude 还在维护吗?

最新版本 2.0.8 发布于 2026/11/08(今天);至今共发布 126 个版本,其中过去 12 个月发布了 126 个;首次发布于 2026/05/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。