Pulsing Integration¶
How Forge uses Pulsing Actor capabilities — and what remains in-process.
Capability matrix¶
| Pulsing feature | Forge usage | Maturity |
|---|---|---|
@remote + spawn |
ToolWorkerActor, inbox, MCP hub, code registry |
✅ |
resolve (gossip) |
Shared worker, inbox, hub, registry | ✅ |
ask |
Exec approval, permissions, code cell nested tools | ✅ |
tell |
Forge events, inbox → Host side effects | ✅ |
new_process |
Isolated ToolWorkerActor |
✅ |
ForgeBackend |
LOCAL / DEDICATED / SHARED | ✅ |
| Supervision policy | Manual respawn via supervisor | 🟡 |
| Queue / Topic | Not used — events in memory | ⚪ |
| Multi-node placement | Local spawn only | ⚪ |
Message flows¶
Tool execution¶
CraftAgent.call_tool("Read", ...)
→ ForgeBackend
→ ForgeWorkerSupervisor → ToolWorkerActor (child process)
→ ToolResult
Events (streaming)¶
Worker / Host runtime
→ tell_forge_event(inbox)
→ ForgeEventInbox.on_forge_event
→ tell Host.on_forge_stream_event / on_forge_side_effect
Approvals (blocking)¶
What stays in-process (by design)¶
| Component | Reason |
|---|---|
HybridForgeRuntime |
PyO3 callbacks, Session state, MCP in Rust |
ForgeWorkerSupervisor |
Cannot spawn child from actor mailbox |
REPL LocalToolRuntime |
Debug path without cluster |
| Extension handlers | Local I/O, no cross-node need |
This is intentional layering: Actor for deployment boundaries, not for every function call.
Developer-facing surface¶
Most integrators should use:
from pulsing.forge import ForgeEnvironment # library / tests
from pulsing.forge import ForgeBackend, ... # Craft-style host
Only advanced hosts need tell_forge_event, ensure_forge_actors, or custom gossip names.
Constraints (read before extending)¶
- No
new_processspawn inside actor mailbox handlers — use Host process or delayed patterns. - Isolated actors must pickle cleanly — defer locks / exec managers to
on_start. - Separate approval sink from event sink — inbox receives tells; Host receives asks.
Next steps (P1+)¶
- Forge events → Pulsing
Queuefor audit and replay - REPL remote worker mode (
resolveshared worker) - Optional multi-node worker placement
Design reference: craft-architecture