2026.5.13 — The One With the Codex and the Claws
Released 2026-05-13
← All releases
What's New
- Add Codex as a first‑class LLM provider, letting you tap into OpenAI’s 120‑billion‑parameter model for smarter, faster completions.
- Automated release‑notes generation via Groq, so the hub now writes its own changelog without human intervention.
- Greptile PR‑review comment support – ElasticClaw can now surface AI‑generated review suggestions directly in the UI.
- Manual workflow triggers get a brand‑new sidebar button and stay on the dashboard after creation for a smoother workflow.
- Introduce `secret_refs` on workspaces, preserving backward compatibility while allowing explicit secret references.
- Concurrency limits for workflow‑created claws – prevent runaway resource usage with per‑workflow caps.
- New favicon (lightning‑bolt claw) and optional mascot for a fresh visual identity.
- Support for GitHub Issues as a third issue tracker, complete with comment injection and close‑issue actions.
Improvements
- Doctor page now hides passed checks by default, decluttering the health view.
- Number‑type workflow inputs now enforce min/max constraints both in the UI and on the backend.
- Debug logging added to the GitHub‑issues webhook handler for easier troubleshooting.
- Homebrew formula URL fixed to drop the stale “v” prefix for Calendar‑Version tags.
- Unified secret handling – `secret_refs` added with backward‑compatible fallbacks for the old `secrets` list.
- Improved token handling: GITHUB_TOKEN no longer overrides the credential helper, and token checks now respect HTTP status codes.
- Bootstrap scripts now use heredocs consistently, reducing shell‑parsing errors during install.
- Performance tweaks: parallel Nix install, reduced bootstrap wait times, and faster bridge‑to‑gateway handshakes.
Fixes
- Resolved ‘No default model configured’ false alarm in the doctor diagnostics.
- Fixed INSERT statements to match the claws table schema, preventing DB errors on new claws.
- Corrected JSON tags on WorkflowConfig for proper API deserialization.
- Fixed YAML parse error in the release‑notes workflow and cleaned up stale heredoc delimiters.
- Improved GitHub API error handling – now checks HTTP status before parsing responses and shows clearer 404 messages.
- Ensured manual trigger modal respects `enable_manual_trigger` consistently across front‑ and back‑end.
- Fixed race conditions in workflow‑created claw lifecycle (termination, status updates, and DB constraints).
- Addressed multiple UI glitches: mascot transparency, favicon swap, tag overflow, and message‑bubble code‑block overflow.
- Patched migration failures to be fatal, preventing the hub from starting with a corrupted schema.
- Various security hardenings: removed stale token logs, tightened CORS, and enforced proper GitHub App permissions.
Raw Changelog
Show raw git changelog
text
ded056d fix: use openai/gpt-oss-120b model identifier for Groq release notes (#191) (Marc Campbell)
12872d0 feat: add support for codex as an LLM provider (#186) (Marc Campbell)
3bd67a2 fix: homebrew formula URL has stale v prefix for CalVer tags (#188) (Marc Campbell)
d9c51b8 fix: convert inline python3 -c to heredoc in release-notes workflow (#187) (Marc Campbell)
ffd08e2 fix: prevent GITHUB_TOKEN from overriding credential helper for git ops (#181) (#184) (elasticclaw-workflow[bot])
c6adddb feat: add support for greptile PR review comments (opt-in) (#183) (elasticclaw-workflow[bot])
8b4448c feat: better claw title for manual workflow triggers (#182) (Marc Campbell)
9c499c9 fix: doctor incorrectly shows 'No default model configured' (#179) (elasticclaw-workflow[bot])
d2a841c fix: align INSERT statements with claws table schema (#178) (Marc Campbell)
b78a831 Revert "fix: align INSERT statements with claws table schema (#176)" (#177) (Marc Campbell)
1b49970 fix: align INSERT statements with claws table schema (#176) (Marc Campbell)
e753083 add noah as a labeler (Marc Campbell)
8ac3726 fix: add json tags to WorkflowConfig fields for API deserialization (#175) (Marc Campbell)
958e369 update workflow (Marc Campbell)
a8739ab fix: YAML parse error in release-notes workflow (#174) (Marc Campbell)
20585db feat: add debug logging to github-issues webhook handler (#173) (Marc Campbell)
7eef98e fix: better error message for GitHub API 404 on issues polling (#172) (Marc Campbell)
895d1dd fix: check HTTP status before parsing GitHub API response (#171) (Marc Campbell)
7dced65 feat: automated release notes via Groq (#169) (Marc Campbell)
27caf80 feat: manual trigger creation stays on dashboard (#167) (Marc Campbell)
696b273 feat: doctor page hides passed checks by default (#166) (Marc Campbell)
77fdad9 feat: add secret_refs to workspaces with backward compat for deprecated secrets list (#165) (Marc Campbell)
e48627b fix: use enable_manual_trigger consistently across backend and frontend (#164) (Marc Campbell)
765aad0 beta install test script (Marc Campbell)
76db1a0 fix(upgrade): match client version instead of fetching latest release (#163) (Marc Campbell)
8f51299 Workflow polling (#161) (Noah Campbell)
b1d93c2 ci: switch release trigger to CalVer tag patterns (#162) (Marc Campbell)
a279960 feat: agent stopped notifications with issue tracker comments (#160) (Marc Campbell)
efb5f1d fix: single source of truth for workflows — external storage only (#159) (Marc Campbell)
8b7871d min on workflow trigger (Marc Campbell)
f144933 fix: enforce min/max constraints on number inputs in manual trigger modal (#158) (Marc Campbell)
daf6545 feat: replace favicon with lightning bolt icon (#157) (Marc Campbell)
d6f4bf6 fix: add webhooks to settings static export whitelist (#155) (Marc Campbell)
be9fd6e feat: add min/max constraints for number type workflow inputs (#154) (Marc Campbell)
424005e fix: delete sandbox provider when remove is clicked in settings (#156) (Marc Campbell)
e456ff6 feat: manual triggers v2 — + Claw button in sidebar (#153) (Marc Campbell)
a7ee4a6 feat: manual workflow triggers from dashboard (#152) (Marc Campbell)
e2da894 update pr reviewer workflow (Marc Campbell)
f14f11b clean up workflows ui (#151) (Marc Campbell)
6dd8f55 fix(settings): include external workflows in settings GET response (Marc Campbell)
1dd0fd4 fix: always strip workflows from hub.yaml, re-run cleanup if split-brain detected (Marc Campbell)
0c887d4 fix: migration cleans legacy data — drops hub_workspaces table, strips workflows from hub.yaml (Marc Campbell)
65aea96 fix: migration failures are fatal — hub refuses to start if migration fails (Marc Campbell)
7d5f162 fix: wire external storage migration into hub startup (Marc Campbell)
8b31e9b feat: manual workflow trigger (#146) (#149) (Marc Campbell)
970bc6f update workflows (Marc Campbell)
0e4ff95 feat(hub): store workspaces and workflows as external files alongside … (#148) (Marc Campbell)
db822ae feat(settings): Doctor diagnostics page (#147) (Marc Campbell)
b6b3cd3 update docs in workspace (Marc Campbell)
6b9e41a two separate workflows (Marc Campbell)
281bc37 workflow publish workflow (Marc Campbell)
783fd00 clarify in pipeline to create a PR (Marc Campbell)
b9df989 feat: concurrency limits for workflow-created claws (#119) (#126) (elasticclaw-workflow[bot])
c3d0040 fix: terminate claw when pipeline reaches terminal stage (#116) (#124) (elasticclaw-workflow[bot])
3a1f279 fix: broadcast provisioning status for github-issue workflow claws (#125) (elasticclaw-workflow[bot])
36a5b77 fix: add Suspense fallback to login page to prevent content flash (#123) (elasticclaw-workflow[bot])
b17e483 chore: pin OpenClaw version to 2026.5.6 (#122) (elasticclaw-workflow[bot])
617a367 allowed labelers (Noah Campbell)
3c49897 allowed labelers (Marc Campbell)
e94394b update pipeline (Marc Campbell)
9447271 fix: skip Linear workspace rendering for GitHub Issues in pipeline (#114) (Marc Campbell)
f6f835b chore: pin OpenClaw to 2026.5.5 in all sandbox providers (#115) (elasticclaw-marc[bot])
54f2988 update workflow (Marc Campbell)
e68d4a6 adding workflow (Marc Campbell)
7b5576e fix: include createdAt in Linear webhook dedup key (#112) (Marc Campbell)
7a922d9 feat: add CloseIssue pipeline action and issue comment injection for GitHub Issues workflows (#110) (Marc Campbell)
e7ac69a adding elasticclaw workspace (Marc Campbell)
a271473 feat: add GitHub Issues as third issue tracker (#108) (Marc Campbell)
38c632a refactor(settings): unify issue trackers into single list with add dropdown (#106) (Marc Campbell)
a26eec4 refactor(settings): group left nav into sections with separators (#104) (Marc Campbell)
72930c8 Merge pull request #105 from elasticclaw/fix/static-export-routing (Marc Campbell)
c125b23 fix(webui): close file handle in static export sub-route serving (Marc Campbell)
0ee11c1 fix(webui): serve index.html for static export sub-routes (Marc Campbell)
c2b96d4 refactor(settings): group left nav into sections with separators (Marc Campbell)
7b8bcfe Merge pull request #103 from elasticclaw/fix/mcp-servers-modal-ui (Marc Campbell)
ec7eb7d refactor(settings): move MCP servers form into modal (Marc Campbell)
a95e91f Merge pull request #102 from elasticclaw/fix/linear-webhook-dedup (Marc Campbell)
2e72aaf fix(linear): dedup webhook deliveries to prevent duplicate claw creation (Marc Campbell)
d060b0a Merge pull request #101 from elasticclaw/feat/mcp-server-support (Marc Campbell)
8ca2b70 Revert "fix(linear): dedup webhook deliveries to prevent duplicate claw creation" (Marc Campbell)
5f19758 fix(linear): dedup webhook deliveries to prevent duplicate claw creation (Marc Campbell)
80460dd fix(pipeline): put claw in error state when workspace render fails (Marc Campbell)
99d9007 security: replace rastasheep/ubuntu-sshd:18.04 with official ubuntu:24.04 pinned by digest (Marc Campbell)
e71e3bd fix: use pre-built sshd image in install integration test (Marc Campbell)
7d4167c fix: increase container startup timeout in install integration test (Marc Campbell)
69c7148 fix(mcp): reject empty source in patchSettings (Marc Campbell)
18ffbd4 fix(mcp): preserve existing secrets on partial upsert (Marc Campbell)
9f738ec fix(mcp): validate source-required fields at write time (Marc Campbell)
8a661cf fix(mcp): validate MCPSource in patchSettings too (Marc Campbell)
54124cd fix(mcp): validate MCPSource against allowed values on upsert (Marc Campbell)
93a37ca fix(mcp): apply workspace-level MCPRef.Config overrides at claw creation (Marc Campbell)
b54871a fix(mcp): save to disk before updating in-memory config (Marc Campbell)
910c238 feat(mcp): hub-level MCP server registry with admin CRUD, workspace references, and settings UI (Marc Campbell)
7a072e0 Merge pull request #100 from elasticclaw/feat/settings-secrets-crud (Marc Campbell)
66665b6 remove (Marc Campbell)
e0498b7 local (Marc Campbell)
9a764d8 fix(settings): secrets section now loads and displays configured secrets (Marc Campbell)
f57d629 Merge pull request #99 from elasticclaw/feat/fix-settings-static-export (Marc Campbell)
d492d10 fix: update generateStaticParams for renamed settings sections (Marc Campbell)
f950ae3 Merge pull request #98 from elasticclaw/feat/settings-models-rename (Marc Campbell)
94e2205 fix: address greptile review comments on Models settings (Marc Campbell)
ff66585 feat: rename settings/llm-keys to settings/models with redesigned UI (Marc Campbell)
7c947aa Merge pull request #97 from elasticclaw/feat/settings-issue-trackers-rename (Marc Campbell)
8b4c332 feat: redesign Issue Trackers settings page with modals (Marc Campbell)
f8484fb feat: rename settings/integrations to settings/issue-trackers (Marc Campbell)
97b64dc Merge pull request #96 from elasticclaw/feat/github-app-permissions-check (Marc Campbell)
2b0a943 fix: address PR review comments from greptile-apps (Marc Campbell)
ed2de6c docs: rewrite GitHub Apps settings description (Marc Campbell)
c76112d feat: save flow recommends testing, warns on failure, allows override (Marc Campbell)
783c7b9 fix: always show test result feedback in GitHub App modal (Marc Campbell)
89f1251 fix: show success banner on permission test + require PEM key (Marc Campbell)
5ca5b84 feat: redesign GitHub App settings UI with modal + permission test (Marc Campbell)
b265585 feat: add GitHub App permission check to settings page (Marc Campbell)
46d61be Merge pull request #95 from elasticclaw/feat/docker-workspace-flag (Marc Campbell)
acd88c5 feat: add docker workspace flag for Docker Engine bootstrap install (Marc Campbell)
f902129 Merge pull request #94 from elasticclaw/chore/pin-openclaw-2026.5.2 (Marc Campbell)
feb341d chore: pin openclaw to 2026.5.2 (Marc Campbell)
cbe6cca Merge pull request #93 from elasticclaw/fix/deterministic-openclaw-startup (Marc Campbell)
08d3105 fix: allow zero-plugin gateways to boot successfully (Marc Campbell)
fea854a fix: address greptile review comments on PR #93 (Marc Campbell)
c874285 feat: inject Linear CLI instructions into SECRETS.md for workflow claws (Marc Campbell)
c2c98e4 fix: claw-bridge linear CLI uses issue(id:) instead of issues(filter:identifier) (Marc Campbell)
cf879c4 fix: nvm use 24 baked into every Daytona exec call, remove broken standalone step (Marc Campbell)
e10853b Merge branch 'fix/deterministic-openclaw-startup' of github.com:elasticclaw/elasticclaw into fix/deterministic-openclaw-startup (Marc Campbell)
9ae1bda fix: enforce Node 24 LTS in Daytona bootstrap via nvm (Marc Campbell)
0748c52 fix: deterministic two-phase OpenClaw startup in Daytona (Marc Campbell)
e3c87c4 fix: deterministic two-phase OpenClaw startup in Daytona (Marc Campbell)
7aac783 Merge pull request #92 from elasticclaw/debug/linear-issue-not-found (Marc Campbell)
b5c4770 fix: update mock linear server to return issue{} not issues.nodes[] (Marc Campbell)
591b03f fix: use issue(id:) for Linear lookup; keep debug logging only on failures (Marc Campbell)
f1294eb fix: use issue(id:) query which accepts display identifiers like CAN-61 (Marc Campbell)
ac969ee fix: use issues(identifier:) arg instead of filter.identifier for Linear GraphQL (Marc Campbell)
fb427fe debug: add more logging to linear issue fetch (Marc Campbell)
2ac7039 Merge pull request #91 from elasticclaw/feat/linear-cli-in-bridge (Marc Campbell)
cc2ec12 fix: exit 1 when linear issue update has nothing to do (Marc Campbell)
2b39d0c fix: correct Go text/workspace syntax in pipeline_runner comment (Marc Campbell)
a2def1b fix: handle http.NewRequest error in fetchLinearIssueDetails (Marc Campbell)
eeb05ea fix: update mock_linear test fixture for issues(filter:) query (Marc Campbell)
72829de test: add unit tests for linear CLI (Marc Campbell)
2bd105e fix: check mutation success field in issueUpdate and commentCreate (Marc Campbell)
c8be6b0 fix: fetchLinearIssueDetails uses issues(filter:) instead of issue(id:) (Marc Campbell)
b79fade Merge pull request #88 from elasticclaw/feat/typed-secret-refs (Marc Campbell)
0f22a28 fix: address greptile-apps review on PR #91 (Marc Campbell)
fbf42c5 feat: typed secret refs for workflows and workspaces (Marc Campbell)
5a77cab feat: embed minimal Linear CLI in claw-bridge (Marc Campbell)
b0c47ed Merge pull request #86 from elasticclaw/fix/daytona-keepalive-provider-config (Marc Campbell)
01d3b18 Merge pull request #86 from elasticclaw/fix/daytona-keepalive-provider-config (Marc Campbell)
aa0ffe8 fix: use hub-configured daytona provider in keepalive instead of env-only New(nil) (Marc Campbell)
0c3d628 fix: gate nudge on active turn and keep context-usage logs during gateway outage (Marc Campbell)
e7fa090 fix: improve gateway health monitoring and recovery (Marc Campbell)
4c7c124 Merge pull request #84 from elasticclaw/fix/daytona-bootstrap-wake-ordering (Marc Campbell)
030e7f7 Merge pull request #84 from elasticclaw/fix/daytona-bootstrap-wake-ordering (Marc Campbell)
d260479 fix: guard short token in keyPrefix logging to avoid panic (Marc Campbell)
2844bf2 fix: guard short token in keyPrefix logging to avoid panic (Rooty)
a283077 fix: use struct field for workspace data so {{issue.identifier}} works (Marc Campbell)
7441007 debug: add logging to pipeline workspace rendering (Marc Campbell)
1c8e9b5 feat: generate SECRETS.md listing injected env vars for agent discovery (Marc Campbell)
71c56c8 feat: workspace can request hub secrets to inject into claw env (Marc Campbell)
1b82a02 feat: render pipeline inject workspaces with Linear issue context (Marc Campbell)
a50d4c8 fix: drop BOOTSTRAP.md from linear workflows; use static wake + Linear tools (Marc Campbell)
d86dc2e debug: log stdout from workspace file write commands (Marc Campbell)
391fd71 debug: trace workspace file writes for daytona bootstrap (Marc Campbell)
0678228 fix: avoid daytona bootstrap wake race (Marc Campbell)
dcc143f Merge pull request #83 from elasticclaw/feat/branding-app-name-page-title (Marc Campbell)
3754c59 feat: use branded app name for page title (Marc Campbell)
68bcb9f Merge pull request #82 from elasticclaw/fix/hub-upgrade-followups (Marc Campbell)
64371cf fix: use sudo when upgrading remote hub (Marc Campbell)
beb59ff fix: fail clearly when ssh key file is missing (Marc Campbell)
46a6aed Merge pull request #81 from elasticclaw/fix/remove-hardcoded-repo-from-daytona-bootstrap (Marc Campbell)
f2251ed feat: verify configured repos during daytona gh auth (Marc Campbell)
13ff61a fix: remove hardcoded repo check from daytona bootstrap (Marc Campbell)
72356c6 Merge pull request #80 from elasticclaw/fix/hub-upgrade-profile-ssh-key (Marc Campbell)
a2e5c86 feat: support profile ssh_key for hub upgrade (Marc Campbell)
a61c690 Merge pull request #79 from elasticclaw/fix/daytona-bootstrap-openclaw-config-path (Marc Campbell)
ca6d41a fix: only gate wake on bootstrap for daytona claws (Marc Campbell)
099902c fix: ignore closed-db noise in pr watcher tests (Marc Campbell)
20a4e59 chore: remove sensitive github token debug logging (Marc Campbell)
5db333f fix: unset GH_TOKEN before gh auth login (Marc Campbell)
564fb6e fix: use token file redirection for gh auth (Marc Campbell)
6c457fb debug: make gh auth step explicit and non-retrying (Marc Campbell)
a65b788 debug: log full bridge proxy request and response (Marc Campbell)
7ff71ac debug: log gh auth command and output (Marc Campbell)
7bbf6b3 fix: use fetched github token for bootstrap clone (Marc Campbell)
b179f42 debug: instrument bridge github proxy path (Marc Campbell)
4036f7c debug: log github token fetch details in daytona bootstrap (Marc Campbell)
8239fa4 debug: split github token bootstrap into explicit steps (Marc Campbell)
a7e84f2 debug: split daytona github bootstrap into explicit steps (Marc Campbell)
fea6108 fix: remove bogus github token proxy readiness probe (Marc Campbell)
fb0bb66 fix: suppress wake until bootstrap fully succeeds (Marc Campbell)
a145f55 fix: require gh during github bootstrap (Marc Campbell)
04e7ea8 fix: require github clone success during daytona bootstrap (Marc Campbell)
caf338f fix: wait for github token proxy before clone (Marc Campbell)
c4f47b9 feat: keep active daytona sandboxes warm for open prs (Marc Campbell)
fb20a4e fix: reuse one github token during daytona bootstrap (Marc Campbell)
1ed6c9c fix: pin daytona bootstrap to openclaw 2026.4.27 (Marc Campbell)
68c4d4d fix: tighten daytona bootstrap install and gateway checks (Marc Campbell)
1523e7b fix: skip openclaw doctor during daytona bootstrap (Marc Campbell)
ff8ec47 fix: skip openclaw health check during daytona onboard (Marc Campbell)
1feb873 fix: handle daytona onboard without blind retries (Marc Campbell)
4f4f170 fix: install openclaw with explicit prefix on daytona (Marc Campbell)
d1c30c6 fix: repair daytona bootstrap diagnostics command (Marc Campbell)
ab4b596 debug: log remote openclaw state during daytona bootstrap (Marc Campbell)
6a20240 fix: restore daytona default auto-stop behavior (Marc Campbell)
58329a7 fix: wait for openclaw config before patching daytona model (Marc Campbell)
c157e0e fix: create openclaw config path during bootstrap (Marc Campbell)
96e1311 Merge pull request #78 from elasticclaw/fix/kill-daytona-claws-for-real (Marc Campbell)
c6ef12d fix: terminate daytona workspaces when killing claws (Marc Campbell)
3bb5c4d Merge pull request #77 from elasticclaw/fix/static-linux-release-binaries (Marc Campbell)
d0c4a25 fix: build portable static-ish linux release binaries (Marc Campbell)
87f5483 Merge pull request #76 from elasticclaw/fix/install-require-sudo (Marc Campbell)
c01bf8c fix: lock down temp hub config permissions (Marc Campbell)
cccf4eb fix: parse remote uid probe output robustly (Marc Campbell)
e3e0264 fix: write sudo config via temp file and move (Marc Campbell)
d842af9 fix: update config integration test for sudo flag (Marc Campbell)
2bf3e89 fix: write hub config to root home for sudo installs (Marc Campbell)
895bd3b fix: update install integration test for sudo flag (Marc Campbell)
f59c379 fix: validate sudo and elevate remote install steps (Marc Campbell)
5301dfb Merge pull request #75 from elasticclaw/fix/install-caddy-amazon-linux (Marc Campbell)
787408c fix: use versioned caddy asset download (Marc Campbell)
7644737 fix: install caddy statically on rpm distros (Marc Campbell)
8cf18d2 fix: detect package manager when installing caddy (Marc Campbell)
e1358d3 Merge pull request #74 from elasticclaw/fix/daytona-bootstrap-retry (Marc Campbell)
d74da67 fix: correct Daytona bootstrap retries (Cursor Agent)
6e37a4c fix: destroy Daytona sandbox on bootstrap failure (auto-stop disabled, would run forever) (Marc Campbell)
b83d80b fix: install openclaw synchronously (not background) to prevent verify-before-done; use nvm current PATH (Marc Campbell)
ad4345f fix: retry each bootstrap step 3x instead of whole bootstrap — faster recovery, no redundant reinstalls (Marc Campbell)
303bf58 fix: retry Daytona bootstrap up to 3x for transient API timeouts (Marc Campbell)
0be1198 Merge pull request #73 from elasticclaw/fix/daytona-auto-stop (Marc Campbell)
35d3143 fix: disable Daytona auto-stop (was killing agent sandboxes after 15min inactivity) (Marc Campbell)
fea2822 Merge pull request #72 from elasticclaw/fix/daytona-cred-helper-timing (Marc Campbell)
cf8103a fix: retry credential helper curl up to 10x; increase bridge connect wait to 90s (Marc Campbell)
93f18fa Merge pull request #71 from elasticclaw/feat/profile-ssh-host (Marc Campbell)
fcad394 feat: rename ssh_host to ssh_uri, support full ssh://user@host format (Marc Campbell)
df02f35 feat: support ssh_host in profile for hub upgrade (overrides URL-derived hostname) (Marc Campbell)
dfb4f2f Merge pull request #69 from elasticclaw/fix/create-workspace-default (Marc Campbell)
05d4664 Merge pull request #70 from elasticclaw/fix/pr-watcher-last-comment-at (Marc Campbell)
5ac0647 Mark create workspace flag required (Cursor Agent)
4f33789 fix: add last_comment_at and pr_conditions_fired to claw_prs CREATE TABLE (were only in ALTER) (Marc Campbell)
1461eaa fix: --workspace is now required on create (was defaulting to 'base' silently) (Marc Campbell)
b5e8b76 Merge pull request #68 from elasticclaw/feat/boot-time-autoresearch (Marc Campbell)
c9fe77f bootopt: guard manual rollback against untracked files (Cursor Agent)
9240e59 bootopt: guard against untracked files (Cursor Agent)
3e1cd69 chore: gitignore bootopt binary (Marc Campbell)
03fdd15 fix: populate TimingRuns on result; remove unreachable fallback in ParseHypothesis (Marc Campbell)
da31922 fix: rollback removes untracked files (git clean -fd); fatal on rollback failure (Marc Campbell)
d3e9f7c Fix bootopt cleanup and hypothesis parsing (Cursor Agent)
c289249 Fix hypothesis parsing with fenced diffs (Cursor Agent)
4663478 Fix provider cleanup and hypothesis parsing (Cursor Agent)
a1b3030 fix: treat 404 from Replicated API as VM deleted — mark claw offline and stop polling (Marc Campbell)
2b3d267 chore: remove unused contains helpers, VerifyTests, ManualClient, LLMClient interface (Marc Campbell)
326e383 fix: use cmd.Output() for list --json to avoid stderr noise corrupting JSON (Marc Campbell)
0f37954 fix: use --profile instead of --config for hub connection in bootopt VM tests (Marc Campbell)
d5e2727 fix: use correct CLI commands (create/list/kill, not claw create/list/kill) (Marc Campbell)
15909c7 fix bootopt hypothesis parsing (Cursor Agent)
757e664 fix bootopt test and baseline handling (Cursor Agent)
a4afcdb Fix VM boot test status parsing (Cursor Agent)
0118d5e feat: boot time autoresearch framework (Claw)
591727b Merge pull request #67 from elasticclaw/fix/wake-message-persist (Marc Campbell)
fceceae Hide persisted wake messages from chat (Cursor Agent)
2b7127e fix: persist wake message to DB to prevent re-intro on hub restart (Claw)
ba1773b Merge pull request #64 from elasticclaw/fix/no-duplicate-wake-message (Marc Campbell)
e06aefa Fix wake message helper doc placement (Cursor Agent)
53a15b8 Fix duplicate wake guards and bootstrap log tests (Cursor Agent)
35644a7 fix: use visible claw-bridge.log (not hidden .claw-bridge.log) (Marc Campbell)
62cc099 fix: skip intro wake message on reconnect if claw already has message history (Marc Campbell)
1d11e98 Merge pull request #62 from elasticclaw/fix/bonjour-patch-after-init (Marc Campbell)
fbf95e5 Reap bootstrap gateway process (Cursor Agent)
a839cce Fix onboard flags shell quoting (Cursor Agent)
8537f5c fix: use captured hubCfg instead of s.hubCfg in cred helper (data race) (Marc Campbell)
c48ae24 Fix claw bridge bootstrap log path (Cursor Agent)
d669100 fix: use visible claw-bridge.log (not hidden .claw-bridge.log) (Marc Campbell)
4aec3f2 fix: single apt install pass with --fix-broken to avoid dpkg state corruption (Marc Campbell)
8c98667 Fix bootstrap bridge startup hang (Cursor Agent)
b0a6468 fix: nohup claw-bridge instead of exec — SSH session was killing the process on exit (Marc Campbell)
1b3fe48 fix: FIREWORKS_API_KEY unbound variable — add :- defaults and move LLMKeyEnv before ONBOARD_FLAGS (Marc Campbell)
336e30c Fix claw bridge bootstrap cleanup (Cursor Agent)
025cb61 Fix OpenClaw bootstrap config patch ordering (Cursor Agent)
0c9356a Fix bootstrap config quoting and remove dead code (Cursor Agent)
6c8165a feat: move bootstrap logic into claw-bridge --bootstrap mode; fix dead cred helper code; update tests (Marc Campbell)
2f78beb perf: move Nix finalization after bridge connect — fully off critical path (Marc Campbell)
de21b18 Retry device identity parsing while waiting (Cursor Agent)
6633710 perf: move Nix wait to after gateway+bridge download — gateway doesnt need Nix (Marc Campbell)
6fae715 perf: run Nix install in background parallel to OpenClaw install (saves ~60s) (Marc Campbell)
8cb1593 perf: parallelize device.json wait with claw-bridge download to reduce startup time (Marc Campbell)
eb0e3a3 fix: increase device.json wait to 90s in bootstrap (observed ~77s on real VMs) (Marc Campbell)
bccbf93 Remove stale relay env comment (Cursor Agent)
ea6bfcb fix: wait for device.json in bootstrap; increase timeouts; clean relay remnants from env file (Marc Campbell)
1d09ea4 Export persisted bridge environment (Cursor Agent)
e5aca3e Remove dead relay env persistence (Cursor Agent)
c067d5c fix: add --skip-health to openclaw onboard so device.json is created before gateway starts (Marc Campbell)
a81ee58 Quote persisted bridge environment values (Cursor Agent)
d66dd23 Merge branch 'chore/remove-relay' into fix/bonjour-patch-after-init (Marc Campbell)
c341383 chore: remove relay support — never shipped, breaks bootstrap with unbound vars (Marc Campbell)
8516083 fix: use ${VAR:-} for optional relay vars in env file to avoid unbound variable error (Marc Campbell)
bfcbbf5 fix: wait for gateway to create device.json instead of generating mismatched identity (Marc Campbell)
27f6a16 Persist relay env vars for bridge restarts (Cursor Agent)
8dcfcb7 fix: use openclaw plugins disable bonjour instead of env var (env var broken on 2026.4.25) (Marc Campbell)
a240137 Fix claw bridge auth fallback (Cursor Agent)
011fd44 fix: respect gateway auth mode (token vs password); persist bridge env; fix device.json generation (Marc Campbell)
36d65f0 fix: generate device.json if missing instead of failing on startup (Marc Campbell)
a502b9b fix: use OPENCLAW_DISABLE_BONJOUR=1 env var instead of config patching (Marc Campbell)
4847353 fix: patch bonjour config AFTER openclaw initializes it on first start (Marc Campbell)
3d8bb84 Merge pull request #61 from elasticclaw/fix/replicated-bonjour-crash (Marc Campbell)
3dd0257 Avoid wiping OpenClaw config on parse failure (Cursor Agent)
652c9c4 Avoid creating OpenClaw config stub (Cursor Agent)
dea408c fix: disable Bonjour/mDNS in OpenClaw on Replicated VMs — crashes on server with no multicast (Marc Campbell)
90884b3 Merge pull request #60 from elasticclaw/fix/token-sync-on-restart (Marc Campbell)
8252659 fix: sync DB tenant token with hub.yaml on restart; accept config token in resolveAuthToken (Marc Campbell)
2546c59 local (Marc Campbell)
7eb2751 Merge pull request #58 from elasticclaw/feat/github-oauth (Marc Campbell)
95bbeaf Fix GitHub auth me session handling (Cursor Agent)
5edec38 Fix GitHub OAuth session signing key (Cursor Agent)
abcc1f1 Fix OAuth logout and access patch preservation (Cursor Agent)
ee144f5 Fix GitHub session auth checks (Cursor Agent)
bade406 feat: admin RBAC — gate /settings on Admins list, hide settings icon for non-admins (Marc Campbell)
a535368 Require view access for claw writes (Cursor Agent)
7046f9b fix: remove dead fallback auth block in handleUserWS (withAuth guarantees tenantID) (Marc Campbell)
39a4928 Deep copy auth config before settings patch (Cursor Agent)
1baa6ba Refresh access config for websocket sends (Cursor Agent)
3d5107d Enforce claw subresource tag access (Cursor Agent)
85bb17f fix: propagate githubLogin into context in WS fallback auth path (Marc Campbell)
70f81a8 Secure GitHub OAuth admin and websocket access (Cursor Agent)
b35525a Fix GitHub OAuth auth edge cases (Cursor Agent)
61768ce Preserve access admins in settings patch (Cursor Agent)
50e0788 fix: remove test for deleted oauth code cleanup, drop unused time import (Marc Campbell)
7c2601a feat: add disable_password_auth toggle — lock to GitHub OAuth only (Marc Campbell)
1fc4dd4 fix: read ec_github_token as fallback for ec_hub_token in settings and workflows (Marc Campbell)
8a8f0e8 feat: move GitHub OAuth entirely to frontend — no Go redirects in browser URL (Marc Campbell)
c033ea8 fix: redirect oauth callback to frontend origin (stored from Referer cookie) (Marc Campbell)
e2c5d59 Fix GitHub OAuth settings handling (Cursor Agent)
390b4d4 fix: include redirect_uri derived from request host in GitHub OAuth flow (Marc Campbell)
79a7562 feat: rework authentication UI — status cards with inline edit instead of tabs (Marc Campbell)
77a1a74 feat: rename security -> authentication, add GitHub OAuth config UI with RBAC settings (Marc Campbell)
1a389b4 fix: enforce tag-based ACL on WebSocket (initial broadcast + message send); fix messages GET 404 vs 403 (Marc Campbell)
53dd05d Fix GitHub OAuth access edge cases (Cursor Agent)
637d077 Clear stale GitHub token on password login (Cursor Agent)
b0dc954 Fail closed on claw tag lookup errors (Cursor Agent)
3875530 merge: resolve conflict with origin/main, use s.ghBaseURL() and req/err form (Marc Campbell)
b27bc4d fix: use canInteractWithClaw for PATCH and DELETE in handleClawDetail (Marc Campbell)
0af2d82 Merge pull request #59 from elasticclaw/feat/ai-config (Marc Campbell)
5e6edb7 Fix AI config placeholder restore and mask checks (Cursor Agent)
b0f022e Fix typewriter queue ordering around YAML streaming (Cursor Agent)
f1cb4b5 fix: call setBackupPath(null) on start over to clear stale state (Marc Campbell)
01cd4eb fix: reject configs with unresolved *** mask values in sensitive fields (Marc Campbell)
20ba37e Fix empty assistant bubble for YAML-only responses (Cursor Agent)
a5e6af0 Fix AI config chat message finalization and input ref typing (Cursor Agent)
4db3d37 Validate hub token in AI config apply (Cursor Agent)
d96c1ff fix: check HTTP status before parsing body in callAnthropic and callOpenAI (Marc Campbell)
117afc9 fix: correct secrets map masking loop index (j:=0, j+1 bound check) (Marc Campbell)
92af04f Fix ai chat typewriter token duplication (Cursor Agent)
7a4c94f Fix YAML stream fence state reset (Cursor Agent)
2db3f4f Fix AI config chat YAML stream and history handling (Cursor Agent)
46d0d29 fix: make backend yaml block regex case-insensitive, match yml variant (Marc Campbell)
49a3cd7 fix: always finalize typewriter in finally block to prevent stuck streaming state (Marc Campbell)
5bf594d chore: remove unused yamlQueueRef and yamlIntervalRef dead refs (Marc Campbell)
0a5e8cd fix: strip yaml fence from streaming tokens; add streaming indicator to config panel (Marc Campbell)
0ee1ffc fix: stream yaml tokens live to right panel as they arrive, not after (Marc Campbell)
5f63bc4 fix: use plain pre during yaml streaming, apply shiki only after done (Marc Campbell)
e8648b8 fix: hydration mismatch — init state empty, restore sessionStorage after mount (Marc Campbell)
d76d59b feat: typewriter effect for proposed YAML in right panel while streaming (Marc Campbell)
521ed57 fix: strip open/incomplete yaml blocks during streaming so YAML never appears in chat (Marc Campbell)
86e39f3 fix: strip hub.yaml blocks from chat bubbles — YAML goes to right panel only (Marc Campbell)
03e8b09 fix: unique keys in renderMarkdown; add Start over button (Marc Campbell)
0f2dd02 Validate AI config chat history roles (Cursor Agent)
9acad0d feat: add Discard button to clear proposed config (Marc Campbell)
1522e3c fix: tell AI the config is visible in the right panel, don't repeat it in chat (Marc Campbell)
004881c Fix AI config typewriter cleanup and chat persistence (Cursor Agent)
dc9c2b2 feat(ai-config): typewriter effect, markdown rendering, secret reveal toggle, session persistence (Marc Campbell)
de2acce fix: keep focus on chat input after sending message (Marc Campbell)
34812ea Fix YAML-safe AI placeholder secret substitution (Cursor Agent)
885f06b Handle non-OK current config fetch response (Cursor Agent)
d98e885 Fix AI config streaming error cleanup and layout offset (Cursor Agent)
2b8391f feat: shiki syntax highlighting for hub.yaml in ai-config panel (Marc Campbell)
fa28b3b fix: ai-config section breaks out of max-w-2xl constraint, fills full width (Marc Campbell)
9f74b38 fix: ai-config panel 50/50 split instead of fixed 22rem right column (Marc Campbell)
5902dd5 feat: streaming SSE AI config with typewriter effect and fixed two-column layout (Marc Campbell)
92582c0 Fix secret restore matching for reordered YAML sequences (Cursor Agent)
f71ab03 Fix AI config secret restore and LLM key errors (Cursor Agent)
89461b5 Fix AI config sanitization, backup path validation, and chat retry handling (Cursor Agent)
9e66cab feat: Configure with AI — chat interface for hub.yaml changes (Marc Campbell)
ef45e98 Fix OAuth next redirect and enforce claw view access (Cursor Agent)
b21b52c Fix GitHub OAuth API auth and token URL exposure (Cursor Agent)
525afe5 Fix GitHub OAuth session signing and next redirect (Cursor Agent)
0d3240d Merge pull request #57 from elasticclaw/feat/merge-pr-impl (Marc Campbell)
e0ca7ce feat: GitHub OAuth login + tag-based access control (Marc Campbell)
2a80411 Handle NewRequest error in mergePRForClaw (Cursor Agent)
b186f0d feat: implement merge_pr — squash merge via GitHub API when pr_conditions met (Marc Campbell)
3d748ae Revert "feat: implement merge_pr — squash merge via GitHub API when pr_conditions met" (Marc Campbell)
489b9a1 feat: implement merge_pr — squash merge via GitHub API when pr_conditions met (Marc Campbell)
4167fe5 fix: write PR context to CONTEXT.md not BOOTSTRAP.md to prevent re-read loop (Marc Campbell)
19d22a0 Merge pull request #56 from elasticclaw/fix/tag-overflow (Marc Campbell)
6dd5353 fix: include checks and statuses read permission in GitHub installation tokens (Marc Campbell)
620ace8 fix: include git credential helper info and checkout command in github PR BOOTSTRAP.md (Marc Campbell)
96f1a6f Fix newly added tags being hidden (Cursor Agent)
11aee97 fix: use compact github_pr:owner/repo#N tag instead of full URL (Marc Campbell)
7697132 fix: truncate long tags in left nav to prevent horizontal overflow (Marc Campbell)
aff6f1e Merge pull request #55 from elasticclaw/fix/issue-comment-author-filter (Marc Campbell)
4d78821 fix: issue_comment handler applies author filter on PR author, not commenter (Marc Campbell)
361f037 Merge pull request #54 from elasticclaw/feat/misc-fixes (Marc Campbell)
b36dc95 Merge pull request #53 from elasticclaw/feat/message-quality (Marc Campbell)
f5cd897 Fix comment injection and secret delete disk-read handling (Cursor Agent)
af83633 fix: apply base_branch filter in issue_comment handler; only break on successful creation (Marc Campbell)
de7254e Fix issue_comment PR URL lookup for GitHub Enterprise (Cursor Agent)
ffe2730 Fix interrupted message timestamp consistency (Cursor Agent)
ad2be25 Fix GitHub webhook API base URL fallback (Cursor Agent)
477ea16 Fix claw reconnect race in defer cleanup (Cursor Agent)
6e01442 Fix GitHub webhook event config and trigger filtering (Cursor Agent)
2ad358e Fix secret persistence and settings consistency bugs (Cursor Agent)
41686d8 fix: clean up streaming state before empty message guard (Cursor review) (Marc Campbell)
d25aac6 feat: handle issue_comment events — inject into existing claw or create new one (Marc Campbell)
5e00ed1 fix: misc fixes - github webhook URL, secrets read from disk, SaveHubConfig secret merge (Marc Campbell)
0da28e3 Fix streaming message guards in claw websocket handler (Cursor Agent)
ee35e33 Fix context warning reset on message completion (Cursor Agent)
2eb4546 Fix per-turn context warning trigger (Cursor Agent)
2e44174 fix: message quality improvements in hub (Marc Campbell)
4bdfb9f fix: write workspace files AFTER bootstrap script; suppress re-wake for pipeline claws on hub restart (Marc Campbell)
85d57ad debug: log workspace files being written to VM at bootstrap (Marc Campbell)
d50c2cd fix: skip synchronize only for own app bot, not all bots (dependabot still triggers) (Marc Campbell)
b359e57 fix: skip synchronize events from bot senders (claw's own commits) (Marc Campbell)
d2a97e4 fix: github PR claws use PR-only BOOTSTRAP, drop edited action inject (Marc Campbell)
6696491 fix: handle more PR event actions (edited, labeled, etc) — inject if ready, skip if not (Marc Campbell)
f4be8bd debug: log pipeline entry init result (Marc Campbell)
ce56ea7 chore: remove debug logging added during github webhook investigation (Marc Campbell)
6897b56 fix: use injectHubMessageByID for github PR update messages (hub role) (Marc Campbell)
88ab8e5 fix: skip PR update inject if claw gateway not ready yet (Marc Campbell)
29e0ac8 debug: log workflows yaml section in SaveHubConfig (Marc Campbell)
60a5987 debug: log exact yaml being written in SaveHubConfig (Marc Campbell)
c2f3a19 fix: github workflow uses PR URL as key — create once, inject on updates (Marc Campbell)
90820a1 debug: log stack trace on every SaveHubConfig call (Marc Campbell)
8b75947 debug: log workflows before saving to hub.yaml (Marc Campbell)
32b882d debug: log raw push body and decoded workflows (Marc Campbell)
a7baa58 debug: add detailed logging to github webhook handler and workflow matching (Marc Campbell)
e09f094 local (Marc Campbell)
3072b88 fix: settings page should redirect to /settings/runtimes, not render old UI (Marc Campbell)
fadfc91 Merge pull request #48 from elasticclaw/file-drop-in (Marc Campbell)
c59516d Merge pull request #51 from elasticclaw/feat/settings-routes (Marc Campbell)
63114fc Fix webhook routing, workflow wake prompt, and settings redirect (Cursor Agent)
77a1826 Fix slash-command attachment clearing and timeout race (Cursor Agent)
b41ef39 fix settings route and slash command attachment clearing (Cursor Agent)
85ad58b fix hub claw wake, poller status guards, and stream timeout (Cursor Agent)
4fcfc7e Merge pull request #52 from elasticclaw/feat/github-workflow (Marc Campbell)
124dd68 Fix PR watcher quiet period and file route parsing (Cursor Agent)
d7b05c9 Fix PR condition CI SHA lookup and request error handling (Cursor Agent)
6ce5f2d fix: quiet_for falls back to PR creation time when no comments (Marc Campbell)
af68cbd Fix PR watcher timestamps and webhook/workflow locking (Cursor Agent)
299e0c1 Fix pipeline wake initialization and review condition logic (Cursor Agent)
65b81c4 Fix workflow lookup and guard VM status updates (Cursor Agent)
fce5f2e feat: add GitHub workflow integration with webhook handler and pr_conditions pipeline trigger (Marc Campbell)
9f4e30e Fix extension extraction to use filepath.Ext instead of strings.LastIndex (Cursor Agent)
cb7fa8b Fix settings page redirect to non-existent route and restore streaming timeout feature (Cursor Agent)
ac85798 Fix VM poller status overwrites and restore pipeline initialization (Cursor Agent)
cc21a9b feat: add URL-based routing to settings page (Marc Campbell)
c329452 Fix symlink resolution mismatch in file read path check (Cursor Agent)
4edfd21 Fix symlink bypass in path containment check (Cursor Agent)
ccf6c36 Fix: Add missing source prop to history attachments in card view (Cursor Agent)
30c074d bugbot + consolidate redundant code (Noah Campbell)
d955a44 Fix attachment state persisting across claw ID changes (Cursor Agent)
089ba1f Fix XSS vulnerability in file serving and drag overlay flickering (Cursor Agent)
e4397c5 Fix tenant ownership verification in file endpoints (Cursor Agent)
1f816b3 grid view can add attachments, and shows attachment previews in full view (Noah Campbell)
81ccd95 can upload files to claws (Noah Campbell)
5adfabf Merge pull request #50 from elasticclaw/feat/hub-message-role (Marc Campbell)
0d7d346 Fix streaming timeout message race (Cursor Agent)
b13bd73 Fix PR watcher dead code and slash command matching (Cursor Agent)
3ecf22b feat: add hub role for system-injected messages (Marc Campbell)
99097ed feat: claw control — loop detection, turn timeout, and /commands UI (Marc Campbell)
eab9fe7 fix: hub upgrade respects --profile flag (Marc Campbell)
bf077f5 fix: hub upgrade respects --profile flag (Marc Campbell)
02d61d6 fix: workflow commands respect --profile flag (Marc Campbell)
8b1df6b fix: workflow commands respect --profile flag (Marc Campbell)
798d4ab Merge pull request #47 from elasticclaw/feat/pipeline-engine (Marc Campbell)
233bc72 fix: use repo-scoped GitHub token for comment fetching (private repos) (Marc Campbell)
eb43770 debug: log error when comment fetch fails (Marc Campbell)
9e3c9ab fix: remove dead guard that skipped comment checks for idle claws (Marc Campbell)
106503c debug: log isPipelineDriven in poll loop (Marc Campbell)
a7f9cd4 debug: log comment count and watermark in pr comment check (Marc Campbell)
3510d32 fix: suppress pr-watcher poll log when 0 PRs tracked (Marc Campbell)
52bb47c fix: PR poll interval 2min → 10s (Marc Campbell)
1a83c58 fix: VM watcher log shows VM state not stale snapshot (Marc Campbell)
2f037c6 fix: exclude idle/connected claws from VM status poll query (Marc Campbell)
0d85bbf fix(hub): guard RowsAffected on exec error (Cursor Agent)
1317355 fix: VM watcher uses conditional UPDATE to never clobber idle/connected status (Marc Campbell)
4093184 fix: VM watcher must not overwrite idle/connected status with 'starting' (Marc Campbell)
585a248 Fix DONE trigger matching and remove unused FindStage (Cursor Agent)
96ee342 fix: remove status gate on checkPRMerged — starting/connected claws were skipped (Marc Campbell)
db255e7 debug: add poll logging to pr_watcher (Marc Campbell)
34e6744 Fix PR comment forwarding to pipeline-driven claws (Cursor Agent)
eff1988 Fix PR merge watcher scope for connected claws (Cursor Agent)
56bc834 Fix PR watcher polling status and comment dedupe (Cursor Agent)
c91e0e6 Fix pipeline entry injection timing and duplicate issue queries (Cursor Agent)
94579b5 fix: poll every 10s, check PR close/merge for active claws, forward PR comments to pipeline claws (Marc Campbell)
bbe345d feat: pipeline engine for workflow claws (Marc Campbell)
44764ca fix: update secrets placeholder to linear_webhook_secret (Marc Campbell)
140ce73 feat: secrets management — hub API + settings UI (Marc Campbell)
8fab263 feat: workflow create --name flag, no interactive wizard (Marc Campbell)
9306caa local (Marc Campbell)
4e61af3 Merge pull request #45 from elasticclaw/feat/workflow-integration-tests (Marc Campbell)
6b1b96c Merge pull request #46 from elasticclaw/feat/workflow-as-code (Marc Campbell)
d609e3f Fix noop claw status update race (Cursor Agent)
dcfd39d fix: address Cursor review comments on PR #46 (Marc Campbell)
bf12e3e fix: guard noop provider behind ELASTICCLAW_NOOP_PROVIDER env var (Marc Campbell)
7d1a144 Merge pull request #44 from elasticclaw/feat/workflow-ux-improvements (Marc Campbell)
df2b7d6 Fix workflow AssignedTo and config persistence bugs (Cursor Agent)
ba67383 Fix workflow settings field loss and filter edge cases (Cursor Agent)
d897329 Fix workflow ordering and webhook secret ref handling (Cursor Agent)
b697513 feat: workflows UI is now read-only, managed via elasticclaw workflow push (Marc Campbell)
ff28dde fix: align workflow yaml schema and show filtering (Cursor Agent)
dcba52a feat: workflow-as-code — labels/assignedTo filters, workflow push/create CLI, hub CRUD API (Marc Campbell)
0c0c50a Fix PR watcher closed-state dedupe and test nil response (Cursor Agent)
f0a2221 Fix workflow test payload and route drift issues (Cursor Agent)
8100c54 Fix workflow provider order and clean dead code (Cursor Agent)
2092cfe Fix PR watch-mode close-without-merge messaging (Cursor Agent)
f098088 feat: add workflow integration test harness (Marc Campbell)
b0ceaa0 Skip CI/bugbot checks after closed PR removal (Cursor Agent)
999fc69 Fix repeated closed PR notifications in watcher (Cursor Agent)
0d7f457 feat: workflow claw UX improvements (Marc Campbell)
5bbf8ec Merge pull request #42 from elasticclaw/fix/bootstrap-auth-store (Marc Campbell)
a6ef1cc fix bootstrap auth/config for openai-compatible providers (Cursor Agent)
e129839 Merge pull request #43 from elasticclaw/use-hub-workspaces (Marc Campbell)
49c5312 fix hub default model resolution and daytona env export (Cursor Agent)
5b892d5 adds workspace show and rm commands (Noah Campbell)
1e1ea53 feat: provider-aware model dropdown in UI, remove untested providers (Marc Campbell)
ab4bf6f fix: update test expectation for fireworks model ID full path (Marc Campbell)
3b84817 fix: correct fireworks model IDs to include provider prefix (Marc Campbell)
662aaea fix: resolve default model from default LLM key when no explicit key selected (Marc Campbell)
c99c7ef refactor bootstrap key selection logic (Cursor Agent)
361553c fix daytona bootstrap llm key env injection (Cursor Agent)
4e1b8b3 fix: use openclaw onboard --auth-choice for provider auth instead of json patch (Marc Campbell)
46875fe can use workspaces on a hub (Noah Campbell)
9343ef9 Merge pull request #41 from elasticclaw/feat/llm-key-default-model (Marc Campbell)
044021c Fix clearing llm key default model in settings patch (Cursor Agent)
354096c Fix preserving llm key default model on partial patch (Cursor Agent)
a4bc449 feat: add default_model field to LLMKeyConfig for per-key model selection (Marc Campbell)
3b8b42d fix: use correct openclaw api type openai-completions for OpenAI-compatible providers (Marc Campbell)
cb67ee5 Merge pull request #39 from elasticclaw/fix/llm-key-save-and-bootstrap (Marc Campbell)
db5dcae fix race by using locked hub config snapshot (Cursor Agent)
edfa315 refactor: use custom UnmarshalYAML for llm_keys instead of yaml:"-" hack (Marc Campbell)
a57abbd fix: persist llm_keys in SaveHubConfig and dynamic provider config in bootstrap (Marc Campbell)
29369df Merge pull request #38 from elasticclaw/fix/workflow-form-integration-aware (Marc Campbell)
cb14a57 Fix shortcut workflow secret regeneration after failed save (Cursor Agent)
492e024 Fix Shortcut webhook signature header name (Cursor Agent)
ee9d0dc Fix Shortcut webhook signature header bypass (Cursor Agent)
38a8761 Fix stale workflow fields when switching to Shortcut (Cursor Agent)
d6c903f fix: workflows description no longer mentions Linear specifically (Marc Campbell)
15f9a9d feat: workspace dropdown in workflow add/edit forms (Marc Campbell)
0977818 fix: tag placeholder adapts to integration type (shortcut vs linear) (Marc Campbell)
a38c424 feat: Shortcut workflows generate webhook secret for user to copy (Marc Campbell)
7200b91 fix: workflow form hides Linear-only fields when Shortcut workspace selected (Marc Campbell)
a1727fb Merge pull request #34 from elasticclaw/fix/workflow-done-cleanup (Marc Campbell)
d30539f Fix claw status races in done and PR watcher (Cursor Agent)
eb3de41 fix: nil panic on failed DB exec under mutex (Marc Campbell)
c09eb3e Merge pull request #37 from elasticclaw/feat/shortcut-integration (Marc Campbell)
34b023a Fix claw reconnect status handling for idle/deleted (Cursor Agent)
5626ef7 hub: inject Shortcut token into workflow claw env (Cursor Agent)
c40f737 Preserve idle status on bridge reconnect upsert (Cursor Agent)
2908f3b Fix Shortcut trigger guard and workspace rename token retention (Cursor Agent)
6fcf943 Fix: Only terminate idle claws when PR is merged/closed (Cursor Agent)
db2e22b fix: Shortcut bugbot fixes from code review (Marc Campbell)
ac61be4 fix: idle status protected from disconnect overwrite; provider-aware VM termination (Marc Campbell)
a2bee52 Fix duplicate VM termination when multiple PRs per claw are merged (Cursor Agent)
25856d2 Fix Shortcut workflow bugs: honor workspace config and correct workflow lookup (Cursor Agent)
338e6d7 Fix uptime display for idle claws (Cursor Agent)
8923d5c Fix workspace collision, case-sensitive sc check, and config mutation bugs (Cursor Agent)
80143cd Fix Shortcut integration bugs: workflow matching, integration type detection, and webhook auth (Cursor Agent)
ee034df Fix idle status mapping and remove redundant DB query (Cursor Agent)
8aa9196 feat: Shortcut integration — workflows + settings UI (Marc Campbell)
507fbe7 Merge pull request #36 from elasticclaw/feat/whitelabel (Marc Campbell)
1f61575 Merge pull request #35 from elasticclaw/feat/workspace-pr-watch-config (Marc Campbell)
8e7266b update (Marc Campbell)
e1d0535 fix: propagate workspace auto-watch settings in workflow path (Cursor Agent)
7ea0c09 feat: white-label branding in hub.yaml (Marc Campbell)
043a04a feat: auto_watch_ci / auto_watch_bugbot in elasticclaw-config.yaml (Marc Campbell)
c4507ff Merge pull request #31 from elasticclaw/fix/workflow-context-bootstrap (Marc Campbell)
4ac91d8 fix: claw stays alive after [DONE] to watch PR — terminates on merge/close (Marc Campbell)
0ca6724 fix: destroy VM on [DONE] so bridge can't reconnect (Marc Campbell)
7ea1a61 fix: GONOSUMDB=* on build-bridge-linux to avoid sum.golang.org timeout (Marc Campbell)
b9431f1 fix: wider feather (0.68-0.97), blur 3.5, opacity 90% (Marc Campbell)
6484676 fix: wider feather zone + Gaussian blur on alpha for smooth edges (Marc Campbell)
1ad113b fix: mascot opacity 80% (Marc Campbell)
f2f2e85 fix: mascot opacity 60% (Marc Campbell)
c99b8fb fix: proper alpha mask via Pillow — smooth whiteness threshold, 18% saturation (Marc Campbell)
fc32dfe fix: mascot opacity 40% for subtle watermark feel (Marc Campbell)
ccf330d fix: mascot desaturated to 15% for muted ghost effect (Marc Campbell)
55aba4d fix: mascot edge feathering — blur alpha channel for smooth edges (Marc Campbell)
348ddf9 fix: use transparent PNG mascot, no more white background (Marc Campbell)
3ebd656 fix: mask mascot image with radial gradient to hide white background (Marc Campbell)
bbb67ce fix: resolve merge conflict markers in conversation-view.tsx (Cursor Agent)
9d69065 fix: mascot mix-blend-mode lighten to remove white background on dark theme (Marc Campbell)
7b88d04 fix: workflow claws get proper context and auto-start (Marc Campbell)
ed71689 Merge pull request #33 from elasticclaw/fix/workflow-wake-on-connect (Marc Campbell)
f7bef69 refactor: eliminate duplication in GitHub token resolution (Cursor Agent)
6a0298b fix: [DONE] PR validation uses repo-scoped token for private repos (Marc Campbell)
e4bd720 fix: workflow wake message — do not ask permission, just start (Marc Campbell)
cd67838 fix: send wake message on connect when gateway_ready=true (Marc Campbell)
a2c79d9 Merge pull request #32 from elasticclaw/feat/mascot (Marc Campbell)
261fe29 fix: restore original ElasticClaw favicon (icon.svg was unintentionally replaced) (Cursor Agent)
da1c3a5 feat: new favicon — red claw gripping amber lightning bolt on dark circle (Marc Campbell)
1c39d41 feat: lobster mascot on empty dashboard state (Marc Campbell)
7b72c5f Merge pull request #30 from elasticclaw/fix/workflow-workspace-tag (Marc Campbell)
15a7191 fix: workflow uses workspace's provider, not just hub default (Marc Campbell)
ca9ff93 fix: workflow provisioning silently skipped for Daytona and Vercel providers (Marc Campbell)
a4e9bd1 fix: workflow-created claws now get workspace:<name> tag (Marc Campbell)
7f5c64c Merge pull request #28 from elasticclaw/feat/workflow-toggle (Marc Campbell)
9baae37 Merge pull request #29 from elasticclaw/feat/settings-workspaces (Marc Campbell)
15df088 fix: toggle ON state uses green-600 (was bg-primary which is near-white in this theme) (Marc Campbell)
e7d5b37 fix: workflow toggle UX polish (Marc Campbell)
7ee11c6 Fix: Check response status in handleDelete to prevent silent failures (Cursor Agent)
a948e1d Fix: prevent disabled workflows from logging not_actionable events (Cursor Agent)
010f23f fix: workflow row toggle switch + Activity as button (Marc Campbell)
f390c0a feat: Workspaces section in settings — list and delete hub-stored workspaces (Marc Campbell)
99cc126 feat: on/off toggle per workflow in settings (Marc Campbell)
cf8b8c0 Merge pull request #25 from elasticclaw/feat/done-signal-pr-validation (Marc Campbell)
1dcaa09 Merge pull request #27 from elasticclaw/fix/workflow-workspace-config (Marc Campbell)
55651ca test: unit tests for [DONE] PR signal parsing and validation (Claw)
8ed7445 Merge pull request #26 from elasticclaw/feat/claw-drag-reorder (Marc Campbell)
abd5f4a fix: workflow-created claws now respect elasticclaw-config.yaml from pushed workspace (Elasticclaw Agent)
006c398 docs: update workspace MEMORY.md with drag-and-drop reordering notes (Elasticclaw Agent)
d2feacd feat: drag-and-drop reordering for board cards on dashboard (Elasticclaw Agent)
0b8d892 feat: require open PR URLs in [DONE] signal before terminating workflow claw (Claw)
a367096 feat: drag-and-drop claw reordering in sidebar (Elasticclaw Agent)
de31b87 fix: hub.yaml llm_keys auto-migrates old flat map format (Marc Campbell)
afaef7e Merge pull request #22 from elasticclaw/feat/pr-watcher (Marc Campbell)
08a1b85 fix: delete claw_prs before claws to avoid FK constraint error (Marc Campbell)
8caf82b Fix CI SHA seeding to prevent historical failure flooding (Cursor Agent)
cf06985 Fix PR watcher bugs: multi-claw tracking and historical comment flooding (Cursor Agent)
24ef47f Fix 6 critical bugs in PR watcher feature (Cursor Agent)
02e49ff feat: PR watcher — detect PRs, poll CI/bugbot, inject messages (Marc Campbell)
c5987ee Merge pull request #24 from elasticclaw/feat/named-llm-keys (Marc Campbell)
fa040d3 Fix bugs in LLM key management (Cursor Agent)
5e69a81 Merge pull request #23 from elasticclaw/fix/kill-confirm (Marc Campbell)
1d207dc Fix LLM key handling bugs (Cursor Agent)
d67847f Fix LLM key configuration bugs (Cursor Agent)
41a1965 feat: named LLM keys — multiple providers, default key, per-workspace override (Marc Campbell)
1b615a2 fix: Kill button requires confirmation dialog (Marc Campbell)
2f4c80b Merge pull request #21 from elasticclaw/fix/preserve-whitespace-chunks (Marc Campbell)
906450f Revert "fix: preserve whitespace-only streaming chunks (newlines were dropped)" (Cursor Agent)
7a8ec6a fix: preserve whitespace-only streaming chunks (newlines were dropped) (Marc Campbell)
7df7ae2 Merge pull request #16 from elasticclaw/fix/workflow-empty-previous-status (Marc Campbell)
5089545 Merge pull request #15 from elasticclaw/fix/401-redirect-to-login (Marc Campbell)
960cd79 Merge pull request #18 from elasticclaw/feat/workspace-config-validation (Marc Campbell)
efb05ab Merge pull request #19 from elasticclaw/fix/credential-helper-newlines (Marc Campbell)
2a016eb fix: credential helper script written with literal \n (Replicated path) (Marc Campbell)
859a8bb Fix: Handle empty YAML files with clear error message (Cursor Agent)
8be8f79 feat: strict validation of elasticclaw-config.yaml at create time (Marc Campbell)
5cd3eb5 Fix 401 error briefly rendering 'Cannot reach hub' screen (Cursor Agent)
d331b8d Fix overly broad guard removal in Linear webhook handler (Cursor Agent)
7c7fc03 Fix: Clear in-memory token cache on 401 response (Cursor Agent)
642fee0 fix: workflow create fires even when Linear omits previousStatus (Marc Campbell)
ba6fcd0 fix: redirect to /login on 401 instead of showing 'cannot reach hub' (Marc Campbell)
9374071 Merge pull request #14 from elasticclaw/fix/workflow-activity-static-route (Marc Campbell)
2ae284d fix: prevent spurious API fetch when name param is missing (Cursor Agent)
044e0a5 fix: CI web build — use npm install (package-lock.json is gitignored) (Marc Campbell)
8136455 fix: workflow activity page uses query param (not dynamic route) (Marc Campbell)
92e35ad Merge pull request #13 from elasticclaw/feat/elasticclaw-workspace-workflow-context (Marc Campbell)
7b1830a Merge pull request #12 from elasticclaw/feat/workflows-webhook-url (Marc Campbell)
85daf22 docs: update elasticclaw workspace with full workflow context (Marc Campbell)
6608e41 Merge pull request #11 from elasticclaw/feat/hub-upgrade (Marc Campbell)
f5a0c31 fix: remove buggy LIKE workflow tag filter in terminate query (Marc Campbell)
ce57f92 fix: prevent spurious error events for non-state Linear updates and add terminateOnLeave checkbox to workflow edit form (Cursor Agent)
20fe3c9 Fix workflow rename webhook secret preservation (Cursor Agent)
aff3bc4 Fix SQL LIKE wildcard escaping in workflow name matching (Cursor Agent)
7055a22 fix: poller and bootstrap skip deleted claws (Marc Campbell)
1d3a74b fix: abort provisioning if claw deleted mid-flight (race condition) (Marc Campbell)
3a8f30e Fix SQLite timestamp format mismatch in workflow event pruning (Cursor Agent)
102b357 Fix workflow webhook bugs: cross-workflow termination, team filter, secret validation, and workspace rename token loss (Cursor Agent)
f402f41 fix: broadcast deleted status when workflow terminates a claw (Marc Campbell)
a0ec728 fix: workflow claw appears immediately on dashboard (Marc Campbell)
69c773a fix: exclude deleted claws from list API (Marc Campbell)
5942357 fix: terminate claw when issue leaves trigger status even if previousStatus is empty (Marc Campbell)
bcc9837 feat: workflow tags and color applied to created claws (Marc Campbell)
52b4e4a fix: add linear_issue_id to CREATE TABLE claws (was ALTER TABLE only) (Marc Campbell)
3864d73 feat: workflow activity log — last 4h of webhook events (Marc Campbell)
1c74d07 fix: webhook secret field on workflows — save, preserve, and display (Marc Campbell)
90a7e14 refactor: move webhook secret from integrations to workflows (Marc Campbell)
637f13f feat: edit Linear integrations inline (workspace label, token, webhook secret) (Marc Campbell)
6b4725a feat: add webhook URL + copy button to Workflows settings section (Marc Campbell)
a6af150 feat: Workflows section in settings with Linear webhook URL (Marc Campbell)
6b1c4a8 Merge pull request #6 from elasticclaw/feat/linear-integration (Marc Campbell)
4ceeefd feat: elasticclaw hub upgrade command (Marc Campbell)
a3be319 Merge pull request #9 from elasticclaw/fix/user-messages-lost-on-refresh (Marc Campbell)
ab8d7f6 fix: compute unread count outside setMessages updater (Marc Campbell)
0af8596 fix: preserve in-flight optimistic messages when loadMessages races with send (Marc Campbell)
9e22d19 Merge pull request #10 from elasticclaw/feat/upgrade-command (Marc Campbell)
6584953 Fix race condition between send and loadMessages causing duplicate messages (Cursor Agent)
e022977 Fix impure state updater and message ordering bugs (Cursor Agent)
2e5485a Fix message loading bugs: use ID-based merge instead of count-based replacement (Cursor Agent)
b337e4f Fix code quality issues in upgrade command (Cursor Agent)
083c718 feat: elasticclaw upgrade command (Marc Campbell)
6c84248 fix: settings page use h-screen not min-h-screen so overflow-y-auto works (Marc Campbell)
09ec450 fix: show version in settings header (was hidden if sidebar cut off) (Marc Campbell)
34411c8 fix: pin color picker dot to right edge of sidebar card (Marc Campbell)
772f299 fix: settings page content area now scrolls vertically (Marc Campbell)
dfb2b7d feat: show hub version on settings page (Marc Campbell)
75fa56a fix: load messages for all claws on board mount (Marc Campbell)
47861be fix: always fetch messages on loadMessages, remove once-only guard (Marc Campbell)
77b949c fix: bump unread count when loadMessages recovers missed messages (Marc Campbell)
7280d6c fix: user messages lost on refresh (Marc Campbell)
1281818 Merge pull request #8 from elasticclaw/feat/install-ux (Marc Campbell)
5656290 Fix: Track partial clone failures in subshell to ensure warning is displayed (Cursor Agent)
7cb7de3 Fix redundant flag read and subshell set -e inheritance (Cursor Agent)
5cfbf45 fix: replace weak randomPassword() with cryptographically secure randomHex32() (Cursor Agent)
b665e76 fix: replace { } group command with ( ) subshell for repo clone (Marc Campbell)
d815704 feat: install UX improvements (Marc Campbell)
e876e15 Merge pull request #7 from elasticclaw/fix/bootstrap-heredoc (Marc Campbell)
bffc8ef Fix printf format string bug in GitHub credential helper (Cursor Agent)
8b675d3 Fix remaining heredocs in stdin-piped bootstrap script (Cursor Agent)
1764538 Fix data race in SSH bootstrap by using mutex-protected writer (Cursor Agent)
2bc14f0 fix: suppress SC2016 in shellcheck (intentional single-quoted $() for remote expansion) (Marc Campbell)
ca46a94 fix: bootstrap - pipe script to /bin/bash stdin instead of CombinedOutput(script) (Marc Campbell)
e365582 Fix double-escaped newline in GH_TOKEN export that corrupts GitHub authentication token (Cursor Agent)
10b14e4 Fix WebSocket defer overwriting completed/deleted claw status (Cursor Agent)
255b187 fix: replace heredoc with printf in bootstrap credential helper (bash -c stdin conflict) (Marc Campbell)
b432fc5 Fix workflow NamePattern data loss, shared pointer mutation, and GraphQL injection (Cursor Agent)
22a1b63 fix: correct Linear webhook payload structure and status comparison (Cursor Agent)
016e85f docs: rewrite README — description + link to elasticclaw.ai/docs (Marc Campbell)
9030fc9 fix: move homebrew update into release.yaml as a dependent job (Marc Campbell)
5a47092 fix: wait for release binaries before computing sha256 in homebrew tap update (Marc Campbell)
3e1420a ci: remove release-web workflow — web UI is now embedded in the Go binary (Marc Campbell)
7d8795a feat: workspace list shows hub-stored workspaces + push completes the workflow (Marc Campbell)
dbc83d8 feat: Integrations + Workflows settings UI, full settings API (Marc Campbell)
cd7497e Fix workspace file encoding and name validation bugs (Cursor Agent)
328cc7b feat: done signal, Linear issue move, workflow lookup (Marc Campbell)
eca2031 feat: Linear integration foundation (Marc Campbell)
e64622f Merge pull request #4 from elasticclaw/feat/settings-page (Marc Campbell)
f7a6368 Fix misleading deep copy comment in patchSettings (Cursor Agent)
134c97a Fix GitHub App settings bugs: validate numeric appId input and preserve URL field on removal (Cursor Agent)
6d323ab Fix provider status check and LLM key exposure (Cursor Agent)
668079b merge: resolve release.yaml conflict (keep npm cache config) (Marc Campbell)
a97980d Fix invalid YAML syntax in release workflow (Cursor Agent)
01c1fd5 fix: resolve bugbot issues in feat/settings-page (Marc Campbell)
fc929f7 ci: build web UI and embed in release binaries (-tags embedweb) (Marc Campbell)
5836c42 Merge pull request #5 from elasticclaw/feat/workspace-registry (Marc Campbell)
023eda2 Fix race conditions in hub config access (Cursor Agent)
e7a757c Fix HTTP response body leak, missing workspace files, and partial download cache poisoning (Cursor Agent)
d549324 Fix data race bugs in s.hubCfg access (Cursor Agent)
f5e0729 fix: remove stray 'cache: true' under run step in release workflow (YAML parse error) (Marc Campbell)
703ee98 Fix data race and persistence bugs in settings API (Cursor Agent)
1beec00 feat: workspace registry + --workspace defaults to 'base' (Marc Campbell)
827025f ci: build web UI and embed in release binaries (-tags embedweb) (Marc Campbell)
11df491 fix: missing closing brace in SSH key map (parse error) (Marc Campbell)
9039be7 docs: add CONTRIBUTING.md with full dev environment setup (Marc Campbell)
4f7986a fix: show SSH key type + comment in Replicated settings (not raw truncated key) (Marc Campbell)
d2beeb8 feat: add Remove button to existing GitHub App entries (Marc Campbell)
eb5e868 fix: remove OpenAI from LLM keys (not supported yet) (Marc Campbell)
f7747af fix: move SSH key management to Replicated section in Runtimes (not Security) (Marc Campbell)
f9f55e0 feat: SSH public key management in Settings > Security (Marc Campbell)
e3c0f11 feat: Security settings section for password change + warn on default 'admin' password at hub startup (Marc Campbell)
0443846 local (Marc Campbell)
b3f6fd0 fix: ⚙️ settings button on same row as sign out, right-aligned (Marc Campbell)
77f21c5 feat: remove --anthropic-key from install (configure via /settings page instead) (Marc Campbell)
20a3be0 feat: /settings page with Sandbox Runtimes, LLM Keys, GitHub Apps (Marc Campbell)
760e9ba Merge pull request #3 from elasticclaw/feat/elasticclaw-workspace (Marc Campbell)
9056b56 Merge pull request #2 from elasticclaw/feat/embedded-web (Marc Campbell)
6f7df16 feat: update elasticclaw workspace with full knowledge (single binary arch, new auth, install command) (Marc Campbell)
578401e Fix cached empty token breaking API calls after login (Cursor Agent)
8e9f53d fix: remove stale localhost:3000 assertion from container test (Caddyfile simplified) (Marc Campbell)
89abf58 fix: resolve all 4 bugbot issues (Marc Campbell)
f6ffa6b fix: update tests for ui_password rename and removed version verify step (Marc Campbell)
ac685db fix: use bash -c with shell-escaped script (Marc Campbell)
b3f8f7c fix: request PTY and use Shell() to work with restricted SSH shells (Marc Campbell)
fd53f74 fix: use /bin/bash explicit path (Marc Campbell)
68a88ba fix: pipe script to bash stdin instead of passing as command string (handles multi-line + restricted shells) (Marc Campbell)
761b8f5 fix: include error in failed step message (Marc Campbell)
c59e20b fix: add set -ex to install script for visible debugging, remove verify step (Marc Campbell)
38aa1b8 fix: remove leftover Docker preflight check (no Docker needed anymore) (Marc Campbell)
b6fdb08 fix: try all standard SSH keys (id_ed25519, id_rsa, id_ecdsa, sk variants), not just first found (Marc Campbell)
10aca97 fix: silence usage and errors on cobra (no more wall of help text on errors) (Marc Campbell)
868c343 fix: verbose SSH key loading, hard fail on read/parse errors (Marc Campbell)
4324e3b fix: call agent.Signers() eagerly instead of lazy PublicKeysCallback (Marc Campbell)
20953db fix: handle passphrase-protected SSH keys, error clearly when no auth methods available (Marc Campbell)
d6d8128 fix: rename --host to --server, accept ssh:// URI format (Marc Campbell)
c0fe486 feat: elasticclaw hub caddy install/uninstall (Marc Campbell)
a78be43 feat: standard Linux paths for service mode (Marc Campbell)
07d61ad feat: elasticclaw hub service install/uninstall/status (Marc Campbell)
762db79 feat: simplify elasticclaw install — no Docker, single binary serves web UI (Marc Campbell)
362d55c fix: serve static files with fs.ReadFile to bypass http.FileServer 301 redirects (Marc Campbell)
4ed5a3c fix: proper SPA file serving — serve index.html directly, fallback to root for unknown paths (Marc Campbell)
693c0d3 fix: serve static files openly, no server-side auth gate on HTML (Marc Campbell)
42ef63f fix: no committed files in internal/webui/out/ (Marc Campbell)
8ac38e9 fix: use 'all:out' in go:embed to include _next directory (underscore dirs excluded by default) (Marc Campbell)
485e64d debug: log embedded webui file list on startup (Marc Campbell)
cf2b8cf fix: serve index.html for directory requests (Next.js static export SPA routing) (Marc Campbell)
7c8ddfc fix: use README.md as sentinel in internal/webui/out/ (no more placeholder.txt tracked file) (Marc Campbell)
f9f0001 fix: register MIME types for embedded static files (JS/CSS served as text/plain on some hosts) (Marc Campbell)
e75fe41 fix: RefObject<HTMLDivElement | null> for React 19 compat (Marc Campbell)
98d5838 fix: convert Date timestamp to ISO string for API before param (Marc Campbell)
5faa731 fix: refreshClaws returns Promise<void> (Marc Campbell)
8744c69 local (Marc Campbell)
1addf87 fix: add name to patchClaw type (Marc Campbell)
6ef24e1 fix: add nodejs_22 to nix flake so npm is a real binary (not NVM shell function) (Marc Campbell)
cb1d56e fix: auto-provision tenant from hub.yaml token/claw_token, no CLI flags required (Marc Campbell)
cc3f62c fix: logout clears ec_hub_token from sessionStorage (Marc Campbell)
ed8f675 simplify: one token (hub API token) for everything, no session indirection (Marc Campbell)
8d4c0b3 feat: proper session tokens for web UI auth (Marc Campbell)
526e9a7 fix: remove Next.js middleware (auth is now client-side via sessionStorage, not httpOnly cookie) (Marc Campbell)
325a48d fix: remove ngrok-skip-browser-warning header causing CORS preflight failure (Marc Campbell)
5f29f0a fix: add PATCH method and extra headers to CORS (Marc Campbell)
645f917 rename: ui_token → ui_password in hub.yaml and --ui-token → --ui-password flag (Marc Campbell)
7dbd9ea feat: --ui-token flag on hub command, overrides hub.yaml ui_token (Marc Campbell)
bd9d25d fix: browser calls hub directly via NEXT_PUBLIC_HUB_URL, no Next.js proxy needed (Marc Campbell)
0fe3d49 fix: only use trailingSlash in prod static export, not in dev (caused 308 redirect loop) (Marc Campbell)
6c43009 fix: remove old Next.js auth/hub-config routes that were intercepting dev rewrites (Marc Campbell)
2e5b0d4 local (Marc Campbell)
4052267 feat: embedded web UI foundation (Phase 1+2) (Marc Campbell)
fb87f9b fix: WS uses browser origin (goes via Caddy) not internal hub URL (Marc Campbell)
0e8794e fix: WS connects directly to hub URL (not via Next.js proxy rewrite) (Marc Campbell)
e09327d ci: move all workflows to .depot/workflows/ — remove .github/workflows/ (Marc Campbell)
759da4d fix: add /hub/* route to Caddyfile pointing to hub (fixes WS proxy in standalone mode) (Marc Campbell)
3cd60e1 Merge pull request #1 from elasticclaw/feat/install-command (Marc Campbell)
84465cb fix: update test assertions after HOME→$HOME path change (Marc Campbell)
dcbc9b7 fix: e2e install test on real Replicated Ubuntu VM — all fixes: - sudo for mv/systemctl/docker (non-root user) - Environment=HOME=/root in systemd unit (HOME not set in service context) - elasticclaw version cmd (not --version flag) - --web-image override flag - Docker daemon start in preflight - WebImageTag falls back to :latest for dev/empty version (Marc Campbell)
c56170e feat: --skip-caddy flag skips DNS check and Caddy install (Marc Campbell)
ab5c5ac feat: --anthropic-key flag on install, prompts if not set, injects llm_keys into hub.yaml (Marc Campbell)
fc30fe7 chore: go mod tidy after adding testcontainers-go (Marc Campbell)
5d68513 Merge branch 'main' into feat/install-command (Marc Campbell)
d402419 fix: add make test-install target with -tags integration flag (Marc Campbell)
69bc6fa fix: shellcheck SC2097/SC2098 — export ANTHROPIC_API_KEY before openclaw onboard (Marc Campbell)
455d9ef fix: shellcheck SC2097/SC2098 — export ANTHROPIC_API_KEY before openclaw onboard (Marc Campbell)
70fad51 fix: heredoc delimiter casing CADDYEOF (was CaddyEOF) — shellcheck fail (Marc Campbell)
52a68cd feat: container integration test for install scripts + shellcheck in flake (Marc Campbell)
efc8296 feat: elasticclaw install command with script tests (Marc Campbell)
8a1ae10 feat: elasticclaw install command (Marc Campbell)
91fdeec fix: use PathValue for claw ID, remove trailing slash handler (Marc Campbell)
8b643c1 fix: use Go 1.22 path patterns to eliminate ServeMux trailing-slash redirects (Marc Campbell)
9f68251 fix: move ngrok header to apiFetch (rewrites don't support headers field) (Marc Campbell)
b6ea961 fix: avoid Go ServeMux trailing-slash redirect on /api/claws by handling both paths (Marc Campbell)
e22d902 fix: add ngrok-skip-browser-warning header to hub proxy rewrite (Marc Campbell)
943fb8c perf: window 50 messages max, memo MessageBubble to prevent re-renders (Marc Campbell)
7d6cf61 feat: windowed message list with infinite scroll upward (Marc Campbell)
860f519 feat: message queue in claw-bridge with 10min TTL (Marc Campbell)
3ed2dc8 fix: persist streaming chunks to DB so refreshing mid-stream doesn't lose the message (Marc Campbell)
dbaf844 fix: scope gitignore claw-bridge entries to root only (Marc Campbell)
232d2a6 fix: increase agent turn timeout from 2min to 30min (long coding tasks) (Marc Campbell)
02f9514 fix: hide scrollbars on chat and sidebar (scrollbar-hide utility) (Marc Campbell)
b629243 fix: pause auto-scroll when user scrolls up, resume on scroll to bottom or send (Marc Campbell)
91b3cd9 fix: remove 40vh blank spacer at bottom of chat panel (Marc Campbell)
0658cd6 fix: reset textarea to single line after message send (Marc Campbell)
a62f3ba fix: card chat input also expands vertically (same auto-resize as full panel) (Marc Campbell)
a4d44f2 feat: auto-send wake message when claw comes online — triggers intro response (Marc Campbell)
a9b942c fix: textarea auto-expands vertically via JS, switches to scroll only at 200px (Marc Campbell)
caa5c23 fix: chat textarea expands vertically, no horizontal scroll (Marc Campbell)
6efdefe fix: conversation view tags were using Object.entries on string[] (index as key) (Marc Campbell)
f98d1aa fix: render color picker via React portal at document.body to escape all stacking contexts (Marc Campbell)
f0fa021 fix: color picker uses fixed positioning to escape sidebar overflow clipping (Marc Campbell)
5763eb3 feat: color picker on claw card — 16-dot palette, instant update (Marc Campbell)
deaab27 feat: claw rename — inline edit from card, stable ec-<id> provider names (Marc Campbell)
3cef8b6 fix: revert tags back to flat strings (no k=v enforcement) (Marc Campbell)
d739876 feat: edit/add/delete tags inline from claw card UI (Marc Campbell)
fefe72a feat: claw color — 16 named accent colors, auto-assigned from name or set in config (Marc Campbell)
70d7dd6 feat: tags as k=v pairs (workspace=name, env=prod, nix=true) (Marc Campbell)
1848f30 feat: claw tags — auto (workspace:<name>), config yaml, --tag flag, UI filter (Marc Campbell)
da399f7 fix: use w-[70%] instead of max-w to hard-cap bubble width (Marc Campbell)
60e3bcb fix: w-full on message row so max-w-[70%] has a parent to be relative to; pre overflow-x-auto (Marc Campbell)
38f8a13 fix: wrap code blocks instead of overflowing bubble (Marc Campbell)
caac6c0 fix: constrain message bubble width to prevent code blocks overflowing (Marc Campbell)
adf739b update user (Marc Campbell)
b505095 update tools (Marc Campbell)
1cd3efa fix: start nix daemon manually when systemd unavailable (no-init mode) (Marc Campbell)
b644f73 debug: print workspace config file contents at create time (Marc Campbell)
432f9bb ci: run tests on PR only, not on push to main (Marc Campbell)
86281f3 fix: print nix/github config at create time so bad YAML is caught before hitting hub (Marc Campbell)
db9d900 test: bootstrap test suite (Phase 1+2+3) (Marc Campbell)
1a446de fix: add debug logging for nix flag through create→bootstrap path (Marc Campbell)
5c21674 add nix (Marc Campbell)
9b80531 fix: correct Sprintf arg order for Nix block in bootstrap script (Marc Campbell)
d8f2c10 feat: elasticclaw profile command (ls/create/use/rm/rename/show) (Marc Campbell)
21bf8cf feat: nix: true in workspace config installs Determinate Systems Nix during bootstrap (Marc Campbell)
e9af07b fix: suppress noisy heartbeat logs — only log on status change or 80%+ context (Marc Campbell)
00a6ba2 feat: flesh out elasticclaw dev workspace with full architecture knowledge (Marc Campbell)
351274b adding elasticclaw workspace to use (Marc Campbell)
4707649 chore: verify push access via agent (Elasticclaw Agent)
97dd715 fix: github token endpoint uses hub claw_token auth (no tenant table in single-tenant mode) (Marc Campbell)
b3c126c fix: move credential helper install AFTER bridge starts (Marc Campbell)
0cf6436 fix: wait 10s for bridge to connect during bootstrap, log full crash output (Marc Campbell)
adb1c68 fix: standardize env vars to ELASTICCLAW_HUB_URL/TOKEN, add /api/debug endpoint, improve error message (Marc Campbell)
27183d5 fix: default UI token to 'admin' when ELASTICCLAW_UI_TOKEN not set (warns in dev) (Marc Campbell)
3205a80 docs: add .env.example and fix web README with correct env vars (Marc Campbell)
1387734 fix: remove trailing comma in package.json (Marc Campbell)
75f1a61 fix: move Linux-only native deps to optionalDependencies so npm install works on macOS (Marc Campbell)
96bbc59 chore: remove platform-specific lockfiles from web/ (Marc Campbell)
4c9856a chore: add Apache 2.0 license (Marc Campbell)
51bc05b fix: add web/ as real files (not submodule) (Marc Campbell)
7714225 feat: move elasticclaw-web into web/ directory (Marc Campbell)
0872f3a revert: remove SaaS admin provision endpoint and master_token config (Marc Campbell)
7bd7812 feat: --master-token flag + HUB_MASTER_TOKEN/ANTHROPIC_API_KEY env support + make run-saas (Marc Campbell)
e8861d0 feat: add /api/admin/provision endpoint for SaaS multi-tenant setup (Marc Campbell)
eac60a9 fix: resolve short claw ID prefix on server-side kill (Marc Campbell)
1999c2d fix: resolve claw by name, full ID, or short ID prefix (Marc Campbell)
4913f3f ci: move release and update-homebrew workflows to .github/workflows for GitHub Actions trigger on tag push (Marc Campbell)
c4412a6 fix: ELASTICCLAW_HUB_URL optional when relay configured; fatal on neither set (Marc Campbell)
ba4e999 fix: ping both relay and local hub connection every 20s (not just relay) (Marc Campbell)
bc16edc feat: relay is explicit opt-in, not default; remove DisableRelay field (Marc Campbell)
1b2fbea fix: inject relay env vars into Daytona bridge start command (Marc Campbell)
7fed6b5 fix: ping relay every 30s to prevent idle connection timeouts (Marc Campbell)
b95cbe5 fix: startup banner shows relay info instead of empty URL/Public URL fields (Marc Campbell)
8840a40 fix: wait for bridge to connect before running credential helper + clone (Marc Campbell)
85282db feat: bridge local HTTP proxy on :18790 routes hub API calls over WS relay (Marc Campbell)
53ee384 feat: replace relay_url: none magic string with disable_relay: true bool (Marc Campbell)
f4fa4fc feat: default relay to wss://relay.elasticclaw.ai, set relay_url: none to disable (Marc Campbell)
98b3cce fix: raise claw-bridge WS read limit to 32MB (was 32KB default, broke on large LLM responses) (Marc Campbell)
c834c7a feat: add GitHub credential helper + gh CLI auth to Daytona bootstrap (Marc Campbell)
c7934f7 fix: preserve 'starting' DB status in REST list (was incorrectly mapped to offline) (Marc Campbell)
57c0f53 fix: send provisioning/starting DB claws to UI on WS connect, not just bridge-connected ones (Marc Campbell)
6e33f39 fix: replace flaky poll loop with simple 90s sleep for npm install (Marc Campbell)
c09cb33 feat: write workspace files (SOUL.md, AGENTS.md, etc.) to Daytona workspace after bootstrap (Marc Campbell)
6997495 fix: poll for openclaw binary existence instead of PID (PID file race caused false 'done') (Marc Campbell)
a086ae5 fix: install openclaw into nvm prefix dir (not system npm global) + doctor --fix after config patch (Marc Campbell)
b94d39e fix: uninstall openclaw before reinstalling to ensure nvm symlink updates (Marc Campbell)
765a413 fix: use correct openclaw model config schema (baseUrl not enabled, matches Replicated bootstrap) (Marc Campbell)
388546a fix: add NVM_DIR to PATH in all Daytona openclaw exec calls (Marc Campbell)
deff3c1 fix: use sudo + absolute npm path instead of chown (chown -R too slow, hits 408) (Marc Campbell)
47d82c5 fix: split chown and npm start into separate fast steps to avoid 408 (Marc Campbell)
37d5469 fix: pass ELASTICCLAW_CLAW_NAME to Daytona bridge so claw keeps its name (Marc Campbell)
69ce5e9 fix: compile error in poll string concat (Marc Campbell)
53aa5b3 fix: inject LLM API keys into OpenClaw config during Daytona bootstrap (Marc Campbell)
339533a fix: run openclaw install in background, poll for completion (Marc Campbell)
16ae499 fix: extend HTTP context timeout for long Daytona exec commands (Marc Campbell)
e56766f fix: log gateway_ready bool value not pointer address (Marc Campbell)
c7fcd7a fix: chown nvm lib dir before openclaw upgrade (root-owned in snapshot) (Marc Campbell)
2b27b02 fix: Daytona bootstrap - use token auth, setsid for gateway/bridge, nvm PATH (Marc Campbell)
2318673 fix: source nvm.sh to get correct npm PATH for openclaw install (Marc Campbell)
38e7c18 fix: use full npm path with sudo (nvm npm not in sudo PATH) (Marc Campbell)
2851c44 fix: use sudo npm install to upgrade openclaw (permission fix) (Marc Campbell)
b5a508d fix: force npm reinstall openclaw to upgrade from snapshot version (Marc Campbell)
3fbe9d2 fix: set HOME=/home/daytona in all bootstrap exec commands (Marc Campbell)
0eb6f67 fix: Daytona bootstrap now starts OpenClaw gateway before bridge (Marc Campbell)
650efca fix: bridgeDownloadURL is deterministic — no fallbacks or guessing (Marc Campbell)
005b4a9 fix: Daytona bridge install is now synchronous + dev version fallback (Marc Campbell)
d782473 fix: Daytona bootstrap step timeouts via WithExecuteTimeout SDK option (Marc Campbell)
db5028f fix: Daytona uses only snapshot/default_snapshot, no instance_type fallback (Marc Campbell)
c88176f fix: rename default_instance_type → default_snapshot for Daytona (Marc Campbell)
582684d feat: Daytona snapshot size via instance_type (Marc Campbell)
ee8a1be feat: Vercel Sandbox + Daytona bootstrap providers (Marc Campbell)
4f07c06 feat: relay integration for NAT traversal (Marc Campbell)
d037f1e feat: elasticclaw hub init — non-interactive hub config generator (Marc Campbell)
f5c215e fix: gh auth for non-interactive shells (agents) (Marc Campbell)
f88500a feat: Linear workspace token injection (Marc Campbell)
cccd28c fix: add ngrok-skip-browser-warning header to hub WS dial (Marc Campbell)
5353ea1 feat: cleaner connect/disconnect/ready log lines for bridge (Marc Campbell)
cb7edc0 feat: add optional url field to GitHubAppConfig for logging (Marc Campbell)
36d9288 fix: stale DB status shown after hub restart (Marc Campbell)
bd750a7 fix: handle both old (capitalized) and new (lowercase) github_repos JSON (Marc Campbell)
a3a5638 fix: send current claw statuses to user WS on connect (Marc Campbell)
ca3f39c fix: add json tags to GitHubRepoAccess and GitHubWorkspaceConfig (Marc Campbell)
df8bae4 ci: auto-update homebrew tap on release (Marc Campbell)
ddf6d41 feat: clone GitHub repos into workspace during bootstrap (Marc Campbell)
0b18b42 feat: inject GitHub access info into workspace TOOLS.md on bootstrap (Marc Campbell)
95965c3 revert: restore pull_requests + metadata permissions in token request (Marc Campbell)
8c75be6 fix: only request contents permission in GitHub token — avoid 422 (Marc Campbell)
081d059 fix: don't pre-auth gh during bootstrap — claw not registered yet (Marc Campbell)
578eeb4 fix: install git alongside nodejs in bootstrap; guard credential helper git/gh calls (Marc Campbell)
804d9af docs: add CONTRIBUTING.md with local dev workflow (Marc Campbell)
685fbc6 fix: rename github_apps yaml key back to 'github' (Marc Campbell)
681fdc3 feat: per-repo read/write permissions in GitHub token requests (Marc Campbell)
6d50c77 fix: github_apps is a list not a map (Marc Campbell)
67a66e9 feat: support multiple GitHub Apps via github_apps map (Marc Campbell)
74b48fd fix: simplify GitHub App config — no installation_id required (Marc Campbell)
0aed7e6 feat: GitHub App integration for per-claw git credentials (Marc Campbell)
d636c14 fix: trim trailing slash from hub base URL in client (Marc Campbell)
bad2d6e fix: add ssh_host/port/user to CREATE TABLE schema (Marc Campbell)
4e73608 debug: log actual db error in handleClaws (Marc Campbell)
712e5a6 feat: add SSH terminal proxy and store SSH info for claws (Marc Campbell)
ae58c87 fix: start readLoop before initSession (Marc Campbell)
9af17e8 debug: add /api/debug/claws endpoint + verbose heartbeat logging (Marc Campbell)
d51d491 fix: use *bool for gateway_ready — nil means old bridge, treat as ready (Marc Campbell)
404507c fix: initialize clawConn.gatewayReady from register payload (Marc Campbell)
95d86dd fix: add CORS middleware to hub so browser can connect directly (Marc Campbell)
40b4edb feat: bridge registers as 'starting' until gateway session is ready (Marc Campbell)
814ea5e feat: persistent gateway session in claw-bridge + surface context_usage in hub API (Marc Campbell)
7efc721 fix(bootstrap): OCI bridge_image override uses oras, HTTP(S) uses curl (Rooty)
8504d5c feat: build claw-bridge in release workflow; download from GitHub Releases (Rooty)
68abc72 ci: release workflow — builds on semver tag, marks prerelease if hyphen suffix (Rooty)
fa97a20 fix(chat): synchronously erase spinner on first chunk; drop sent confirmation (Rooty)
514a7d6 fix(chat): stop spinner on first chunk to prevent line stomping (Marc Campbell)
5caf9ea tidy (Marc Campbell)
5905760 tidy (Marc Campbell)
16c7d24 feat(streaming): native OpenClaw gateway WS protocol in claw-bridge (Marc Campbell)
d38d3dd feat: spinner animation while waiting for claw reply (Marc Campbell)
3690957 feat: streaming chat — chunks forwarded hub→CLI as they arrive from openclaw (Marc Campbell)
faa8cc9 feat: WebSocket-based chat — reply prints immediately when ready, no polling (Marc Campbell)
2631ae9 fix: delete messages before claw to satisfy FK constraint (Marc Campbell)
cca3700 fix: poll up to 90s for reply instead of single 2s check (Marc Campbell)
0a11f65 fix: log actual db error on kill, not generic 'db error' (Marc Campbell)
c1600e5 feat: rich error logging in claw-bridge — startup checks, directional logs, errors sent to user (Marc Campbell)
122b061 fix: use independent context for agent call, not WebSocket read context (Marc Campbell)
e8ce8b3 debug: log all received messages in claw-bridge (Marc Campbell)
a0bde7c fix: remove destroy subcommand from instance.go (Marc Campbell)
31e8bd8 fix: add --session-id main to openclaw agent call in claw-bridge (Marc Campbell)
8a18109 chore: remove destroy command, use kill (Marc Campbell)
af67281 feat: kill/destroy terminates the Replicated VM, not just disconnects (Marc Campbell)
6c2ec11 fix: export LLM API keys at top of bootstrap so they're available during openclaw config (Marc Campbell)
124eb82 fix: use openclaw agent --local --message instead of nonexistent HTTP endpoint (Marc Campbell)
1f8f95e fix: working OpenClaw bootstrap — nodesource Node24, sudo npm, gpg --batch, gateway run (Marc Campbell)
b9972d5 fix: use --no-onboard flag to skip interactive setup during install (Marc Campbell)
4ec9993 fix: write openclaw.json directly (no TTY), start gateway with nohup instead of systemd (Marc Campbell)
e74302a fix: only log VM status when it changes, not every poll cycle (Marc Campbell)
36b08ef feat: install Node + OpenClaw in bootstrap, write workspace workspace files via SSH (Marc Campbell)
025e2cf feat: keep polling connected claws to detect VM termination (Marc Campbell)
c8e8b8a fix: login writes config.yaml (CLI), server reads hub.yaml — clean separation (Marc Campbell)
7f0ce24 fix: login preserves existing hub.yaml, only updates url and token (Marc Campbell)
e9d1414 fix: viper reads hub.yaml not config.yaml (Marc Campbell)
73a0036 debug: log URL/PublicURL/ClawToken at hub startup to verify config parsing (Marc Campbell)
77f693e fix: use export instead of nohup env, logs HUB_URL at start for verification (Marc Campbell)
4f5be56 fix: add public_url to hub config for claw-to-hub connections from remote VMs (Marc Campbell)
df1cd85 fix: log to ~/claw-bridge.log, verify bridge is alive after start (Marc Campbell)
5c23158 fix: find oras-pulled binary with find, remove double :22 in SSH addr (Marc Campbell)
4044cbf fix: derive SSH username from public key comment (elasticclaw@hub -> elasticclaw) (Marc Campbell)
95c0c38 fix: use ubuntu as SSH user for Ubuntu VMs, not root (Marc Campbell)
e2c9557 fix: init replicated provider in bootstrapReplicated to call GetVM (Marc Campbell)
f27a49a fix: use direct SSH endpoint (IP:port, user=root) instead of replicatedvm.com (Marc Campbell)
42b524e debug: log full raw JSON from GetVM to find SSH endpoint fields (Marc Campbell)
42e1d71 debug: log SSH connection details and public key fingerprint (Marc Campbell)
0cfada6 fix: retry SSH bootstrap 5x with 10s delay, VM SSH may not be ready at running state (Marc Campbell)
0143113 fix: log raw GetVM response when status is empty, try wrapped response formats (Marc Campbell)
e0c507e fix: remove blocking WaitForVM, log VM status on every poll cycle (Marc Campbell)
bf5a8ea refactor: default_model at top level, llm_keys flat map instead of nested structs (Marc Campbell)
2b8c1a1 feat: hub default model + workspace override, injected as OPENCLAW_DEFAULT_MODEL (Marc Campbell)
16b3f4d feat: model API keys in hub.yaml, injected into claw-bridge env at bootstrap (Marc Campbell)
f1035bc fix: log provisioning start so we can see the goroutine fired (Marc Campbell)
5bb9dbd fix: use ALTER TABLE without IF NOT EXISTS for SQLite compatibility (Marc Campbell)
3a88ba2 chore: remove push-bridge target, run oras manually (Marc Campbell)
c5136c3 feat: OCI bridge distribution + SSH bootstrap on VM ready (Marc Campbell)
1545f00 feat: claw-bridge binary + 3s poll interval (Marc Campbell)
7a6bf08 feat: background poller syncs Replicated VM status every 30s (Marc Campbell)
c148524 feat: log VM details after successful Replicated provision (Marc Campbell)
4e62c64 fix: add elasticclaw@hub comment to generated SSH public key (Marc Campbell)
6158c20 fix: base64-encode full authorized_keys line for Replicated API (Marc Campbell)
fdce93f fix: send only base64 key blob to Replicated API, not full authorized_keys format (Marc Campbell)
134ec3a fix: trim newlines from SSH public keys before sending to Replicated API (Marc Campbell)
85ffa48 fix: everything reads/writes hub.yaml — one file for all hub config (Marc Campbell)
f0680d6 revert: remove config.yaml fallback from hub config loader (Marc Campbell)
a51bcc9 fix: hub also reads config.yaml for provider config, not just hub.yaml (Marc Campbell)
139a335 feat: show configured providers on hub startup (Marc Campbell)
eaa6a16 fix: hoist dir variable out of if block so NewServer can use it (Marc Campbell)
253f6b4 fix: remove duplicate HubConfig, unify URL/Token field names (Marc Campbell)
fa6d4ff fix: decouple tidy from build — run make tidy + commit go.sum separately (Marc Campbell)
d27ba09 fix: run go mod tidy before build to keep go.sum up to date (Marc Campbell)
d29452a feat: elasticclaw workspace create <name> — scaffolds .elasticclaw/workspaces/<name>/ (Marc Campbell)
73bdd77 feat: optional ssh_public_keys in hub.yaml for debug VM access (Marc Campbell)
73c60df feat: hub generates own SSH keypair on startup, auto-injects into Replicated VMs (Marc Campbell)
e350e82 chore: remove catalogs concept — unused (Marc Campbell)
fb31cc3 feat: Replicated CMX VM provider + instance-type/ttl overrides on create (Marc Campbell)
033452f feat: hub provisioning via workspaces, hub.yaml config, create cmd sends workspace to hub (Marc Campbell)
3041148 fix: replace go-sqlite3 (CGO) with modernc.org/sqlite (pure Go) for fast builds (Marc Campbell)
37e6d9c adding flake lock (Marc Campbell)
e3b4474 chore: ignore .direnv (commit flake.lock instead) (Marc Campbell)
4afe404 fix: add git to nix devshell so VCS stamping works in make build (Marc Campbell)
ae1353b fix: build output to bin/elasticclaw, add bin/ to gitignore (Marc Campbell)
247eb5e fix: add -buildvcs=false to suppress VCS stamping error (Marc Campbell)
b63c45b chore: update to go 1.26 (released) (Marc Campbell)
6bbaaf0 chore: add nix flake, .envrc, bump go to 1.24 (update to 1.26 when nixpkgs ships it) (Marc Campbell)
e96dbc6 feat: hub server + login command + hub-aware list/chat/kill (Marc Campbell)
212965a Update chat command to use openclaw agent --local with proper env sourcing (Marc Campbell)
b945e53 Fix Daytona exec to wrap commands in bash -c, add OpenClaw config methods (Marc Campbell)
107a14a Integrate Daytona Go SDK for real sandbox provisioning (Marc Campbell)
89b061a Add local provider for testing, instance subcommand aliases (Marc Campbell)
784464a Add instance commands: create, list, inspect, destroy, chat, identity (Marc Campbell)
8eb21e6 Add init, workspace, profile, and provider commands (Marc Campbell)
10292cb Add provider interface and config management (Marc Campbell)
9ff4b1e Add core types: manifest, instance, profile, provider (Marc Campbell)