Engineering Workspace
Managed Skills
Import skills from a GitHub repo, pinned to a commit, and materialize them into this workspace's own code-runtime sandbox at run.
What a managed skill is
A managed skill is a SKILL.md file plus its helper files, imported from a GitHub repo into this workspace. Import records the repo, path, and the resolved commit so every run uses the same bytes. At run time the files are written into the workspace's sandbox at /workspace/.skills/<slug>/, and the sandbox agent reads SKILL.md off disk and decides for itself when to use it.
This is distinct from the platform skill registry: there is no server-side router for managed skills. They behave the way a local Claude Code or Codex session reads ~/.claude/skills/, by finding SKILL.md files and matching them to the task. Each skill is scoped to one workspace (business profile).
Looking for the operator skills that guide Codex or Claude Code through connection, trace capture, evaluation, Improve, and promotion? See Coding Agent Skills.
Stimulir's maintained sandbox catalog is public at stimulir/managed-skills. It contains web-scrape, deep-research, opposition-enrich, and scenario-simulate.
Discover
List the SKILL.md files a repo exposes at a given ref, without importing anything.
/api/v1/client-skills/discover| Parameter | Type | Description |
|---|---|---|
business_profile_idrequired | string (uuid) | The workspace to scope discovery to. |
repo_ownerrequired | string | GitHub owner, e.g. stimulir. |
repo_namerequired | string | GitHub repo name, e.g. managed-skills. |
ref | string | Branch, tag, or commit. Defaults to HEAD. |
Each candidate returns path_in_repo, slug, name, and description.
stimulir skills discover stimulir/managed-skills --ref mainfrom stimulir import StimulirClient
client = StimulirClient()
found = client.skills.discover(
"stimulir", "managed-skills",
workspace_id="<workspace-id>",
ref="main",
)
for s in found:
print(s["slug"], s["path_in_repo"])Import (pinned to a commit)
Import selected skill paths into the workspace. The chosen ref is resolved to a commit and the skill's files are stored against it, so the sandbox always materializes the exact version you imported.
/api/v1/client-skills/import| Parameter | Type | Description |
|---|---|---|
business_profile_idrequired | string (uuid) | The workspace to import into. |
repo_ownerrequired | string | GitHub owner. |
repo_namerequired | string | GitHub repo name. |
ref | string | Branch, tag, or commit to pin from. Defaults to HEAD. |
skill_pathsrequired | string[] | One or more skill paths in the repo, e.g. skills/deep-research. |
Each imported skill returns id, slug, name, description, path_in_repo, and enabled.
stimulir skills import stimulir/managed-skills \
--path skills/web-scrape \
--path skills/deep-research \
--ref mainclient.skills.import_(
"stimulir", "managed-skills",
["skills/web-scrape", "skills/deep-research"],
workspace_id="<workspace-id>",
ref="main",
)List
List the skills imported into the active workspace.
/api/v1/client-skills?business_profile_id=<workspace-id>stimulir skills listfor s in client.skills.list(workspace_id="<workspace-id>"):
print(s["slug"], s["name"], "enabled" if s["enabled"] else "disabled")How a skill runs in the sandbox
When a run starts, the workspace's imported skills are written into its sandbox before the prompt executes, one mkdir plus a file write per file, landing at /workspace/.skills/<slug>/. The agent then discovers the SKILL.md and applies it if the task calls for it. A skill that was never imported into the workspace simply isn't on disk, so it can't run.
A skill can also declare pip dependencies (from its pyproject); those are read and handed to the prompt so the run can self-provision them. See the Sandbox page for how the code-runtime session is created and where /workspace lives.
Required secrets and the Vault
Some skills need extra third-party API keys, for example a research skill that calls Serper. The workspace Vault is decrypted into the sandbox environment before the agent runs, so the skill's own code can authenticate from inside the sandbox. Skills should read only the environment variables they need and must never print secret values.
Store each key (e.g. SERPER_API_KEY) in the workspace Vault first. Store the raw provider key, these are injected directly into the sandbox env, never routed through the gateway. Missing keys are skipped, so a partially-configured Vault still runs what it can. See the Vault page to add and manage secrets.
Discover, import, and list require a workspace-bound CLI session. If the token is bound to the wrong workspace, select the intended workspace in the console and run stimulir login again.