Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/dylanroscover/embody/create-operatornpx skills add dylanroscover/Embody --skill create-operatorgit clone --depth 1 https://github.com/dylanroscover/EmbodyWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00042 | $0.03344 |
| Opus 5 | $0.00021 | $0.01672 |
| Sonnet 5 | $0.00008 | $0.00669 |
| Haiku 4.5 | $0.00004 | $0.00334 |
Grade A, and why
create-operator scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 103 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Create Operator Workflow
Follow these steps every time you create operators via MCP:
- Choose the correct parent network -- ASSOCIATE with where the user already works. Inconsistent placement is the #1 scoping bug (
/one run,/project1the next). The fix is to anchor on the user's own structure, which is stable across runs -- not on a transient pane:- NEVER create under
/localor/local/*-- volatile storage, not saved with the.toe. - If the user named a target, use it.
- Default home = the container that holds the
EmbodyCOMP.execute_pythonwithresult = op.Embody.parent().path. Embody in/project1-> build in/project1; Embody at the root/-> build at/. It returns the SAME home every run -- this is the consistency mechanism, and it is the level the user chose by placing Embody there. - Override only for deliberate navigation. If the user has actively opened a specific content network to work in, build there instead (
ui.panes.current.owner.path) -- UNLESS that pane is sitting at the bare root/(a non-deliberate default, e.g. right after the project opens), in which case ignore it and use the Embody home above. Never treat bare/as a content home. - Discover, never guess. Confirm the real container names with
query_networkon/-- never hardcode/project1(it may be renamed, and there may be more than one). - Keep one task's COMPs together under the SAME parent, grouped in one container / annotation. Don't split related COMPs across levels.
- NEVER create under
- Discover the target network:
query_networkon the target parent to confirm it exists and see existing operators - Scan existing layout: Use
get_network_layouton the parent COMP. Note each operator'snodeX,nodeY,nodeWidth, andnodeHeight- operators vary in size (100-300+ units wide) - Plan positions BEFORE creating: Batch-compute grid-aligned positions for ALL operators you intend to create. Signal flow is left-to-right: inputs on the left, outputs on the right. Supporting operators (DATs feeding a TOP, CHOPs feeding parameters) go to the left of or below the operator they feed. Snap all coordinates to the 200-unit grid. See the Positioning Rules section below.
- Create each operator:
create_opwith the desired type and name - Position each operator:
set_op_positionto place it at the pre-computed grid position. Auto-placement is NOT acceptable - it produces messy, unreadable networks. You MUST explicitly position every operator you create. Moving a host viaset_op_positioncarries its docked companions along (re-hugged below the new spot, reported asdocks_moved), so position the host FIRST and any deliberately-placed dock after. - Docked companions (callback/shader/info DATs):
create_op,copy_op, andset_op_positionauto-hug every docked op in a tight row ~30 units below its host (docks_placed/docks_movedin the result) - do not re-plan grid slots for them. Ops created insideexecute_pythonget NO such placement at create time (Envoy only auto-hugs badly scattered docks after the call, with aLAYOUT WARNING); if you create dock-spawning ops (GLSL TOP/MAT, execute DATs, OSC in/out) in a script, place their docks yourself per the Docked companion layout formula below. - Connect:
connect_opsto wire inputs/outputs. Wires must flow left-to-right (positive X). If a wire would go backward, the downstream op is misplaced - reposition it. - Set OP-reference parameters with relative paths: If the operator has parameters referencing other operators (Camera, Geometry, Lights, TOP, CHOP, etc.), use sibling names (
cam) or relative paths (../shared/lut) - NEVER absolute paths (/project1/scene/cam). Seeparameters.mdsection OP-Reference Parameter Values. - Verify layout: Call
get_network_layoutagain. Confirm no overlaps, grid alignment is intact, signal flows left-to-right, and every entry carryingdockedTosits in a tight row just below its named host (docked ops are the one exception to 200-grid spacing - they hug). - Verify errors:
get_op_errorswithrecurse=trueto check for errors and warnings. Fix all errors before considering the task complete - Visual verification: For any renderable result (a TOP chain or a render), capture the output TOP with
capture_topand confirm it actually renders (not black) and matches intent; for a 3D render, confirm a camera, a light, and geometry display/render flags are present. For anything but a trivial op, load the/visual-aestheticsskill to judge composition/value/color/contrast.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 103 lines · 42 tokens per session scan A 8f0ca97bbdf8
create-operator is a skill published in the GitHub repository dylanroscover/Embody (166 stars, last pushed 3d ago), licensed MIT. It adds 42 tokens to every session and 3,344 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
agentcore-investigation
Investigate Bedrock AgentCore runtime sessions via CloudWatch Logs Insights — resolve session/trace IDs, query OTEL spans, filter noise, build timelines. Use when debugging AgentCore agent sessions, tracing tool calls, or analyzing latency.
amazon aurora dsql
Deprecated compatibility redirect for Aurora DSQL guidance. Use when a request concerns DSQL, Aurora DSQL, distributed SQL, DSQL schemas, migrations, queries, authentication, performance, or application development.
investigate-issue
Investigate a GitHub issue by fetching details, analyzing the codebase, researching documentation, and presenting an actionable implementation plan with test guidance. Use when asked to investigate, analyze, triage, or plan work for a GitHub issue. Invoked with /investigate-issue or /investigate-issue (prompts for ID).
api-validator
Scan Bifrost HTTP controllers/handlers/integrations and validate OpenAPI API coverage, route methods/paths, parameters, request/response docs, and auth/security information. Use when asked to audit missing or incorrect APIs, compare controllers against docs/openapi, validate auth information, or fix API documentation…
resolve-pr-comments-stack
Resolve unresolved PR review comments across an entire Graphite (gt) stack of many PRs, bottom-up, in one working directory. Use when asked to "go through this stack and resolve comments", "clean up review comments across the whole stack", or given a list/range of PR numbers that form (or partially form) a gt stack.…
add-pricing-field
Wire a new model-pricing field (a datasheet cost key like costperrequest, outputcostpervideopersecond720p, etc.) end-to-end through Bifrost's pricing engine - Options struct, DB table + migration, datasheet sync upsert columns, cost calculation, custom pricing overrides, public API, OpenAPI docs, MDX docs, and the UI…