Back Original

Clawdbot Renames to Moltbot

11

# Repository Guidelines

2-

- Repo: https://github.com/clawdbot/clawdbot

2+

- Repo: https://github.com/moltbot/moltbot

33

- GitHub issues/comments/PR comments: use literal multiline strings or `-F - <<'EOF'` (or $'...') for real newlines; never embed "\\n".

4455

## Project Structure & Module Organization

66

- Source code: `src/` (CLI wiring in `src/cli`, commands in `src/commands`, web provider in `src/provider-web.ts`, infra in `src/infra`, media pipeline in `src/media`).

77

- Tests: colocated `*.test.ts`.

88

- Docs: `docs/` (images, queue, Pi config). Built output lives in `dist/`.

99

- Plugins/extensions: live under `extensions/*` (workspace packages). Keep plugin-only deps in the extension `package.json`; do not add them to the root `package.json` unless core uses them.

10-

- Plugins: install runs `npm install --omit=dev` in plugin dir; runtime deps must live in `dependencies`. Avoid `workspace:*` in `dependencies` (npm install breaks); put `clawdbot` in `devDependencies` or `peerDependencies` instead (runtime resolves `clawdbot/plugin-sdk` via jiti alias).

10+

- Plugins: install runs `npm install --omit=dev` in plugin dir; runtime deps must live in `dependencies`. Avoid `workspace:*` in `dependencies` (npm install breaks); put `moltbot` in `devDependencies` or `peerDependencies` instead (runtime resolves `clawdbot/plugin-sdk` via jiti alias).

1111

- Installers served from `https://molt.bot/*`: live in the sibling repo `../molt.bot` (`public/install.sh`, `public/install-cli.sh`, `public/install.ps1`).

1212

- Messaging channels: always consider **all** built-in + extension channels when refactoring shared logic (routing, allowlists, pairing, command gating, onboarding, docs).

1313

- Core channel docs: `docs/channels/`

@@ -28,20 +28,20 @@

2828

## exe.dev VM ops (general)

2929

- Access: stable path is `ssh exe.dev` then `ssh vm-name` (assume SSH key already set).

3030

- SSH flaky: use exe.dev web terminal or Shelley (web agent); keep a tmux session for long ops.

31-

- Update: `sudo npm i -g clawdbot@latest` (global install needs root on `/usr/lib/node_modules`).

32-

- Config: use `clawdbot config set ...`; ensure `gateway.mode=local` is set.

31+

- Update: `sudo npm i -g moltbot@latest` (global install needs root on `/usr/lib/node_modules`).

32+

- Config: use `moltbot config set ...`; ensure `gateway.mode=local` is set.

3333

- Discord: store raw token only (no `DISCORD_BOT_TOKEN=` prefix).

3434

- Restart: stop old gateway and run:

35-

`pkill -9 -f clawdbot-gateway || true; nohup clawdbot gateway run --bind loopback --port 18789 --force > /tmp/clawdbot-gateway.log 2>&1 &`

36-

- Verify: `clawdbot channels status --probe`, `ss -ltnp | rg 18789`, `tail -n 120 /tmp/clawdbot-gateway.log`.

35+

`pkill -9 -f moltbot-gateway || true; nohup moltbot gateway run --bind loopback --port 18789 --force > /tmp/moltbot-gateway.log 2>&1 &`

36+

- Verify: `moltbot channels status --probe`, `ss -ltnp | rg 18789`, `tail -n 120 /tmp/moltbot-gateway.log`.

37373838

## Build, Test, and Development Commands

3939

- Runtime baseline: Node **22+** (keep Node + Bun paths working).

4040

- Install deps: `pnpm install`

4141

- Pre-commit hooks: `prek install` (runs same checks as CI)

4242

- Also supported: `bun install` (keep `pnpm-lock.yaml` + Bun patching in sync when touching deps/patches).

4343

- Prefer Bun for TypeScript execution (scripts, dev, tests): `bun <file.ts>` / `bunx <tool>`.

44-

- Run CLI in dev: `pnpm clawdbot ...` (bun) or `pnpm dev`.

44+

- Run CLI in dev: `pnpm moltbot ...` (bun) or `pnpm dev`.

4545

- Node remains supported for running built output (`dist/*`) and production installs.

4646

- Mac packaging (dev): `scripts/package-mac-app.sh` defaults to current arch. Release checklist: `docs/platforms/mac/release.md`.

4747

- Type-check/build: `pnpm build` (tsc)

@@ -54,7 +54,7 @@

5454

- Add brief code comments for tricky or non-obvious logic.

5555

- Keep files concise; extract helpers instead of “V2” copies. Use existing patterns for CLI options and dependency injection via `createDefaultDeps`.

5656

- Aim to keep files under ~700 LOC; guideline only (not a hard guardrail). Split/refactor when it improves clarity or testability.

57-

- Naming: use **Clawdbot** for product/app/docs headings; use `clawdbot` for CLI command, package/binary, paths, and config keys.

57+

- Naming: use **Moltbot** for product/app/docs headings; use `moltbot` for CLI command, package/binary, paths, and config keys.

58585959

## Release Channels (Naming)

6060

- stable: tagged releases only (e.g. `vYYYY.M.D`), npm dist-tag `latest`.

@@ -66,7 +66,7 @@

6666

- Naming: match source names with `*.test.ts`; e2e in `*.e2e.test.ts`.

6767

- Run `pnpm test` (or `pnpm test:coverage`) before pushing when you touch logic.

6868

- Do not set test workers above 16; tried already.

69-

- Live tests (real keys): `CLAWDBOT_LIVE_TEST=1 pnpm test:live` (Clawdbot-only) or `LIVE=1 pnpm test:live` (includes provider live tests). Docker: `pnpm test:docker:live-models`, `pnpm test:docker:live-gateway`. Onboarding Docker E2E: `pnpm test:docker:onboard`.

69+

- Live tests (real keys): `CLAWDBOT_LIVE_TEST=1 pnpm test:live` (Moltbot-only) or `LIVE=1 pnpm test:live` (includes provider live tests). Docker: `pnpm test:docker:live-models`, `pnpm test:docker:live-gateway`. Onboarding Docker E2E: `pnpm test:docker:onboard`.

7070

- Full kit + what’s covered: `docs/testing.md`.

7171

- Pure test additions/fixes generally do **not** need a changelog entry unless they alter user-facing behavior or the user asks for one.

7272

- Mobile: before using a simulator, check for connected real devices (iOS + Android) and prefer them when available.

9797

- **Landing mode:** create an integration branch from `main`, bring in PR commits (**prefer rebase** for linear history; **merge allowed** when complexity/conflicts make it safer), apply fixes, add changelog (+ thanks + PR #), run full gate **locally before committing** (`pnpm lint && pnpm build && pnpm test`), commit, merge back to `main`, then `git switch main` (never stay on a topic branch after landing). Important: contributor needs to be in git graph after this!

98989999

## Security & Configuration Tips

100-

- Web provider stores creds at `~/.clawdbot/credentials/`; rerun `clawdbot login` if logged out.

100+

- Web provider stores creds at `~/.clawdbot/credentials/`; rerun `moltbot login` if logged out.

101101

- Pi sessions live under `~/.clawdbot/sessions/` by default; the base directory is not configurable.

102102

- Environment variables: see `~/.profile`.

103103

- Never commit or publish real phone numbers, videos, or live configuration values. Use obviously fake placeholders in docs, tests, and examples.

104104

- Release flow: always read `docs/reference/RELEASING.md` and `docs/platforms/mac/release.md` before any release work; do not ask routine questions once those docs answer them.

105105106106

## Troubleshooting

107-

- Rebrand/migration issues or legacy config/service warnings: run `clawdbot doctor` (see `docs/gateway/doctor.md`).

107+

- Rebrand/migration issues or legacy config/service warnings: run `moltbot doctor` (see `docs/gateway/doctor.md`).

108108109109

## Agent-Specific Notes

110110

- Vocabulary: "makeup" = "mac app".

111111

- Never edit `node_modules` (global/Homebrew/npm/git installs too). Updates overwrite. Skill notes go in `tools.md` or `AGENTS.md`.

112-

- Signal: "update fly" => `fly ssh console -a flawd-bot -C "bash -lc 'cd /data/clawd/clawdbot && git pull --rebase origin main'"` then `fly machines restart e825232f34d058 -a flawd-bot`.

112+

- Signal: "update fly" => `fly ssh console -a flawd-bot -C "bash -lc 'cd /data/clawd/moltbot && git pull --rebase origin main'"` then `fly machines restart e825232f34d058 -a flawd-bot`.

113113

- When working on a GitHub Issue or PR, print the full URL at the end of the task.

114114

- When answering questions, respond with high-confidence answers only: verify in code; do not guess.

115115

- Never update the Carbon dependency.

116116

- Any dependency with `pnpm.patchedDependencies` must use an exact version (no `^`/`~`).

117117

- Patching dependencies (pnpm patches, overrides, or vendored changes) requires explicit approval; do not do this by default.

118118

- CLI progress: use `src/cli/progress.ts` (`osc-progress` + `@clack/prompts` spinner); don’t hand-roll spinners/bars.

119119

- Status output: keep tables + ANSI-safe wrapping (`src/terminal/table.ts`); `status --all` = read-only/pasteable, `status --deep` = probes.

120-

- Gateway currently runs only as the menubar app; there is no separate LaunchAgent/helper label installed. Restart via the Clawdbot Mac app or `scripts/restart-mac.sh`; to verify/kill use `launchctl print gui/$UID | grep clawdbot` rather than assuming a fixed label. **When debugging on macOS, start/stop the gateway via the app, not ad-hoc tmux sessions; kill any temporary tunnels before handoff.**

121-

- macOS logs: use `./scripts/clawlog.sh` to query unified logs for the Clawdbot subsystem; it supports follow/tail/category filters and expects passwordless sudo for `/usr/bin/log`.

120+

- Gateway currently runs only as the menubar app; there is no separate LaunchAgent/helper label installed. Restart via the Moltbot Mac app or `scripts/restart-mac.sh`; to verify/kill use `launchctl print gui/$UID | grep moltbot` rather than assuming a fixed label. **When debugging on macOS, start/stop the gateway via the app, not ad-hoc tmux sessions; kill any temporary tunnels before handoff.**

121+

- macOS logs: use `./scripts/clawlog.sh` to query unified logs for the Moltbot subsystem; it supports follow/tail/category filters and expects passwordless sudo for `/usr/bin/log`.

122122

- If shared guardrails are available locally, review them; otherwise follow this repo's guidance.

123123

- SwiftUI state management (iOS/macOS): prefer the `Observation` framework (`@Observable`, `@Bindable`) over `ObservableObject`/`@StateObject`; don’t introduce new `ObservableObject` unless required for compatibility, and migrate existing usages when touching related code.

124124

- Connection providers: when adding a new connection, update every UI surface and docs (macOS app, web UI, mobile if applicable, onboarding/overview docs) and add matching status + configuration forms so provider lists and settings stay in sync.

125-

- Version locations: `package.json` (CLI), `apps/android/app/build.gradle.kts` (versionName/versionCode), `apps/ios/Sources/Info.plist` + `apps/ios/Tests/Info.plist` (CFBundleShortVersionString/CFBundleVersion), `apps/macos/Sources/Clawdbot/Resources/Info.plist` (CFBundleShortVersionString/CFBundleVersion), `docs/install/updating.md` (pinned npm version), `docs/platforms/mac/release.md` (APP_VERSION/APP_BUILD examples), Peekaboo Xcode projects/Info.plists (MARKETING_VERSION/CURRENT_PROJECT_VERSION).

125+

- Version locations: `package.json` (CLI), `apps/android/app/build.gradle.kts` (versionName/versionCode), `apps/ios/Sources/Info.plist` + `apps/ios/Tests/Info.plist` (CFBundleShortVersionString/CFBundleVersion), `apps/macos/Sources/Moltbot/Resources/Info.plist` (CFBundleShortVersionString/CFBundleVersion), `docs/install/updating.md` (pinned npm version), `docs/platforms/mac/release.md` (APP_VERSION/APP_BUILD examples), Peekaboo Xcode projects/Info.plists (MARKETING_VERSION/CURRENT_PROJECT_VERSION).

126126

- **Restart apps:** “restart iOS/Android apps” means rebuild (recompile/install) and relaunch, not just kill/launch.

127127

- **Device checks:** before testing, verify connected real devices (iOS/Android) before reaching for simulators/emulators.

128128

- iOS Team ID lookup: `security find-identity -p codesigning -v` → use Apple Development (…) TEAMID. Fallback: `defaults read com.apple.dt.Xcode IDEProvisioningTeamIdentifiers`.

@@ -149,9 +149,9 @@

149149

- Do not rebuild the macOS app over SSH; rebuilds must be run directly on the Mac.

150150

- Never send streaming/partial replies to external messaging surfaces (WhatsApp, Telegram); only final replies should be delivered there. Streaming/tool events may still go to internal UIs/control channel.

151151

- Voice wake forwarding tips:

152-

- Command template should stay `clawdbot-mac agent --message "${text}" --thinking low`; `VoiceWakeForwarder` already shell-escapes `${text}`. Don’t add extra quotes.

153-

- launchd PATH is minimal; ensure the app’s launch agent PATH includes standard system paths plus your pnpm bin (typically `$HOME/Library/pnpm`) so `pnpm`/`clawdbot` binaries resolve when invoked via `clawdbot-mac`.

154-

- For manual `clawdbot message send` messages that include `!`, use the heredoc pattern noted below to avoid the Bash tool’s escaping.

152+

- Command template should stay `moltbot-mac agent --message "${text}" --thinking low`; `VoiceWakeForwarder` already shell-escapes `${text}`. Don’t add extra quotes.

153+

- launchd PATH is minimal; ensure the app’s launch agent PATH includes standard system paths plus your pnpm bin (typically `$HOME/Library/pnpm`) so `pnpm`/`moltbot` binaries resolve when invoked via `moltbot-mac`.

154+

- For manual `moltbot message send` messages that include `!`, use the heredoc pattern noted below to avoid the Bash tool’s escaping.

155155

- Release guardrails: do not change version numbers without operator’s explicit consent; always ask permission before running any npm publish/release step.

156156157157

## NPM + 1Password (publish/verify)