Files
openhuman/docs/plans/rlm-workflows/README.md
T

67 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RLM — Language-Based Workflows (Rhai/`.ragsh`) Integration Plan
**Goal:** expose TinyAgents' Rhai-backed REPL language (the `.ragsh` / RLM /
CodeAct surface, gated behind the `repl` cargo feature in
`vendor/tinyagents/Cargo.toml`) as a **first-class `rlm` tool** in the
OpenHuman Rust core, so the orchestrator agent can *write its own workflow
scripts* — fan-out over subagents, batched tool/model calls, loops,
conditionals — and execute them deterministically, similar to Claude Code
Workflows and Recursive Language Models (RLMs).
## Why
Today the orchestrator composes work through fixed primitives:
`spawn_subagent`, `spawn_parallel_agents`, `run_workflow` (WORKFLOW.md
bundles), and typed tinyflows graphs. None of these let the model express
*ad-hoc control flow* — "spawn N readers, dedupe their findings, verify each
survivor with 3 refuters, loop until dry". The `.ragsh` session in TinyAgents
is exactly that surface: a sandboxed, policy-bounded scripting engine whose
only host access is capability functions (`model_query`, `tool_call`,
`agent_query`, batched variants), with fail-closed limits on operations,
wall-clock time, output bytes, call counts, and recursion depth.
## Architecture summary
```
Orchestrator model turn
└─ rlm tool call { script, session_id?, timeout_secs?, limits? }
└─ src/openhuman/rlm/ (new domain)
├─ session manager (persistent ReplSession per rlm session_id)
├─ capability bridge (openhuman Tools/Subagents/Provider →
│ tinyagents CapabilityRegistry)
├─ policy mapping (autonomy tier + SecurityPolicy → ReplPolicy)
├─ progress bridge (ReplCallRecord / EventSink → AgentProgress
│ + DomainEvent bus)
└─ tinyagents::ReplSession::eval_cell (spawn_blocking)
└─ rhai engine — model_query / tool_call / agent_query /
*_batched / emit / answer (fail-closed ReplPolicy)
```
Two repos change:
1. **`vendor/tinyagents`** (submodule, separate PR against
`tinyhumansai/tinyagents`): host-embedding gaps — external cancellation
flag, live capability-call events on the `EventSink`, async-embedding
documentation. Branch: `feat/repl-host-embedding`.
2. **`openhuman`** (one gigantic PR against `tinyhumansai/openhuman`): the
`repl` feature flag, the new `src/openhuman/rlm/` domain, the `rlm` tool,
prompt/docs surfacing, and tests. Branch: `feat/rlm-language-workflows`,
including the submodule pointer bump once the tinyagents PR lands.
## Phases
| Phase | File | Deliverable |
| ----- | ---- | ----------- |
| 1 | [phase-1-research.md](phase-1-research.md) | Research findings: what tinyagents `repl` provides, what openhuman provides, the gaps |
| 2 | [phase-2-tinyagents.md](phase-2-tinyagents.md) | TinyAgents-side changes (cancellation, live events) — separate PR |
| 3 | [phase-3-rlm-domain.md](phase-3-rlm-domain.md) | `src/openhuman/rlm/` domain: sessions, capability bridge, policy |
| 4 | [phase-4-rlm-tool.md](phase-4-rlm-tool.md) | First-class `rlm` tool: schema, registration, prompt surfacing |
| 5 | [phase-5-hardening.md](phase-5-hardening.md) | Error handling, timeouts, cancellation, limits, observability |
| 6 | [phase-6-tests.md](phase-6-tests.md) | Tests (written last): unit, timeout/cancel/limit, RPC E2E |
| 7 | [phase-7-delivery.md](phase-7-delivery.md) | PR strategy: tinyagents PR + one gigantic openhuman PR |
Tests are deliberately the **final implementation phase** (per the feature
brief): phases 35 land the behavior with verbose debug logging; phase 6
back-fills unit and E2E coverage to the ≥80% changed-line gate before the PR
is opened.