Skip to main content
metalworks is a Python package (3.11+). The core install is tiny; heavier dependencies (provider SDKs, the Reddit corpus, the MCP server) live behind extras, so you only install what you use.

Most people want this

pip install "metalworks[research,openai]"     # or [research,google], or [research,anthropic]
That gives you the demand-research pipeline (the local corpus reader + the triage and clustering it needs) and a provider SDK. The [research] extra has no provider SDK on its own — pair it with openai, google, or anthropic. Then set that one key (next section) and you’re ready.
One key is enough — whichever provider you use. Embeddings default to a small local model (no API key, downloaded once), so a single chat key gets you a full run. If you have an OpenAI or Google key, metalworks uses its embeddings automatically (higher quality, no download). Either way, you never need a second key.

Pick your extras

Install only what your workflow needs — combine them like "metalworks[research,reddit]".
ExtraInstall when you want to…
researchRun demand research and everything built on it (the common case). Bundles the local embedding model.
redditSearch Reddit, pull subreddit intel, or post replies (the engagement loop).
arcticRead the historical Reddit corpus directly (a subset of research).
mcpRun the MCP server (metalworks mcp serve).
anthropic / openai / googleUse that provider’s models. Any one is enough (see the note above).
exa / tavilyAdd live web search to ground findings against the web.
allEverything above.
If you call something without its extra, metalworks tells you exactly what to install instead of crashing.

Set a provider key

Set the key for the provider you installed — metalworks resolves the chat provider from whichever key is present (Anthropic → OpenAI → Google → OpenRouter):
export OPENAI_API_KEY=...        # or ANTHROPIC_API_KEY, GOOGLE_API_KEY / GEMINI_API_KEY,
                                 # or OPENROUTER_API_KEY (reaches 200+ models)
Embeddings need no separate key. The pipeline needs an embeddings model for clustering; with no Google/OpenAI key it uses a local model (fastembed, bundled with [research]), downloaded once on first use:
Your keyChatEmbeddings
OpenAIOpenAIOpenAI (no download)
Google / GeminiGoogle (native web grounding)Google (no download)
AnthropicAnthropiclocal model (one-time download)
OpenRouterany model via OpenRouterlocal model (one-time download)
Pre-download the local model so your first run isn’t blocked on it:
metalworks models warm
Want Google Vertex AI, a local LLM, or any OpenAI-compatible endpoint? See Configuration. Live web search (optional, improves grounding) reads EXA_API_KEY or TAVILY_API_KEY if present. Reddit posting needs REDDIT_CLIENT_ID / REDDIT_CLIENT_SECRET — see Reddit engagement.

Check your setup

metalworks doctor
Reports installed extras, the keys it found, the resolved chat and embedding models, the store path, connected Reddit accounts, and actionable hints (e.g. “key set but extra missing → pip install …”) — so you know you’re ready before you spend a token. metalworks models list shows the same model resolution plus a provider reachability matrix. Next: run your first real report in the Quickstart.