A local-first work partner built on flowcraft.
opencraft is a work partner that runs on your machine: it reads and edits files, executes shell commands with approval, coordinates subagents, and persists and resumes sessions. Built on flowcraft's config-driven graph engine, it helps with coding and beyond — orchestrating any local workflow. A local execd sandbox, SQLite session store, and per-workspace approval policy keep everything inside a macOS / Linux / Windows desktop app (Wails v3 + React).
- Chat & sessions — streaming reasoning, tool calls, and output blocks; interrupt and cancel; session resume, rename, export, and delete; kanban view of subagent delegation; i18n (English / 中文).
- Inference — one or more instances per provider (OpenAI, Anthropic, Azure, ByteDance, DeepSeek, Kimi, MiniMax, Qwen) with custom endpoints, router priority with retry fallback, and per-model usage trends.
- Tools & safety — file group, exec_command, exec_session (PTY), apply_patch, web_fetch, update_plan, request_permissions, and skill tools, protected by a middleware chain: truncation cache, 32k result cap, secret redaction, and a JSONL audit trail.
- Runtime & sandbox — local execd (stdio + unix socket, self-fork,
parent-death cleanup), workspace-scoped SQLite store, buffer-fold memory
summary, AGENTS.md worldstate, layered config, and seatbelt/bwrap sandbox
with approvals kept outside the project
(
~/.opencraft/workspaces/<wid>/approvals.yaml). - Multi-agent & skills — persistent subagents with delegation kanban; skill discovery, git-based install, and authoring tools.
- Workflow — JSONL session rollout stream, external lifecycle hooks, configurable network policy with a web_fetch SSRF gate, and a diagnostics tab.
Homebrew (macOS):
brew tap GizClaw/opencraft https://github.com/GizClaw/opencraft.git
# Newer Homebrew versions require trusting the tap's cask once (security
# feature; run `brew trust gizclaw/opencraft` to trust the whole tap).
brew trust --cask gizclaw/opencraft/opencraft
brew install --cask opencraftOr download the latest package from the Releases page:
opencraft-<version>-macos-universal.dmg— macOS (Apple Silicon + Intel)opencraft-<version>-linux-amd64.tar.gz— Linux (x86_64)opencraft-<version>-windows-amd64.zip— Windows (x86_64) portable buildopencraft-<version>-windows-amd64-installer.exe— Windows (x86_64) NSIS installer
Windows binaries are not code-signed yet, so SmartScreen may warn on first
launch (More info → Run anyway), for both the portable exe and the installer.
Release binaries are built from tagged commits by the
release workflow; the Homebrew cask lives in
this repository under Casks/. The macOS app is signed with a
Developer ID and notarized by Apple, so Gatekeeper opens it without the manual
"Open Anyway" step.
Prerequisites: Go 1.25+, Node 22, and the Wails v3 prerequisites for your platform.
make fmt lint test # fmt + lint + go test
make gen-bindings # regenerate frontend/bindings (generated, not committed)
make build-macos # build the macOS production binary
wails3 task dev # run the desktop app (hot reload)
wails3 task package # package the current platform (.app / NSIS / Linux)The desktop shell targets Wails v3 (module github.com/wailsapp/wails/v3,
CLI wails3). Platform build/package tasks live in the root
Taskfile.yml; metadata lives in build/config.yml.
frontend/bindings is generated by wails3 generate bindings and is not
committed; a frontend-only build needs make gen-bindings first.
On first launch the desktop workbench guides you to the settings page when
inference is not configured yet. Settings are written to
~/.opencraft/config/opencraft.yaml — the single user-editable document for
inference instances, router policy, and MCP servers.
Release history is tracked in CHANGELOG.md.
Contributions are welcome. Please open a pull request; the CI workflow
(fmt, lint, build, race tests, macOS/Linux/Windows packaging) and a review
are required before merging to main.
Maintainers release by tagging a version:
git tag v0.1.0
git push origin v0.1.0The tag triggers the release workflow, which builds the packages, injects
the version into the binary via -ldflags, and publishes the GitHub
Release with notes from the changelog.
Released under the MIT License.
