lmorchestrator
v0.1.1
Published
Mixed-model dynamic workflows for Sol, Luna, DeepSeek and Grok
Readme
LMO
Mixed-model dynamic workflows. A planner (Claude, Sol or Grok) writes a short JavaScript script; LMO runs it in the background across Sol, Luna, DeepSeek and Grok, each in its own git worktree. You watch the stave in the browser.
Install
From any git repo, with Bun on your PATH:
npx lmorchestratorThat is the whole setup. It writes a skill into .claude/skills/lmo/, starts the monitor on 127.0.0.1 and opens it. Same command as bunx lmorchestrator, or lmo after a global install.
Each repo runs its own server, on a port derived from the repo path, and prints that port and root on start. Runs always execute against the repo you launched them from. Override the port with LMO_PORT or a "port" in .lmo/config.json.
The package is not on the public registry yet. Until it is, from a clone of this repo:
bun install
bun linkThen lmo (or npx lmorchestrator once published) works in any project.
After that
Planners read the drop-in skill and run npx lmorchestrator themselves so the stave appears, then:
npx lmorchestrator workflow --script-path <file.js>Script shape
export const meta = {
name: "audit-routes",
description: "Audit route handlers for missing auth",
}
phase("Find")
const found = await agent("List every route file under src/routes.", {
worker: "sol",
schema: { type: "object", required: ["files"], properties: { files: { type: "array", items: { type: "string" } } } },
})
phase("Audit")
const audits = await pipeline(found.output.files, (file) =>
agent(`Audit ${file} for missing authentication checks.`, { worker: "luna", label: file }),
)
complete(audits.filter((row) => row && row.success))Workers are a closed set: sol (medium), luna (max), deepseek (max), grok (high). apply(result) copies that agent's changed files into the parent tree. ask("…", { options: ["yes", "no"] }) parks the run and pings the planner.
Saved scripts live in .claude/workflows/<name>.js or ~/.claude/workflows/<name>.js.
