Skip to main content

Installation

Smithers can be installed as a Claude Code plugin (recommended) or as an npm package for programmatic use. The plugin gives Claude Code the ability to generate Smithers orchestration workflows.
1

Add the Smithers marketplace

/plugin marketplace add evmts/smithers
2

Install the plugin

/plugin install smithers@smithers
Now you can ask Claude to create orchestration workflows:
You: "Create a workflow that reviews PRs and posts comments"
Claude: *generates pr-review-workflow.tsx*

npm Package

For programmatic use in your own scripts:
bun add smithers

Dependencies

Required

DependencyVersionPurpose
Bun1.0+JavaScript runtime
Claude CodelatestAgent execution

Included

These are bundled with Smithers:
  • solid-js - Reactive primitives for state management
  • @electric-sql/pglite - Embedded PostgreSQL for persistence
  • zod - Schema validation for structured output

Optional

DependencyPurpose
jj (Jujutsu)Alternative VCS with better snapshot support

Project Setup

TypeScript Configuration

Add JSX support to your tsconfig.json:
{
  "compilerOptions": {
    "jsx": "preserve",
    "jsxImportSource": "solid-js",
    "moduleResolution": "bundler",
    "target": "ESNext",
    "module": "ESNext"
  }
}

Bun Configuration

Create a bunfig.toml for Solid JSX:
[dev]
jsx = "solid"

Verify Installation

Create a test file test.tsx:
#!/usr/bin/env bun

import { createSmithersRoot } from "smithers";
import { createSmithersDB } from "smithers/smithers-orchestrator/src/db";
import { SmithersProvider } from "smithers/smithers-orchestrator/src/components/SmithersProvider";
import { Claude } from "smithers/smithers-orchestrator/src/components/Claude";

const db = await createSmithersDB({ path: ".smithers/test" });
const executionId = await db.execution.start("Test", "test.tsx");

async function Test() {
  return (
    <SmithersProvider db={db} executionId={executionId}>
      <Claude model="haiku" maxTurns={1} onFinished={(r) => console.log("Success!", r.output)}>
        Say "Hello from Smithers!"
      </Claude>
    </SmithersProvider>
  );
}

const root = createSmithersRoot();
await root.mount(Test);
await db.close();
Run it:
bun test.tsx
You should see Claude respond with “Hello from Smithers!”

Troubleshooting

Make sure Claude Code is installed globally:
npm install -g @anthropic-ai/claude-code
Verify it’s in your PATH:
which claude
Ensure your bunfig.toml has the Solid JSX configuration:
[dev]
jsx = "solid"
The PGlite database needs write access to the directory. Check permissions:
mkdir -p .smithers
chmod 755 .smithers

Next Steps