@1agh/maude
v0.29.0
Published
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
Maintainers
Readme
Maude
A personal marketplace of Claude Code plugins. Two plugins today, plus a maude CLI for scaffolding and running the bundled dev tooling.
📚 Full docs: https://maude.iagh.cz (or browse the source under
site/content/docs/until the public URL lands). Contributing? See CONTRIBUTING.md. Security? See SECURITY.md.
| Plugin | What it does |
| ------ | ------------ |
| design | Canvas-first iteration on TSX/JSX mocks under .design/ — element selection via Cmd+Click, auto-managed dev server, chained UX/DS critique. |
| flow | Generic agentic workflow loop with a second-brain .ai/ workspace. /flow:plan, /flow:execute, /flow:utils-verify, /flow:validate, /flow:done, /flow:init, /flow:record-ddr, /flow:scenario, …. 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
1. Add the marketplace inside Claude Code
/plugin marketplace add 1aGh/maude2. Install the plugins you want
/plugin install design@maude
/plugin install flow@maudeThen /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/maudeAfter install you have these bins on $PATH:
maude— the primary CLI (init,config,design serve).mdcc— legacy alias formaude. 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 workspaceThen 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: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 envelopeQuality 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:utils-verify, /flow: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-browserfor 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
hostheader 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.
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:
- Reference (every command, every config key, recipes for Next.js / Expo / monorepo) →
site/content/docs/(served at https://maude.iagh.cz once Vercel is wired — see DDR-005). - Quickstart + contributor info → this README.
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:
| Workspace | Purpose |
| --------- | ------- |
| . (root) | The single npm publisher — CLI, dev-server entry, plugin templates that ship to npm. |
| site/ | Docs site — Fumadocs + Next.js, deployed to Vercel (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 releaseThe 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@maudeReleasing
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")"
git tag "v$(node -p "require('./package.json').version")"
git push --follow-tagsThe 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)
- Create an Automation token at https://www.npmjs.com/settings/~/tokens.
- GitHub repo → Settings → Secrets → Actions →
NPM_TOKEN. id-token: writeis already enabled inpublish.ymlfor npm provenance.
Local development (plugin authors)
/plugin marketplace add /absolute/path/to/maude
/plugin install design@maude
/plugin install flow@maudeWorking on plugin internals:
- Edit in place — the local marketplace points at your working tree.
- Reload after edits:
- Commands / agents / skills →
/plugin marketplace update maudethen/reload-plugins. - Dev server code → kill the running process (
lsof -i :<port>→kill) and let the next/design:editinvocation auto-restart.
- Commands / agents / skills →
- Test in isolation — open Claude Code from a scratch project (
cd /tmp && claude) so plugins aren't entangled with this repo's own.ai/. - Dogfood — Maude itself uses
flowfor plan/execute/done. Onceflowis installed against this marketplace, you can drive its own development with/flow:plan,/flow:execute, etc.
License
MIT — see LICENSE.
