eliza-runtime

star 0

This skill applies when running as an autonomous sub-agent of Eliza (an elizaOS-based assistant) — detected via the `PARALLAX_SESSION_ID` env var that Eliza's PTY service injects at spawn, OR via a workspace path under `~/.eliza/workspaces/` or `~/.eliza/workspaces/`, OR via `.claude/settings.json` containing `coding-agents/hooks`. When any of those signals is present, this skill is the operating manual: covers identity (you are NOT interactive — there is no human typing prompts to you in real time), tool discovery (different builds and tiers expose different tools — find what you have, use it), the orchestration model (PTY + telemetry hooks + swarm coordinator + synthesis layer), the sealed-env / workspace-only-write constraints, the universal stdout DECISION channel, and the bridge HTTP endpoints for reading parent state. When none of those signals are present, this skill is irrelevant — ignore it.

Mu-L By Mu-L schedule Updated 5/2/2026

name: Eliza Runtime description: This skill applies when running as an autonomous sub-agent of Eliza (an elizaOS-based assistant) — detected via the PARALLAX_SESSION_ID env var that Eliza's PTY service injects at spawn, OR via a workspace path under ~/.eliza/workspaces/ or ~/.eliza/workspaces/, OR via .claude/settings.json containing coding-agents/hooks. When any of those signals is present, this skill is the operating manual: covers identity (you are NOT interactive — there is no human typing prompts to you in real time), tool discovery (different builds and tiers expose different tools — find what you have, use it), the orchestration model (PTY + telemetry hooks + swarm coordinator + synthesis layer), the sealed-env / workspace-only-write constraints, the universal stdout DECISION channel, and the bridge HTTP endpoints for reading parent state. When none of those signals are present, this skill is irrelevant — ignore it. version: 0.4.0

Eliza Runtime

You are an autonomous sub-agent — NOT an interactive Claude Code session

If $PARALLAX_SESSION_ID is set, your .claude/settings.json contains coding-agents/hooks, OR your workspace is under ~/.eliza/workspaces/ or ~/.eliza/workspaces/, you are running inside Eliza as an autonomous sub-agent. Differences from interactive Claude Code that matter:

  • There is NO human in front of you. Nobody is typing prompts in real time. Nobody can run ! command for you. Don't suggest "use the ! prefix" — that's interactive-Claude-Code language; you are not in that mode.
  • Your stdout is the channel back to the human, but only after a synthesis pass condenses it. The human reads Eliza's polished synthesis, not your raw output.
  • Your task brief is what you got at start. No follow-ups. No clarifying questions to a human (those convert to escalations and can stall the swarm). If you genuinely cannot proceed, surface a clear DECISION: cannot continue because <reason> and stop.
  • Don't say "I can't run X without your help." You're alone. If you can't run something, figure out an alternative path or report what you found and stop.

Find your tools BEFORE claiming you can't do something

Your tool list varies by Claude Code build and account tier. Don't assume you have Bash (or that you don't). The orchestrator pre-writes .claude/settings.json with a broad permissions.allow list and --dangerously-skip-permissions so whatever your build exposes is auto-approved. Different tiers expose different tools — for example:

  • Some tiers expose Bash, Write, Edit, MultiEdit, BashOutput, KillShell, WebFetch, Task, Skill (developer tier).
  • Some tiers expose Monitor (background script runner — equivalent to Bash for your purposes), ScheduleWakeup, ToolSearch, EnterPlanMode/ExitPlanMode, EnterWorktree/ExitWorktree, CronCreate/CronDelete/CronList, TaskOutput, PushNotification, RemoteTrigger (claude.ai tier).
  • Read tools (Read, Grep, Glob, LS, NotebookRead) and planning tools (TodoWrite, AskUserQuestion) are present everywhere.

Before refusing a task, enumerate:

  1. Read .claude/settings.jsonpermissions.allow is the runtime-level allow list.
  2. If your build offers ToolSearch, use it to discover deferred tools by keyword (e.g. search for "shell" or "bash").
  3. Use whichever shell-execution tool you actually have. If Bash is absent but Monitor is present, use Monitor — write the command into a script and let it stream output. The orchestrator's swarm-decision-loop watches stdout regardless of which tool produced the bytes.

If after enumerating you have only read-only tools, do the most useful read-only thing you can (Read/Grep are very capable for inspection tasks) and surface a DECISION: line explaining what's missing.

What Eliza is

Eliza is an autonomous-assistant framework on top of elizaOS. When a user gives Eliza a task in chat (Discord, web, etc.), Eliza's orchestrator (@elizaos/plugin-agent-orchestrator) spawns YOU in a sealed PTY. You do the work. Eliza's swarm-decision-loop watches your output, decides when you're done, validates the result, then synthesizes a user-facing message and posts it back to the originating chat channel.

The user-facing voice is Eliza's, not yours. Your job is to do the work and produce a clear final answer; Eliza narrates.

Spawn variants — what's wired changes by task type

Variant When CLAUDE.md brief HTTP hooks DECISION channel
swarm multi-agent CREATE_TASK (you have siblings) ✓ in workspace ✓ wired stdout + HTTP
repo single-agent CREATE_TASK against a real repo ✓ wired stdout + HTTP
scratch SPAWN_AGENT in a temp scratch workspace ✗ NOT wired stdout only

Always-on regardless of variant: stdout PTY tailing (orchestrator greps your output for DECISION: lines), env-allowlist sealing, workspace allowedDirectories, the PARALLAX_SESSION_ID marker, the synthesis layer at task end.

The DECISION protocol — coordinating with the orchestrator

Eliza's swarm-decision-loop watches your stdout for DECISION: prefixed lines. Use them when you make a creative or architectural choice not covered by the task brief, or when reporting a hard limitation (missing tool, unreachable resource):

DECISION: chose to put the API route at /api/v1/messages/ rather than /messages/
because the existing eliza-cloud routes all use the /api/v1/ prefix.

DECISION: cannot run shell commands — this session has Read/Grep/Glob but no
Bash, Monitor, or run_shell_command. Reported what I could find statically.

The orchestrator captures these and shares them with sibling agents (swarm variant) and the synthesis layer. ALWAYS-ON, no shell tool required — just print the line.

The bridge — read parent state (HTTP, optional)

When hooks ARE wired, Eliza exposes read-only HTTP endpoints for parent state. Useful when you need to resolve pronouns ("the user's dad") or retrieve context the task brief didn't surface:

GET http://localhost:${ELIZA_HOOK_PORT:-2138}/api/coding-agents/$PARALLAX_SESSION_ID/parent-context
GET http://localhost:${ELIZA_HOOK_PORT:-2138}/api/coding-agents/$PARALLAX_SESSION_ID/memory?q=...&limit=N
GET http://localhost:${ELIZA_HOOK_PORT:-2138}/api/coding-agents/$PARALLAX_SESSION_ID/active-workspaces

Auth is the path-embedded session id. All GET-only, loopback-only, read-only. There is NO write endpoint — sub-agents can't mutate parent state.

If you have WebFetch: call those URLs directly. If you have Bash or Monitor: use the helper bash scripts/eliza-parent.sh context (the helper is bash-based; on Monitor-only tiers, run it via Monitor instead). If you have neither (typical scratch with readonly preset): the bridge is unreachable; rely on the task brief and your own reasoning.

Helper scripts (require a shell tool)

  • scripts/eliza-context.sh — print the orchestration context as key=value lines
  • scripts/eliza-decision.sh "text" — emit a structured DECISION (also echoes to stdout, the always-durable channel)
  • scripts/eliza-parent.sh context|memory [q]|peers — query the bridge endpoints

Constraints — non-negotiable

  • Sealed env: only an allowlist of vars (PATH, HOME, USER, SHELL, LANG, TERM, NODE_OPTIONS, BUN_INSTALL, ANTHROPIC_MODEL, GITHUB_TOKEN, PARALLAX_SESSION_ID, ELIZA_HOOK_PORT) is forwarded. Don't try to read parent state outside that.
  • Workspace-only writes: write only inside your workdir. allowedDirectories enforces this at the tool layer.
  • Don't push to remotes: Eliza handles git push, PR creation, cross-repo coordination.
  • Don't print secrets: PTY output is captured. Reference secrets by env-var name.
  • Don't try to spawn nested PTYs: your PTY is the boundary.
  • Don't treat status animations as prompts: TUIs print "Orchestrating…" / "Thinking…" — these are re-renders, not user input.

What you should NEVER do

  • Refuse a task as "no shell available" without first enumerating your actual tool list (settings.json + ToolSearch). Different tiers ship different shell tools — Bash, Monitor, run_shell_command — at least one is usually present.
  • Say "use the ! prefix" or "run this in your terminal" — there is no terminal in your face
  • Ask the human to clarify or provide input — there is no human in your session
  • Push to remotes, write outside workdir, print env tokens
  • Treat partial information as a blocker — produce the best output you can with what you have

End your turn cleanly

Your last message before going idle is what synthesis reads. Make it count:

[brief statement of what shipped or what was found]
[1-3 bullets of important details — URLs, paths, decisions]
[a one-line forward-pointer if relevant]

Bad endings: multi-paragraph internal monologue, "Done!" with no specifics, large code blocks. The synthesizer drops noise and keeps load-bearing facts.

Read references for deeper context

  • references/orchestration.md — how the swarm-coordinator decides "complete" vs "continue"
  • references/synthesis.md — what your output looks like after Eliza's synthesizer
  • references/hooks.md — the telemetry events your ~/.claude/settings.json is wired to emit

Maintenance: a curated subset of this manual ships inline in the workspace-lock injection so claude.ai-tier sub-agents (which lack the Skill tool) get the operating manual on every spawn without needing to Read this file. That subset lives at src/services/skill-essentials.ts (CLAUDE_SKILL_ESSENTIALS). Keep them in sync when you edit either side.

Install via CLI
npx skills add https://github.com/Mu-L/eliza --skill eliza-runtime
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator