Repository navigation
Umbrella Local Agent Runtime
Issue: noetl/ai-meta#474 · Opened: 2026-10-17 · Status: ✅ CLOSED 2026-10-17: shipped through noetl CLI 5.3.1 / noetl-tools 4.2.0 / PyPI 5.3.0.
Closing summary. NoETL now runs AI agents in
--runtime localas playbooks, with no Python.framework: claudebills an API key, and NoETL runs each tool as a sub-playbook;framework: claude-coderuns headlessclaude -pon a Claude subscription. There's a local credential store withgoogle_oauth. The agent-playbooks showcase triages four real Gmail inboxes at ~2–3¢/run. Two defects surfaced by the work were fixed: a max_tokens cut-off returning empty "success" (tools 4.2.0), andrender_templatere-expanding substituted values (CLI 5.3.1). Distributedkind: agentremains out of scope.
Run AI agents with NoETL in --runtime local, written as playbooks, with no Python and no resident agent process. It's a local, scheduled alternative to always-on agents such as OpenClaw. The worked example is a daily triage across four real Gmail inboxes, read-only.
-
kind: agentexisted only in the retired Python worker (removed 2026-08-30, noetl25bef859). - The Rust server rejects
agentat registration (#256). #447 records thatagent/mcpare valid in onekindnamespace and rejected in the other. - This umbrella is local runtime only. Distributed
kind: agentwould need a callback-shaped design so a model turn doesn't hold a worker slot.
-
noetl-tools
AgentSession: a turn-by-turn Messages API loop. The host runs the agent's tools between turns: the CLI runs each as a sub-playbook. The state is plain JSON message history. -
framework: claudebills an API key, and NoETL sees and gates every tool call. -
framework: claude-coderuns the official CLI headless (claude -p) on a Claude subscription, with the API-key env stripped. -
Credentials: a local store (env var or mode-
600file),httpauthbearer/api_key/google_oauth, andnoetl credential googlefor installed-app OAuth with PKCE.
| Date | Change | Where |
|---|---|---|
| 2026-10-16 |
AgentSession + claude-code → noetl-tools 4.1.0
|
tools#112 |
| 2026-10-16 |
Tool::Agent in the local runtime → CLI 5.1.0, executor 0.11.0 |
cli#95 |
| 2026-10-16 | PyPI wrapper 5.2.0 (CLI 5.1.0) | noetl#710 |
| 2026-10-17 | Credential store, http auth aliases, noetl credential → CLI 5.2.0, executor 0.12.0 |
cli#96 |
| 2026-10-17 | Prompt caching, thinking / effort, max_tokens no longer passes as success → noetl-tools 4.2.0
|
tools#113 |
| 2026-10-17 | CLI pass-through → CLI 5.3.0, executor 0.13.0 | cli#97 |
| 2026-10-17 | PyPI wrapper 5.3.0 (CLI 5.3.0), verified via pip in a fresh venv |
noetl#711 |
| 2026-10-17 | Showcase repo + wiki (tutorial, architecture, Connect Gmail) | noetl/agent-playbooks |
| 2026-10-17 | Single-pass render_template + spool-test deflake → CLI 5.3.1, executor 0.13.1 |
cli#98, cli#99 |
-
Cost: four inboxes cost $0.35/run on Sonnet, and about 2–3¢ on Haiku with
thinking: disabled, the Primary tab only, compacted tool output (rhai) and prompt caching. Tokens went from 87,715 in / 6,148 out to 8 in + 8,158 cache-write + 2,126 cache-read / 2,667 out. - ⚠ Silent success: Haiku spent a summary turn's whole
max_tokenson athinkingblock, and the run was reported as successful with empty text. Fixed in 4.2.0: such a turn now fails and names the content block types. - ⚠ Template re-expansion:
render_templatere-expanded substituted values inHashMaporder. That's nondeterministic, and lets untrusted data read other variables. It was found by the agent end-to-end test and stopgapped withdefang_template_markers; the real fix is cli#98.
- cli#98: single-pass template rendering, released in CLI 5.3.1 / executor 0.13.1.
- cli#99: spool test deflaked (released with 5.3.1).
- Owner: publish the Google OAuth app (project
akuksin) or re-authorize weekly. In Testing, refresh tokens expire after 7 days. - PyPI wrapper 5.3.1 (CLI 5.3.1, executor 0.13.1; noetl#712), verified with a re-expansion probe: 5.3.0 leaked 30/30, 5.3.1 0/30.
- #477: second render of local
shell/httpsteps, fixed in CLI 5.3.2 (cli#100).defang_template_markersis now defence in depth only; it can be removed in a cleanup. Optional: a Secret Manager backend for the credential store.
noetl/tools wiki: AgentTool · noetl/cli wiki: kind: agent · noetl/cli wiki: Credentials · agent-playbooks wiki
- Home — overview
- Repo Map
- Releases
- Sessions Log
- Codex Handover — Muno/travel + SLM + safe deploy
- Handover #169 JWT — Auth0 JWT verify: shadow → enforce
- Catalog Model on EHDB (#427) — generalized catalog of internal resources; EHDB is the only store; P0+P1 landed
- EHDB Primary Serve Path (#257) — writer-fronted tier service; nothing is primary anywhere
- Domain-Specific SLM Platform (#139) — RFC (design); travel#63 is the reference impl
- Secrets Wallet (#61) — SECURITY (design)
- Rust Server Port (#49) — PRIMARY
- Decoupled Context + Event Chain (#115) — RFC (design), reframes #101
- Orchestrator Scaling (#101) — reframed by #115; consume side = #115 Phase 1
- Event WAL + Derivable Storage (#104) — Round 01 (locator) PR open
- WASM Plug-in Compilation (#105) — system-pool plug-in hot-reload (ADR Phase 4)
- System Pool Design (#46) — PRIMARY
- Regression Baseline Migration (#98) — e2e
- Subscription / Listener Tool (#90) — RFC
- Container Tool Callback (#43)
- Rust Worker Parity Gaps (#47 · #48)
- Event Envelope Reconciliation (#51 in TaskList)
- Cursor Loop Mode (#100) — server v3.8.0 + tools v3.10.1, 2026-06-15
- Transfer Tool Credentials (#99) — tools v3.10.0 + worker v5.22.0, 2026-06-14
- Explicit Input Binding (#77) — v3.0.0 shipped 2026-06-09
- Rust Worker Migration (#30)
- Python Services → Rust (#45)
- Agent Coordination — Claude ⇄ Codex lanes + shared-surface deconfliction
- Issue Tracking
- Continuous Integration — the ai-meta pointer + docs gate, and every repo's PR-gate status
- Wiki Convention
- Handoffs
- Deployment Validation
- Execution Model
- Data Access Boundary
- Observability
- Specs Index — cross-repo + architectural specs
- noetl/noetl wiki — app + DSL
- noetl/server wiki — Rust control plane
- noetl/worker wiki — Rust pull worker
- noetl/tools wiki — tool registry crate
- noetl/cli wiki — CLI + local mode
- noetl/gateway wiki — gatekeeper
- noetl/ops wiki — Helm + manifests
- noetl/travel wiki — domain SPA reference
- Docs site — engineer-facing architecture