ForgeClaw is a personal fork of PicoClaw. It keeps the upstream Go runtime and binary names, but carries deployment-driven changes for personal automation, MCP-heavy workflows, task delivery, media handling, context management, and multi-agent workflows.
This repository is not the upstream PicoClaw project. Contributions here should optimize for the running ForgeClaw deployment while keeping upstream merges as low-conflict as practical.
origin:git@github.com:bogdanovich/forgeclaw.gitupstream:https://github.com/sipeed/picoclaw.gitmain: active ForgeClaw branch.upstream/main: read-only tracking branch for upstream PicoClaw.
The binary, Go module path, config directory, and most command examples still
use picoclaw intentionally. Renaming those would create unnecessary upstream
merge conflicts and migration churn.
Prerequisites:
- Go 1.25 or later
make- Node.js 22+ and pnpm 10.33.0+ for launcher/frontend changes
Build and test:
make deps
make build
make test
make lint-docsFor frontend/launcher work:
(cd web/frontend && pnpm install --frozen-lockfile)
make build-launcherFor ForgeClaw changes:
git checkout main
git pull origin main
git checkout -b feat/short-descriptionTarget ForgeClaw PRs at main.
For upstreamable changes:
- Start from the latest
upstream/main. - Create a clean topic branch.
- Cherry-pick or manually port only the intended upstream patch.
- Avoid bringing ForgeClaw-only deployment behavior into upstream PRs.
Do not open upstream PRs directly from ForgeClaw main.
Periodically merge upstream into ForgeClaw:
git fetch upstream
git checkout main
git merge upstream/mainWhen resolving conflicts:
- keep ForgeClaw branding in the root README;
- keep deployment-specific fork notes unless the feature was truly merged upstream;
- preserve upstream bug fixes and dependency bumps unless they conflict with a fork-specific behavior that is still required;
- prefer small compatibility shims over broad rewrites.
- Keep changes narrowly scoped.
- Prefer existing package boundaries and local helper APIs.
- Avoid unnecessary abstractions.
- Add or update tests for behavioral changes.
- Run focused package tests before pushing.
- Run full lint when touching formatting-sensitive Go code:
make lintThe pre-push hook runs the same linter rules expected by GitHub checks.
The root README.md is the authoritative ForgeClaw entry document.
Use docs/README.md for documentation layout and naming conventions. Run:
make lint-docsDocumentation guidelines:
- Keep ForgeClaw-specific docs in English unless translations are intentionally maintained.
- Do not reintroduce upstream PicoClaw marketing, hardware sales, crypto scam
warnings, star-count news, or
picoclaw.iodownload instructions into the ForgeClaw root README. - Keep command names such as
picoclaw, paths such as~/.picoclaw, and Go module references when they describe the actual current binary/runtime.
PRs should include:
- a concise description of the change;
- the reason for the change;
- test commands run;
- screenshots/logs when user-facing behavior changes;
- AI assistance disclosure when relevant.
Reviewers should prioritize:
- correctness and regressions;
- security and tool-safety boundaries;
- concurrency and async delivery behavior;
- context/session isolation;
- maintainability and simplicity;
- test coverage.
AI assistance is acceptable, but the author remains responsible for the change.
Before opening or merging AI-assisted code:
- read the diff carefully;
- verify behavior with tests or a concrete manual run;
- inspect security-sensitive paths yourself;
- remove speculative or over-engineered output.
Use concise imperative messages, preferably with a functional scope:
fix(agent): preserve media delivery status
feat(tasks): add task delivery status view
docs: clarify fork maintenance workflow
Avoid [codex] prefixes in commit or PR titles.
Use GitHub issues and PR comments for durable project discussion. For local deployment notes that should not become upstream-facing docs, prefer workspace documentation outside this source repository.