Skip to main content
The metalworks plugin brings the full workflow into Claude Code. Ask /demand-report can I sell a focus supplement to developers? and you get the same grounded report the library produces — every claim linked to a real quote you can open — right in your chat, then keep going (/position-wedge, /build-spec, /launch-kit) from there. Under the hood it’s an MCP server: each slash command is a skill that calls one or more of its 26 tools. The commands chain through a stored demand report, exactly like the CLI — see Projects & memory for how that state persists.

Install

/plugin marketplace add Lab2A/metalworks
/plugin install metalworks@lab2a
You need uv on your PATH. The plugin runs the metalworks MCP server via uvx, which installs it into an isolated environment on first launch:
uvx --from "metalworks[mcp,arctic,reddit]" metalworks mcp serve --transport stdio
A SessionStart hook pre-warms that environment (it runs metalworks version quietly when your session opens), so the first real command doesn’t pay the one-time install delay.

Keys: what works with none, what needs one

The data tools run with no API key. The research and synthesis tools use whatever provider key is in your environment (ANTHROPIC_API_KEY / OPENAI_API_KEY / GOOGLE_API_KEY — first present wins). A few tools also need an embeddings key.
TierNeedsTools
Zero-keynothingReddit search & comments, subreddit info/rules, Arctic corpus pull, corpus stats, run/report listing, compliance lint, channel plan, content plan
Chat keya provider keydemand research, positioning, launch assets, reply drafting, discovery
Chat + embeddingsprovider + embeddingscompetitor map, surface, UX skeleton, marketing site, build spec
Gatedenv opt-in (below)posting a Reddit reply

The commands

Each command runs one step of the end-to-end workflow. Start with /demand-report; the rest take the report it produces (by report_id) and build on it.

Research

  • /demand-report <idea> — is there real demand? Runs the pipeline (research_plan_briefresearch_start → poll research_statusresearch_result), or a zero-key Arctic-corpus path if no key is set. Returns a go/no-go plus ranked demand clusters with distinct-author counts and verbatim, permalinked quotes. Research only — never posts.
  • /position-wedge — turns the report into a Dunford wedge (competitive alternative, unique attribute, value, beachhead, category) + a price band. Calls positioning_from_report. Every slot resolves to a real quote; if nothing defensible survives, it says so rather than inventing one.
  • /competitor-map — direct / adjacent / status-quo rivals, each gap backed by a cited complaint, severity derived from distinct-author counts. Calls competitor_map_from_report. Leads with the “do nothing” alternative.

Design

  • /surface-and-ux — picks the surface to build (web, mobile, CLI, SDK, …) with a cited rubric (surface_recommend), then sketches 3–5 screens (ux_skeleton_build), each marked validated or hypothesis. Text and structure only — no mockups.
  • /generate-site — a marketing site whose every load-bearing line is a verbatim real quote, footnoted to its permalink. Calls site_render, which returns the MarketingSite plus a self-contained index.html. A line that can’t be exact-matched to a real quote is dropped.

Build

  • /build-spec — a feature spec mapped to real demand (build_spec), then a scaffolded repo: CLAUDE.md with a cite-or-die rule, docs/SPEC.md, a frozen docs/EVIDENCE.md quote table, a PostToolUse lint hook, and .mcp.json wiring back to metalworks. metalworks specs and scaffolds; your agent builds. Ungrounded features are dropped before scaffolding.

Launch

  • /launch-kit — Product Hunt / Show HN / X drafts (launch_assets_build), each claim carrying a permalink and exact text span, plus a human-executed channel plan (channel_plan_build). It never posts — every channel step is requires_human. If the report is a no-go, it returns nothing and says so.

Grow

  • /content-plan — a deterministic, zero-key content/SEO plan (content_plan_from_report): one page per demand cluster, FAQ blocks built from your brief’s must-address questions, real distinct-author/mention counts as stat anchors, and a list of permalinks to cite.
  • /find-threads <product> — live Reddit threads worth a genuine reply (reddit_search_posts), ranked by honest fit. Discovery only — it doesn’t draft or post.
  • /draft-reply <thread> — reads the thread and rules (reddit_get_post_comments, reddit_subreddit_rules), drafts a reply in your voice (generate_reply), and runs it through the compliance gate (compliance_lint) until it passes. It stops there. Posting happens only on your explicit instruction, and only if the gate is satisfied.
  • /subreddit-intel <r/name> — a practical brief on a community (rules that bite, tone, what gets removed) before you participate (reddit_subreddit_info). Reconnaissance only.

The posting gate

Nothing in the plugin posts to Reddit on its own. The one tool that can, reddit_post_comment, is the security boundary, and it is triple-gated:
  1. Operator opt-in. It refuses unless METALWORKS_ALLOW_POSTING=1 is set in the server’s environment. Disabled by default.
  2. A confirm token. The reply text must carry a token issued by the deterministic compliance check (compliance_lint / generate_reply) over that exact text — edit the draft after it passed, and the token no longer matches.
  3. A re-check. It re-runs the compliance gate at post time and refuses if it fails.
It also needs REDDIT_CLIENT_ID / REDDIT_CLIENT_SECRET and a connected account. Every attempt is logged.

What the compliance gate checks

The gate (compliance_lint) is deterministic, offline, and zero-key. It flags AI-tells (“great question”, “hope this helps”, em-dashes), over-promotion (your product named repeatedly), length out of bounds, and naked CTAs (“sign up”, “check out”) — returning a pass/fail verdict with a confidence score. Drafts that read like marketing get tightened, not shipped.

Personas, honestly

Reply drafting can take a persona — a voice defined by real writing samples and an authentic background. Fabricated personas, invented backstories, and coordinated inauthentic behavior are prohibited by the usage policy; the default persona is empty, so fabrication is never accidental.

Same engine, your choice of surface

The plugin, the Python SDK, the CLI, and the MCP server all run the same engine and produce the same results — pick whichever fits how you work. Driving metalworks from your own agent instead of the plugin? See using with AI agents.