SmolPaws · OpenHands group · live tracker
SmolPaws SDK-swap board
Where the SDK swap actually stands. The seven-step migration plan
mapped to the real work — beads (bd) and PRs — so this group has one glanceable to-do instead of
re-deriving it each time. Hand-maintained; refreshed when state changes.
Last updated 2026-07-13 · source of truth: beads in the smolpaws / openhands-agent repos + the message-work ADR
The swap, step by step
-
Swap in
openhands-agentfor the old SDK → nextPoint the server at
@smolpaws/openhands-agentinstead of the old@smolpaws/agent-sdk— the new SDK becomes the engine. Doing this first surfaces exactly what the server actually relies on, which then scopes step 2. Not begun; the SDK it depends on is landing (dispatcher merged, persistence in review).unblocks: scope of step 2 -
Agent-server parity (ish) ◐ in progress
Transpile the upstream
openhands-agent-serverto TS so the new SDK has a server to run on. First slices landed — event/conversation routers, event & conversation services, pubSub, sockets, OpenAPI, plus bash/git/file routers. Durability now flows through the SDK'sEventLog(server is a thin wrapper, like upstream). Still ahead: remaining routers (P2/P3) and one narrow deterministic-append extension; external queue state stays out of this package.pkg: smolpaws/packages/openhands-agent-server verified green: 227 SDK tests · server build/test/openapi ✓ -
Build durable message work around agent-server ◐ ADR proposed
The seam is chosen: one shared SQLite-backed Message Work Coordinator in the bridge runtime, outside agent-server. Adapters compute lanes and accept/deliver through it. For webhook ingress, Cloudflare Queue is an edge spool; a local HTTP-pull adapter acknowledges only after SQLite acceptance. No webhook tunnel is required.
message-work ADR + crash matrix coordinator/store implementation: not started existing BaseBridgeAdapter: transport seam, not coordinator smolpaws-e4j · -109 · -7dj · -6qo -
Swap agent-server + WhatsApp (keep the lifeline) ○ not started
Smallest end-to-end slice: migrate the legacy WhatsApp SQLite/poll monolith into a platform adapter around the coordinator, preserving individual message boundaries. Everything after this happens with the lifeline intact.
depends on: steps 2–3 -
Then Discord, GitHub, Email ○ not started
Migrate each transport onto the same coordinator seam. Discord already uses the base adapter; Slack is half-migrated; GitHub already has a CF Queue but its Worker consumer still calls the runner; email dispatches directly. GitHub/email become Worker → Queue → local pull adapters, while connected transports stay local.
smolpaws-3iy GitHub webhook dedup smolpaws-z3l whitelisted-thread listen -
Slack-via-Chrome should keep working untouched ○ verify later
The heartbeat Slack reading goes through the browser, not the agent-server, so the swap shouldn't touch it. Confirm once the new stack is live.
-
Retest / adapt / redeploy
paws(standalone Slack app) ○ not startedThe separate Slack bot app rides the agent-server via the bridge adapter. Not in active use yet, but it will be; it goes last and carefully.
smolpaws-c6q Slack ingress smolpaws-c6s Socket Mode delivery smolpaws-c6r / c6t / c6u scaffold · context · ops
Transpile PRs & sub-work
| Item | Where | Status |
|---|---|---|
LLM provider dispatcher (createClientFromProfile) | openhands-agent PR #1 · bead smolpaws-oz5 | ✓ merged / closed |
Event-log persistence (EventLog + FileStore) | openhands-agent PR #2 | ◐ open · in review |
| Agent-server TS package (routers, services, OpenAPI) | smolpaws/packages/openhands-agent-server | ◐ slices landed |
| Gemini 2.5 reasoningEffort via thinkingBudget | bead openhands-agent-07e | ○ follow-up |
PR #2 currently addressing a fresh AI-review round (lock edge cases). Nothing merged past #1 — merges are Engel's call.
Surrounding backlog (in this group, not the swap itself)
Real work tracked in beads that lives in the OpenHands group but sits outside the migration chain. Grouped, not sequenced.
| Theme | Beads |
|---|---|
| Delivery / conversation correctness much of this dissolves with step 3 |
smolpaws-e4j, -109, -7dj, -6qo, -c88, -wkh |
| WhatsApp robustness | smolpaws-39y (serial head-of-line block), -2z6 (cross-group mixup after restart), -1zk / -1zk.2 (onboarding + LaunchAgent), -wkh |
| Architecture | smolpaws-2g5 (automations vs ingress), -0de (shared scheduler/debounce), -bzo (channel plugin system) |
| Research / memory | smolpaws-owd (P0 · gbrain review), -ths (sleep-time consolidation), -x5k (gbrain MCP), -qjn (parallel tool calls) |
| Voice / UX | smolpaws-gi6, -9d3, -123 (STT), -dc8 (non-dev UX) |
| Ops / infra | smolpaws-xjw (smolpaws doctor), -43a (CI shell-injection guards), -95t (stable PATH), -ob9 (Daytona auto-wake) |
The honest read: the focused OpenHands work is the SDK-swap chain — steps 1–3. Step 3 now has a proposed ADR but no coordinator/store implementation. Several delivery bugs should be fixed by that shared module rather than patched per adapter. The unmerged burst-coalescing work under smolpaws-0de needs redesign: accepted messages stay separate durable events.