API Audit
briiirussell/cybersecurity-skills
Audit REST, GraphQL, and RPC APIs against the OWASP API Security Top 10 (2023).
Create or migrate a protected Sim resource operation in the shared Principal and application-use-case architecture across internal APIs, public or versioned APIs, Copilot, and other trusted tool…
$ npx skills add simstudioai/sim --skill migrate-application-operation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install simstudioai/sim migrate-application-operation --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/simstudioai/sim.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/migrate-application-operation .claude/skills/migrate-application-operation && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "migrate-application-operation" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/migrate-application-operation into .claude/skills/migrate-application-operation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-application-operation", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/simstudioai/sim/tree/main/.agents/skills/migrate-application-operationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add simstudioai/sim --skill migrate-application-operation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install simstudioai/sim migrate-application-operation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/simstudioai/sim.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/migrate-application-operation .agents/skills/migrate-application-operation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "migrate-application-operation" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/migrate-application-operation into .agents/skills/migrate-application-operation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-application-operation", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add simstudioai/sim --skill migrate-application-operation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install simstudioai/sim migrate-application-operation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/simstudioai/sim.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/migrate-application-operation .cursor/skills/migrate-application-operation && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "migrate-application-operation" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/migrate-application-operation into .cursor/skills/migrate-application-operation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-application-operation", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/simstudioai/sim.git --path .agents/skills/migrate-application-operation--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add simstudioai/sim --skill migrate-application-operation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install simstudioai/sim migrate-application-operation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/simstudioai/sim.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/migrate-application-operation .gemini/skills/migrate-application-operation && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "migrate-application-operation" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/migrate-application-operation into .gemini/skills/migrate-application-operation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-application-operation", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install simstudioai/sim migrate-application-operationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add simstudioai/sim --skill migrate-application-operation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/simstudioai/sim.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/migrate-application-operation .github/skills/migrate-application-operation && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "migrate-application-operation" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/migrate-application-operation into .github/skills/migrate-application-operation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-application-operation", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add simstudioai/sim --skill migrate-application-operation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install simstudioai/sim migrate-application-operation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/simstudioai/sim.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/migrate-application-operation .opencode/skills/migrate-application-operation && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "migrate-application-operation" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/migrate-application-operation into .opencode/skills/migrate-application-operation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "migrate-application-operation", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
migrate-application-operationCreate or migrate a protected Sim resource operation in the shared Principal and application-use-case architecture across internal APIs, public or versioned APIs, Copilot, and other trusted tool…
Migrate Application Operation is an agent skill from simstudioai/sim. Create or migrate a protected Sim resource operation in the shared Principal and application-use-case architecture across internal APIs, public or versioned APIs, Copilot, and other trusted tool adapters. Use when adding a protected endpoint, tool command, or CRUD method; removing route- or tool-local authorization and business logic; consolidating resource reads or writes behind semantic operation policies; or adding another surface to an existing application operation while preserving contracts, identity…
Its SKILL.md is about 6.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).
It sits in Backend & APIs, covering Rate limiting and Authorization and RBAC. The repository describes itself as: Sim is the collaborative workspace to build, deploy, and monitor AI agents and workflows. Used by 100,000+ builders. The licence is Apache-2.0.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 546d4e7. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bunbunxgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use bunx and git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Migrate Application Operation loads about 6.3k tokens when it runs. Until then it costs about 181 tokens; SKILL.md has 2,879 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from simstudioai/sim at commit 546d4e7, republished under its Apache-2.0 licence (© simstudioai). 2,879 words, ~6,250 tokens.
.claude/skills/migrate-application-operation/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Create or migrate one bounded semantic operation at a time. Share authorization and business behavior without forcing internal APIs, public APIs, Copilot, and other tools to share authentication, input schemas, or response shapes.
Apply this invariant:
Every real operation on persisted or protected data enters through an authorized application use case.
This includes mutations, content and metadata reads, canonical resource lookup, and reference-to-resource resolution when the lookup is authorization-sensitive.
Surface helpers may:
Principal.Surface helpers must not:
A helper that resolves a path is valid only when the actual protected lookup runs through an authorized application resolver. If a helper begins doing real data work, move that work into an application use case.
Read these files completely before editing:
packages/auth/src/principal.tsapps/sim/lib/core/application/operation.tsapps/sim/lib/core/application/workspace-operation.tsapps/sim/lib/core/application/workspace-authorization.tsapps/sim/lib/core/application/authorized-workspace-use-case.tsapps/sim/lib/api/server/routes/definition.tsapps/sim/lib/api/server/routes/internal-json-route.tsapps/sim/lib/api/server/routes/v2-json-route.tsapps/sim/lib/auth/internal-delegation.tsapps/sim/lib/mothership/application/application-adapter.tsapps/sim/lib/mothership/auth/application-delegation.tsUse the file domain only as a representative golden slice:
apps/sim/lib/workspace-files/application/operations.tsapps/sim/lib/workspace-files/application/authorized-workspace-file-use-case.tsapps/sim/lib/workspace-files/application/rename-workspace-file.tsapps/sim/lib/mothership/application/execute-file-use-case.tsapps/sim/lib/mothership/auth/file-delegation.tsThen read the target domain's operation registry, application code, repositories, contracts, adapters, aliases, resume paths, and focused tests. Fail immediately if the shared foundation is absent. Do not recreate it inside the domain.
Inventory every entry point for the behavior before editing:
Classify each as migrate, defer, or non-goal. Do not migrate adjacent operations merely because they share a module. Do not modify v1 unless the request explicitly includes it.
Preserve behavior unless the task explicitly changes it. Stop and report a decision when surfaces currently disagree on security or compatibility behavior; do not silently choose one.
Treat the legacy route or tool as an ordered program, not merely a bag of business logic. Before moving code, write a compact baseline for every in-scope entry point. Pin behavior no existing test covers with a characterization test only where it passes the test-audit gate; otherwise record it in the baseline and verify it by hand after the move.
Capture all of these when they apply:
Compare the old statement order with the proposed application lifecycle explicitly:
legacy parse/normalize
-> legacy authorization checks
-> branch-specific canonical lookup
-> mutation(s)
-> per-step side effects
-> response or redirect catchMoving those steps under a wrapper may change behavior even when each individual call is reused. In particular:
projectAudit and afterSuccess run only after execute returns. They cannot describe earlier committed mutations when a later step throws. Make the compound mutation atomic or define explicit partial-result/failure projection semantics before migrating it.URLSearchParams normalization or exact legacy response unions.Fail fast if the baseline cannot be established from code, tests, or an explicit product decision. Do not infer that behavior is unimportant because it was previously implicit.
Use these responsibilities:
Principal.For ordinary public JSON routes, preserve this order:
IP abuse limit
-> authenticate
-> build Principal
-> operation rate limit
-> parse surface contract
-> application use case
-> canonical load
-> asserted-scope concealment
-> current authorization
-> manager read or mutation
-> semantic audit
-> shared domain effects
-> surface presenterInternal routes may omit the IP bucket or operation limit only through an explicit policy with a reason. Usage billing, storage quota, cost admission, and concurrency are separate from request-rate limiting.
Never query API keys or sessions from the application layer. Never add fallback identity or authorization behavior. Propagate infrastructure failures instead of turning them into not-found or forbidden results.
Add one stable entry to the target domain's operation registry:
rename: defineWorkspaceOperation({
id: 'widgets.rename',
minimumRole: 'write',
workspaceApiKey: 'allow',
capability: 'widgets.use',
principalKinds: ['session', 'personal_api_key', 'workspace_api_key', 'delegated'],
delegatedServices: ['copilot'],
})Do not create internal-, public-, or Copilot-specific versions of the same semantic operation. If two callers have materially different business or transactional semantics, define separate semantic operations and use cases and explain the distinction.
Choose principal kinds from actual behavior. Do not accept every principal merely because the use case is shared. Workspace API keys have a write ceiling and cannot satisfy admin operations. The operation definition must fail fast when its role, workspace-key policy, and principal kinds disagree.
capability is required: a static, operation-declarable capability (not parameterized, not principal-wide), or 'none' with a // permission-group-exempt: <reason> comment directly above it. If principalKinds includes oauth_access_token, oauthScope (api:read | api:write | search:read) is required. defineWorkspaceOperation throws at definition time on any violation. See add-permission-group-item.
Route declarations, tool adapters, and use cases must use the same literal operation. Runtime operation selection is permitted only from a trusted, code-defined registry. Never accept an operation ID or permission tag from an HTTP body, model argument, or other untrusted input.
Dynamic selector dispatch is the deliberate instance of trusted runtime selection. Define and
authorize selectors.execute once: it means "enumerate options while configuring a workflow or
workspace resource." The browser supplies only a selector key from the exhaustive browser-safe
manifest, scope, allowlisted context, and list/detail request. After canonical scope authorization,
the application use case selects the matching attachment from the exhaustive server-only registry.
Provider and internal attachments are trusted implementation adapters under that semantic operation,
not separate application operations. Do not create one operation per selector, provider, or listing
endpoint. Attachments may choose only code-defined credential/service binding, destination policy,
provider primitive, and projection behavior; they must not accept a module, provider, service,
operation kind, origin, or permission tag from the request. The selectors.execute use case owns
reference resolution, credential authorization, provider invocation, sanitization, and safe result
projection end to end.
Use defineAuthorizedWorkspaceUseCase directly or a thin domain binding that supplies domain-specific authorization options:
export const renameWidget = defineAuthorizedWorkspaceUseCase({
operation: widgetOperations.rename,
resolveContext: ({ input }: { input: RenameWidgetInput }) =>
loadCanonicalWidgetContext(input.id, input.assertedWorkspaceId),
authorizationOptions: { delegation: widgetDelegationPolicy },
execute: async ({ input, context }) => renameWidgetRecord({
workspaceId: context.workspaceId,
widgetId: context.resourceId,
name: input.name,
}),
projectAudit: ({ result }) => ({
action: AuditAction.WIDGET_UPDATED,
resourceType: AuditResourceType.WIDGET,
resourceId: result.id,
resourceName: result.name,
}),
afterSuccess: ({ context }) => notifyWidgetsChanged(context.workspaceId),
})Adapt the example to the domain's real authorization options; do not copy invented field names.
The wrapper must own this lifecycle:
Do not call shared authorization, principal audit attribution, or recordAudit manually from an ordinary migrated use-case body. Use projectAudit only when the operation has semantic audit. Return no audit entries for authoritative no-ops. Keep product analytics such as captureServerEvent surface-specific through the adapter's success hook.
Inspect legacy orchestration before reusing it. If it already authorizes, audits, notifies, or captures analytics, call a lower-level primitive or remove duplicate responsibility for migrated callers.
Application code must remain surface-neutral. It must not import app/api/**, next/server, internal/v1/v2 contracts or presenters, or Copilot tool handlers. Return domain values and let each surface presenter project its own wire result.
Use defineInternalJsonRoute for ordinary JSON routes. Explicitly declare the contract, authentication policy, semantic operation, rate policy, error policy, input mapping, use case, and presenter when the wire result differs.
Use internalSessionAuth for session-only routes. Use createInternalSessionOrExecutorAuth only when the endpoint genuinely supports signed executor delegation; the semantic operation must then allow delegated principals from the executor service. Never turn an actorless legacy JWT into a fake session, owner, or user principal.
The internal adapter owns authentication and internal response envelopes. It must not implement workspace authorization. Preserve internal-only analytics through onSuccess after application success.
Keep the route module declarative. If several internal routes repeat authentication, parsing, error rendering, or response construction, improve the shared internal route builder instead of adding a domain-specific route wrapper.
Use the appropriate public/versioned route builder, such as defineV2JsonRoute, with API-key authentication, explicit semantic operation and rate policy, external error projection, input mapping, application use case, and an external presenter.
Authentication and HTTP formatting may differ from internal APIs; authorization and business behavior must not. Rate-limit using the credential or principal subject, never a billed owner. Resolve billing attribution only for billing, quota, or legacy required-user fields.
Keep surface contracts separate when their wire shapes differ. Reuse shared primitive schemas and domain validators for invariants such as IDs, names, bounds, and formats. Do not maintain duplicate internal and external schemas merely because the routes are separate; import the same schema when the wire shape is genuinely identical. Never cast one surface response into another.
Keep v1 middleware and routes unchanged unless explicitly included.
Copilot is a surface adapter, not a separate application layer. If an HTTP or other surface already uses an application use case, Copilot must call that exact use case rather than reimplementing protected business behavior under lib/mothership.
Create one domain-level Copilot application adapter with createCopilotApplicationAdapter instead of constructing delegated principals in every tool:
executeCopilotWidgetUseCase(context, renameWidget, input, { resourceId })That adapter must:
Principal in one place.Never construct authoritative delegation from model-provided workspace IDs, user IDs, operation IDs, resource scope, or permission tags. Model arguments are requested targets only and must be checked against trusted execution context and canonical data.
Tool handlers own argument aliases, resumable legacy names, abort checks, tool-call reporting, and tool-specific presentation. They must not query managers directly for protected operations, manually authorize, or implement protected business behavior. If a Copilot-only compound action expresses real domain behavior, define a surface-neutral domain operation and application use case for it.
A Copilot reference helper may translate a path to a resource only by calling an authorized application resolver under the intended semantic operation. Passing a code-defined operation object is acceptable; passing a model-provided operation string is not. An immediate same-request resolver followed by the operation may reuse one trusted principal, though the application operation still performs its own canonical authorization. Fresh authentication and authorization are required across lifecycle boundaries such as resumed tool calls, executor callbacks, queued or background work, upload control legs and finalization, durable completion, and long-running provider operations. When resolution and execution form one business operation, need a consistent snapshot, or appear repeatedly together, prefer a top-level application use case such as renameWidgetByReference.
Surface adapters must not compose protected mutations. An atomic compound action requires one top-level semantic domain operation and application use case that owns the transaction and authoritative result. An explicitly best-effort application command may coordinate multiple operations only when it defines hard input and expansion caps, cancellation checkpoints, partial-result semantics, audit behavior, and rate/quota policy. Keep composition exceptional and explicit; ordinary tools should use the shared execution adapter.
Map expected typed errors to safe tool results. Unknown errors must become generic system/retryable messages while retaining full causes in server logs. Never return raw database or storage errors to the model.
Treat every tool runtime as a surface adapter:
Principal through one shared adapter for that runtime or domain.An internal caller is not automatically trusted to bypass authorization. It must supply an explicit principal or use a deliberately designed service/delegation principal. If the current principal model cannot express its authority, stop and extend the identity model intentionally; do not fall back to an owner, uploader, creator, or arbitrary user ID.
External tool endpoints authenticate at their adapter exactly like public APIs. Do not authenticate again inside the application use case.
PrincipalActor metadata in semantic audit.If a required legacy user column cannot represent the real actor, label the compatibility attribution explicitly. Never pretend it is the acting human.
Do not force these through an ordinary JSON migration:
Stop and report a missing design rather than weakening identity, authorization, limits, or errors.
Run the test-audit authoring gate before writing any test. Prefer one E2E/integration run over the real boundary; where a use-case unit test is justified, list its failure modes before writing code (CLAUDE.md → Testing). Own each risk at exactly one boundary:
*.integration.ts owns repository semantics: canonical active lookup, workspace-predicated writes, archived resources, authoritative affected rows, and database error propagation.Risks that usually earn a test when the change introduces them:
Run at minimum:
bun run --cwd apps/sim test <focused test files>
bunx biome check <changed source and test files>
bunx turbo run type-check --filter=@sim/app --filter=@sim/auth
bun run check:audits
git diff --checkDo not claim a check passed unless it completed successfully.
Report:
© simstudioai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .agents/skills/migrate-application-operation of simstudioai/sim.
Open the folder on GitHubat commit 546d4e7
Migrate Application Operation next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Migrate Application Operation this skillsimstudioai/sim | 30k | — | ~6.3k | Automated safety check: Pass | Apache-2.0 | |
| API Auditbriiirussell/cybersecurity-skills | 412 | — | ~2.8k | Automated safety check: Notes | MIT | |
| Auth Architecturemajiayu000/litellm-rs | 116 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Springboot Securityaffaan-m/ECC | 274k | 5 repos | ~2k | Automated safety check: Pass | MIT | |
| Discover APIrand/cc-polymath | 181 | 1 repos | ~1.5k | Automated safety check: Pass | MIT | |
| API Security Designvinayaklatthe/microsoft-security-skills | 175 | — | ~2.2k | Automated safety check: Pass | MIT |
briiirussell/cybersecurity-skills
Audit REST, GraphQL, and RPC APIs against the OWASP API Security Top 10 (2023).
majiayu000/litellm-rs
LiteLLM-RS Authentication Architecture. An agent skill from majiayu000/litellm-rs.
affaan-m/ECC
Spring Security best practices for authn/authz, validation, CSRF, secrets, headers, rate limiting, and dependency security in Java Spring Boot services.
rand/cc-polymath
Automatically discover API design skills when working with REST APIs, GraphQL schemas, API authentication, OAuth, JWT, rate limiting, API versioning, error handling, or endpoint design.
vinayaklatthe/microsoft-security-skills
Guidance for designing secure APIs on Azure - authentication, authorization, gateway controls, input validation, rate limiting, secret management, and runtime threat detection - aligned to OWASP API…
affaan-m/ECC
Laravel security best practices for authn/authz, validation, CSRF, mass assignment, file uploads, secrets, rate limiting, and secure deployment.
simstudioai/sim
Install, upgrade, and operate the Sim Helm chart on Kubernetes.
simstudioai/sim
Add a new table column type to Sim — registry entry, icon, storage shape, coercion, and the behavioral hooks the grid and API read.
simstudioai/sim
Add a code-defined table enrichment (registry entry) under apps/sim/enrichments/ backed by an ordered provider cascade, ensuring every provider tool it calls has hosted-key support.
simstudioai/sim
Add hosted API key support to a tool so Sim provides the key (metered and billed to the workspace) when a user has not brought their own.
simstudioai/sim
Add or upgrade a curated, immutable managed CLI for Sim Function sandboxes, including client-safe catalog metadata, a pinned server-only installation recipe, checksum and executable verification…
simstudioai/sim
Add or update a Sim dynamic selector using the shared manifest, server attachment, and selectors.execute path.
Categories
Create or migrate a protected Sim resource operation in the shared Principal and application-use-case architecture across internal APIs, public or versioned APIs, Copilot, and other trusted tool…. Migrate Application Operation is an agent skill from simstudioai/sim. Create or migrate a protected Sim resource operation in the shared Principal and application-use-case architecture across internal APIs, public or versioned APIs, Copilot, and other trusted tool adapters.
Migrate Application Operation fits situations like: adding a protected endpoint; removing route-; tool-local authorization and business logic; consolidating resource reads.
Run `npx skills add simstudioai/sim --skill migrate-application-operation -a claude-code`. Or copy the skill folder (.agents/skills/migrate-application-operation in simstudioai/sim) into .claude/skills/migrate-application-operation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add simstudioai/sim --skill migrate-application-operation -a codex`. Or copy the skill folder (.agents/skills/migrate-application-operation in simstudioai/sim) into .agents/skills/migrate-application-operation in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add simstudioai/sim --skill migrate-application-operation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/migrate-application-operation, .gemini/skills/migrate-application-operation, .github/skills/migrate-application-operation and .opencode/skills/migrate-application-operation in your project.
Going by SKILL.md and its folder, Migrate Application Operation needs the command-line tools its instructions call (bun, bunx and git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Migrate Application Operation is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.3k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Migrate Application Operation: API Audit (briiirussell/cybersecurity-skills, 412 stars), Auth Architecture (majiayu000/litellm-rs, 116 stars), Springboot Security (affaan-m/ECC, 274k stars) and Discover API (rand/cc-polymath, 181 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
simstudioai (a GitHub organization) maintains it in simstudioai/sim, which has 29,785 GitHub stars. The repository holds 40 skills in this directory. The repository was last updated on October 7, 2026.
Source: simstudioai/sim on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.