@yepreally/smithy
v0.1.0
Published
Local workbench for agent-driven reviews and work.
Readme
smithy v2
A local, single-user workbench for GitLab review (Pillar 1) and agent-driven work (Pillar 2).
Greenfield rebuild. The design lives in docs/ — read those first:
docs/blueprint.html— architecture, data model, milestones (the plan).docs/mockups.html— the interface, drawn.
Layout
shared/ types + SSE event shapes (no provider, no transport)
server/ Fastify + better-sqlite3 (WAL) + SSE EventBus + GitLab/git wrappers
web/ React + Vite (plain for now; yui components come later)Run
Packaged (one process serves API + UI):
npx @yepreally/smithy # → http://127.0.0.1:4400 (no config needed)
# or, from a checkout:
npm install && npm run build && node bin/smithy.mjsWith no --config, smithy writes a starter config to ~/.smithy/config.json on first run and keeps its
data in ~/.smithy/data. Give it a GitLab token one of two ways: export GITLAB_TOKEN (a blank token in
the config falls back to the environment), or paste it into the ⚙ Settings page, which edits the
config file directly. Pass --config <path> to point it at a specific file instead.
Config precedence: env var > JSON config > default. Hosts are named gitlab/gitea instances and agents
are named claude-code/openai instances, each with a live default (defaultHost / defaultAgent).
autoReview is on by default (a review runs on any MR that has none); re-reviewing on every push
(autoReReview) stays opt-in because it costs a run per push. An optional themeFile restyles the app
from a JSON of colour tokens (theme.example.json). smithy.config.example.json is the full reference.
Dev (Vite + hot reload):
npm install
npm run dev:server -- --config smithy.config.json # :4400 API
npm run dev:web # :5173 UI (proxies the API)House rules (never restated per task)
- Write-through: nothing authoritative in memory; persist before ack.
- Derived state has one home:
attentionFor(facts)— never recompute a lane inline. - Never trust agent output: validate JSON against a schema before it touches the DB.
- No layer above
AgentRunnernames a provider. - Chords gate on non-input focus; the boot reconciler grows one step per milestone.
