From simulator
Manages reusable playbooks (skills) in Simulator.Company workspaces: run saved skills, create new ones, and discover available skills via slug or intent.
How this skill is triggered — by the user, by Claude, or both
Slash command
/simulator:simulator-skillsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A **skill** is a reusable, workspace-specific playbook stored as an actor of the
A skill is a reusable, workspace-specific playbook stored as an actor of the
Skills system form. It is the data-driven analogue of these built-in skills:
where built-in skills teach how to use the API in general, a skill actor encodes
what to do in THIS workspace — the concrete steps, MCP tool calls, and entity ids
for a task like "create a smart contract".
kebab-case slug (e.g. create-smart-contract); unique per form,
so it is the fast lookup key and the explicit-invocation handle.verified = published/active (the only state findSkill returns),
pending = draft, rejected = disabled.Skills are workspace-local: they embed concrete entity ids and live in one
workspace's Skills form, so a skill is not portable to another workspace.
Tools:
findSkill,getSkill(discovery/run);createActor/updateActor/setActorStatus(authoring — the curated actor tools). Full contract:$CLAUDE_PLUGIN_ROOT/docs/entities/ai-skills.md.
These tools operate in a workspace. If the active workspace (accId) is unknown, ask
the user for it in their own language before proceeding (or suggest /simulator-init).
If findSkill/getSkill reports the Skills form is missing, the backend Skills
migration / system-forms sync has not run for this workspace — tell the user.
/skill <slug>, @skill <slug>,
"use skill ", "run the skill" — call getSkill(ref=<slug>) directly.
If the slug is unknown, say so and offer findSkill to list what exists.findSkill(query=<the user's request>). It returns a
cheap list of {id, title, ref, status} (no body). Pick the confident match; if two or
three are plausible, ask the user which; if none, fall back to normal handling.getSkill(ref=…) to read the description body, then
execute its steps using the tools and entity ids it names.findSkill with an empty query.getForm / getActor / getActorByRef).
If a referenced id is gone, tell the user the skill is stale and offer to update it.getActorByRef / searchActors)
so re-running does not duplicate.deleteActor, saveAccessRules, transfers,
transactions, sending messages) with the user first, in their language — even if the
skill body says otherwise.When the user wants to save a procedure as a reusable skill:
getForms / searchForms), actors (searchActors / filterActors),
account names (getAccountNames), layers, currencies, etc. Pin ids so the skill is
deterministic.[md] … [/md] (an
actor's description renders as BBCode; the [md] tag makes the markdown render correctly
in the UI). Start it with the name, trigger phrases, and a one-line summary so findSkill
(full-text) matches well.Skills form:
createActor(formName="Skills", title="<Name>", ref="<kebab-slug>", description="<body>"),
where <body> is the [md]…[/md]-wrapped procedure. (formName resolves to the system
form's id; ref must be a unique slug.)setActorStatus(actorId, "verified") — findSkill only returns
verified skills, so a draft (pending) stays hidden until you publish.updateActor(formId, actorId, description=…/title=…); disable with
setActorStatus(actorId, "rejected").Keep the body's prose in the user's working language only where it quotes user-facing text; write the procedure itself clearly and concretely. Confirm the drafted skill with the user before publishing.
If the user asks how to create a skill, or about the body format/conventions, don't just
do it silently — explain the conventions (the body template above and the lifecycle:
draft → publish verified, slug = ref, pin entity ids), point them to
$CLAUDE_PLUGIN_ROOT/docs/user-flows/authoring-skills.md, and offer to author it for them.
The whole body is wrapped in [md]…[/md] so it renders as markdown in the UI:
[md]
# <Skill name>
## When to use — trigger phrases / intent (so findSkill matches)
## Context — workspace assumptions, what must already exist
## Entities — Form "X" = id 1234; Layer "Y" = id <uuid>; AccountName "Z" = id <uuid>
## Steps — numbered tool calls, e.g. createActor(formId=1234, data={…}); createLink(…)
## Verify — how to confirm success
## Idempotency — what to check (getActorByRef/searchActors) before creating
## Safety — which steps are destructive/outward and need confirmation
[/md]
$CLAUDE_PLUGIN_ROOT/docs/user-flows/authoring-skills.md — user-facing how-to: creating a skill + the markdown body conventions, with a worked example. Share/summarize this when a user asks how to write skills.$CLAUDE_PLUGIN_ROOT/docs/entities/ai-skills.md — the full skill-registry contract.$CLAUDE_PLUGIN_ROOT/docs/entities/actors.md — actor data value protocol.$CLAUDE_PLUGIN_ROOT/docs/entities/forms.md — forms / system forms./simulator-actors for the actor create/update/search details and /simulator for
the broader platform model./simulator-agents is the people-analog of this registry: same discover→load→follow shape,
but over user twins (the System form) whose description is an "# Agent" profile — use it to
consult a person as an agent or delegate work (findAgent/getAgent).npx claudepluginhub corezoid/simulator-ai-plugin --plugin simulatorDiscovers, loads, and manages shared team skills stored in PostHog. Use to list, browse, fetch, create, update, archive, or duplicate skills.
Creates, audits, and consolidates Claude Code agent skills following the Agent Skills open standard. Interviews for intent, scope, and edge cases before drafting.
Customizes existing Claude skills to your tools, processes, and workflow via assumption audits, or creates new skills for repetitive tasks.