Diagram Design
cathrynlavery/diagram-design
Creates branded diagrams, from architecture, flowchart and sequence to charts and maps, as self-contained HTML with inline SVG, with import from draw.io, Mermaid and Excalidraw.
Validate an existing Sim integration (tools, block, registry, and resolved-secret/model-input boundaries) against the service's API docs and Sim execution conventions
$ npx skills add simstudioai/sim --skill validate-integration -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install simstudioai/sim validate-integration --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/validate-integration .claude/skills/validate-integration && 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 "validate-integration" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/validate-integration into .claude/skills/validate-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validate-integration", 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/validate-integrationType 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 validate-integration -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install simstudioai/sim validate-integration --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/validate-integration .agents/skills/validate-integration && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "validate-integration" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/validate-integration into .agents/skills/validate-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validate-integration", 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 validate-integration -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install simstudioai/sim validate-integration --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/validate-integration .cursor/skills/validate-integration && 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 "validate-integration" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/validate-integration into .cursor/skills/validate-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validate-integration", 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/validate-integration--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 validate-integration -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install simstudioai/sim validate-integration --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/validate-integration .gemini/skills/validate-integration && 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 "validate-integration" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/validate-integration into .gemini/skills/validate-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validate-integration", 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 validate-integrationInstalls 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 validate-integration -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/validate-integration .github/skills/validate-integration && 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 "validate-integration" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/validate-integration into .github/skills/validate-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validate-integration", 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 validate-integration -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 validate-integration --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/validate-integration .opencode/skills/validate-integration && 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 "validate-integration" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/validate-integration into .opencode/skills/validate-integration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "validate-integration", 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.
validate-integrationValidate an existing Sim integration (tools, block, registry, and resolved-secret/model-input boundaries) against the service's API docs and Sim execution conventions
Validate Integration is an agent skill from simstudioai/sim. Validate an existing Sim integration (tools, block, registry, and resolved-secret/model-input boundaries) against the service's API docs and Sim execution conventions
Its SKILL.md is about 8.7k 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 Development, covering Technical documentation. 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.
10 steps, taken from the step headings 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:
bunnpxgitFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
docs.sim.aiAlso links to:
api.service.comFrom 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.
Validate Integration loads about 8.7k tokens when it runs. Until then it costs about 47 tokens; SKILL.md has 4,025 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). 4,025 words, ~8,667 tokens.
.claude/skills/validate-integration/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.You are an expert auditor for Sim integrations. Your job is to thoroughly validate that an existing integration is correct, complete, and follows all conventions.
When the user asks you to validate an integration:
Read every file for the integration — do not skip any:
apps/sim/tools/{service}/ # All tool files, types.ts, index.ts
apps/sim/blocks/blocks/{service}.ts # Block definition
apps/sim/tools/registry.ts # Tool registry entries for this service
apps/sim/blocks/registry-maps.ts # Block + meta registry entry (BLOCK_REGISTRY / BLOCK_META_REGISTRY)
apps/sim/components/icons.tsx # Icon definition
apps/sim/lib/auth/connectors/providers.ts # Better Auth connector providers (buildConnectorProviders) — should use getCanonicalScopesForProvider()
apps/sim/lib/oauth/oauth.ts # OAuth provider config — single source of truth for scopes
apps/sim/lib/oauth/utils.ts # Scope utilities, SCOPE_DESCRIPTIONS for modal UI
packages/deployment-config/src/env-capabilities.ts # OAuth client runtime capability source of truth
apps/sim/lib/core/config/env.ts # Runtime env schema for capability fields
packages/sim-setup/src/capability-config.ts # Exhaustive CLI input-mode mapping for OAuth fields
packages/deployment-config/src/integrations.json # Generated client-safe integration catalog
packages/deployment-config/src/service-account-providers.generated.ts # Generated provider-ID facts
packages/deployment-config/src/service-account-metadata.ts # Handwritten deployment policyIf the block, its triggers, or connector fields use a selectorKey, also apply the validate-selector skill and read
the key's entry in apps/sim/lib/selectors/manifest.ts, its server attachment and provider listing
primitive, and the shared context builder. Selector provider logic runs only server-side through
selectors.execute.
Fetch the official API docs for the service. This is the source of truth for:
If the official docs do not clearly show the response JSON shape for an endpoint, you MUST tell the user instead of guessing.
If a response schema is unknown, the validation must explicitly call that out and require:
For every tool file, check:
snake_case: {service}_{action} (e.g., x_create_tweet, slack_send_message)name is human-readable (e.g., 'X Create Tweet')description is a concise one-liner describing what it doesversion is set ('1.0.0' or '2.0.0' for V2)required: truerequired: falserequired: true or required: false — never omitted'string', 'number', 'boolean', 'json')'hidden' — ONLY for OAuth access tokens and system-injected params'user-only' — for API keys, credentials, and account-specific IDs the user must provide'user-or-llm' — for everything else (search queries, content, filters, IDs that could come from other blocks)description that explains what it doesAuthorization: Bearer ${params.accessToken}Content-Type header is set for POST/PUT/PATCH requests.trim()-ed to prevent copy-paste whitespace errors`https://api.service.com/v1/${params.id.trim()}`await response.json())data.data vs data vs data.results)?? null?? []optional: true is set on fields that may not exist in all responsestype: 'json' and the shape is known, properties defines the inner fields (tool outputs only — block outputs do not support properties)type: 'array', items defines the item structure with properties (tool outputs only)XCreateTweetParams)ToolResponse)? in the interface (e.g., replyTo?: string)XTweetResponse shared across tweet tools)export * from './types')For every request field, determine whether it is ordinary API input, model-visible text/structured content, opaque model input, or a value persisted into Sim-owned durable storage.
Treat model-input provenance as opt-in. Require official documentation or an unambiguous local execution path proving that the exact field reaches an AI model. If the evidence is ambiguous, leave the integration unchanged; do not infer a model boundary merely from natural-language, search, extraction, or "AI-powered" marketing terminology.
request.modelInput with mode: 'project' and a
minimal exact selector; nested/JSON-string adapters preserve shape through applyProjectedrequest.modelInput, projected before the existing formatter parses it, and has deterministic
formatter behavior when a whole-value placeholder is invalid for the serialized grammaroperation.modelInput with privateInputPaths (or mode: 'private-provenance'), and the
operation calls validateOpaqueModelInputProvenance before model egress; storage keys, paths, signed URLs,
and ordinary remote URLs are not treated as byte provenance, while tracked stored bytes are
authorized independently at the owning model-egress boundaryfile_writeoperation.secretProvenance; the owning operation validates the exact selection
and scope, strip private metadata, and persist, import, or propagate it at the owning boundaryoperation.modelInput / operation.secretProvenance, while proven
model-visible external fields use request projection and other external inputs remain unchangedtransformResponse or tool-local helper blanket-sanitizes ordinary third-party results;
only execution-scoped, activated Sim provenance is projected at shared model/log boundaries{{...}} resolution path and a later
persistence/model/log crossing; there is no generic handling for arbitrary filenames,
metadata, provider results, or API payloads{{NAME}} projection, unproven identical public text, nested and serialized
shape handling, unchanged ordinary external inputs, malformed/incomplete metadata, headerless
legacy requests, metadata stripping, and durable legacy/stale/scope cases when applicableTreat a missing or bypassed model, durable, or internal-execution provenance boundary as critical. Do not fix it with a tool-specific string replacer or by sanitizing every provider result; repair the shared request, in-process operation, persistence, or re-entry boundary that owns the data.
This is the most important validation — the block must be perfectly aligned with every tool it references.
For each tool in tools.access:
tools.config.tool function correctly maps to it)accessToken) has a corresponding subBlock input that is:condition)required: true (or conditionally required)id is unique (duplicates collide silently; the last definition wins). blocks.test.ts fails a duplicate within one condition unless the copies are a basic/advanced mode-swap pair, one basic plus trigger-mode copies, or all carry canonicalParamId. The only sanctioned cross-condition reuse is the hosted-key apiKey pair (add-hosted-key skill)tools.config.tool function returns the correct tool ID for every possible operation valuecanonicalParamId) is named exactly after the tool param it fills. A required user-only param that is only renamed in tools.config.params fails bun run apps/sim/scripts/check-block-registry.ts origin/staging; remap only optional or user-or-llm paramstools.access{ field: 'operation', value: 'x_create_tweet' }{ field: 'operation', value: ['x_create_tweet', 'x_delete_tweet'] }{ field: 'operation', value: 'delete', not: true }{ field: 'op', value: 'send', and: { field: 'type', value: 'dm' } }dependsOn is set for fields that need other values (selectors depending on credential, cascading dropdowns)dropdownshort-inputlong-inputswitch (a Yes/No dropdown only when the tool needs a third "unset" state)oauth-input with correct serviceIdvalue: () => 'default' is set for dropdowns with a sensible defaultshort-input, long-input, code, and selector subBlock has a placeholder — including
password fields (Enter your API key). Formatted values show the shape
(2023-01-01T00:00:00Z); optional fields with a server default name it. See add-integration → Step 3mode: 'advanced':mode: 'advanced'mode: 'advanced'wandConfig with generationType: 'timestamp'wandConfig with a descriptive promptwandConfig with format examples in the promptwandConfig prompts end with an explicit Return ONLY the <format> instruction so the generated value can be pasted directly into the fieldwandConfig.placeholder describes what to type in natural languagetools.access lists every tool ID the block can use — none missingtools.config.tool returns the correct tool ID for each operationtools.config.params (runs at execution time), NOT in tools.config.tool (runs at serialization time before variable resolution — coercing there destroys dynamic references like <Block.output>)tools.config.params handles:Number() conversion for numeric params that come as strings from inputsBoolean / string-to-boolean conversion for toggle paramsundefined conversion for optional dropdown valuesuser-or-llm params'string', 'number', 'boolean', 'json', 'file', 'file[]')type: 'json' outputs describe inner fields in the description string: 'User profile (id, name, username, bio)' or '[{address, status, type}]' for arraysproperties: {...} field on block outputs. Block-level OutputFieldDefinition (from @sim/workflow-types/blocks) only accepts { type, description?, condition?, hiddenFromDisplay? }. Nested properties is a tool-level construct (OutputProperty) — adding it to a block output will fail TypeScript at build timetype: 'json' with vague descriptions like 'Response data'condition if supported, or document which operations return themtype is snake_case (e.g., 'x', 'cloudflare')name is human-readable (e.g., 'X', 'Cloudflare')description is a concise one-linerlongDescription provides detail for docsdocsLink points to 'https://docs.sim.ai/integrations/{service}'category is 'tools'bgColor uses the service's brand color hexicon references the correct icon component from @/components/iconsauthMode is set correctly (AuthMode.OAuth or AuthMode.ApiKey)blocks/registry-maps.ts (BLOCK_REGISTRY / BLOCK_META_REGISTRY) alphabetically{Service}BlockMeta is exported in the same file as the blockicon, title, prompt, modules, category, and tagsalsoIntegrations is set on any template whose prompt references another serviceskills present (3–5 mainstream, 2–3 niche), each grounded in tools.access — flag any skill implying an unsupported actionname (≤64 chars, unique), a one-line description, and markdown content with # Title + ## Steps + an output/guidance sectioninputs section lists all subBlock params that the block acceptscanonicalParamId, inputs list the canonical ID (not the raw subBlock IDs)selectorKey is classified in the browser-safe manifest and has exactly one
server attachmentdependsOn context and matches list/search/detail,
pagination, scope, and stale-time behavior{{KEY}} references remain unresolved in the browserfixed, credential-bound, or explicitly reviewed
user-controlled destination policyScopes are centralized — the single source of truth is OAUTH_PROVIDERS in lib/oauth/oauth.ts.
lib/oauth/oauth.ts under OAUTH_PROVIDERS[provider].services[service].scopeslib/auth/connectors/providers.ts (buildConnectorProviders) uses getCanonicalScopesForProvider(providerId) — NOT a hardcoded arrayrequiredScopes uses getScopesForService(serviceId) — NOT a hardcoded arraylib/auth/connectors/providers.ts or block files (should all use utility functions)SCOPE_DESCRIPTIONS within lib/oauth/utils.tsThe deployment UI and setup CLI do not infer OAuth client fields from scopes. They resolve the
block's generated oauthServiceId through the shared deployment capability catalog.
oauth-input.serviceIdresolveOAuthClientCapabilityId(serviceId) returns the intended provider capabilityOAUTH_CLIENT_CAPABILITIESapps/sim/lib/core/config/env.tstext or secret entry in OAUTH_CLIENT_SETUP_FIELDS; no CLI naming heuristic is requirednpx sim-setup add integration <capabilityId> is the command emitted by availability; the CLI has only the exhaustive input-mode projection, not a second runtime provider definitionserviceAccountProviderId,
the generated SERVICE_ACCOUNT_PROVIDER_BY_OAUTH_SERVICE_ID[serviceId] has the same provider IDdeploymentRequirement matches how that credential actually works:
omitted for an independent path, 'oauth-client' when it needs the OAuth client fields, or
'preview-gated' when controlled by a preview blockTreat a missing capability as critical: runtime availability intentionally throws instead of silently exposing an unusable integration.
If any tools support pagination:
pagination_token vs next_token vs cursor)nextToken, cursor, etc.) are included in tool outputsmode: 'advanced'If any tool lists, searches, exports, imports, downloads, uploads, paginates, batches, transforms arrays, or reads file/HTTP bodies, read .agents/skills/memory-load-check/SKILL.md and apply it to the integration.
Promise.all fan-outscreateInternalToolFileResult / createInternalToolFilesResult
before JSON serialization; external raw downloads explicitly use request.responseType: 'binary'
and return a buffered output.file. Provider base64 JSON needs separate handlingUserFile identity/access fields, and tests cover a >10 MiB file
crossing executor admission without another upload. New file outputs contain references only,
without inline content aliases; preserve legacy versions when removing existing inline fieldstransformResponse, URL
descriptors, export operations, and old/new block versions; checking download-named tools alone
misses late reads that occur after the first response admissionToolResponseContext.signal through every fetch/readUserFile outputs; nested message attachment
aliases reference the same stored files, with no duplicate upload or raw bytes left behindtransformResponse checks for error conditions before accessing dataresponse.ok or status codes)Group findings by severity:
Critical (will cause runtime errors or incorrect behavior):
required flagtools.accesslib/auth/connectors/providers.ts that tools needserviceId missing from the deployment capability catalogtools.config.tool returning wrong tool ID for an operationtools.config.tool instead of tools.config.paramsNULL dataWarning (follows conventions incorrectly or has usability issues):
mode: 'advanced'wandConfig on timestamp/complex fieldsvisibility on params (e.g., 'hidden' instead of 'user-or-llm')optional: true on nullable outputstype: 'json' without property descriptions.trim() on ID fields in request URLs?? null on nullable response fieldsgetScopesForService() / getCanonicalScopesForProvider()SCOPE_DESCRIPTIONS within lib/oauth/utils.tsSuggestion (minor improvements):
longDescription or docsLinkwandConfigAfter reporting, fix every critical and warning issue. Apply suggestions where they don't add unnecessary complexity.
Several files are generated from tool and block definitions. Editing a tool or block WITHOUT regenerating them fails CI, so run these before pushing:
bun run tool-metadata:generate # repo root — apps/sim/tools/generated/*
bun run scripts/generate-docs.ts # docs .mdx + deployment-config/integrations.json + docs icons
bun run deployment-config:generate # canonical OAuth registry + catalog → provider-ID facts
bun run integration-catalog:check # registry ↔ committed deployment metadata drift
bun run docs:check # committed docs ↔ what the generator renders today
bun run deployment-config:check # OAuth registry/catalog ↔ provider-ID fact drift
bun run check:audits # every audit CI enforces, including docs:check
bun run apps/sim/scripts/check-block-registry.ts origin/staging # block ↔ tool param coverage (CI, not in check:audits)tool-metadata:generate — required whenever a tool's outputs, params, or descriptions change. CI enforces this with bun run tool-metadata:check, which fails with "Generated tool metadata is stale". This is the easiest gate to miss, because nothing in the tool file hints that a generated artifact mirrors it.generate-docs — required whenever block metadata changes (bgColor, name, description, operations, outputs). Regenerates the integration .mdx, packages/deployment-config/src/integrations.json, and the docs copy of components/icons.tsx.deployment-config:generate — required for OAuth or service-account changes. Regenerates provider-ID facts from the canonical OAuth registry and integration catalog; special deployment requirements remain handwritten policy.integration-catalog:check — loads the executable block registry, derives visible integration
deployment fields, and compares them with the committed catalog. It catches missing/unexpected
entries and stale auth/service IDs without loading the executable registry in client code.docs:check — check mode of generate-docs.ts: renders every generated docs artifact in
memory and fails listing any committed file that differs. Runs in CI via check:audits.Always diff the regen output before committing — but commit all of it. These generators rewrite
every file they own, so they also true up drift that accumulated on the base branch (pages whose
source changed without a regen). That catch-up is correct output, not a regression: docs:check
fails CI on any page left stale, so reverting swept-in hunks with git checkout -- reintroduces the
failure. Review the diff to confirm each hunk is explained by a real source change (yours or an
upstream PR that skipped regeneration), and investigate anything that looks like content loss — a
page losing a section usually means its source block moved or a generator input broke, not that the
hunk should be reverted.
The integration's page must carry a {/* MANUAL-CONTENT-START:intro */} section directly under
<BlockInfoCard />. If it is missing, write one using the template in add-integration → Step 8, and
check an existing intro against what the block actually ships (no removed or unshipped operations).
If an icon changed, apps/sim/components/icons.tsx is the source of truth and apps/docs/components/icons.tsx is its generated mirror — they must end up byte-identical for that component.
After fixing, confirm:
bun run lint passes with no fixes neededbun run integration-catalog:check passesbun run docs:check passesbun run apps/sim/scripts/check-block-registry.ts origin/staging passesbun run deployment-config:check passesbun run --cwd apps/sim test lib/integrations/availability.server.test.ts passesplaceholderSCOPE_DESCRIPTIONS within lib/oauth/utils.ts for all scopesserviceId resolves to the intended OAUTH_CLIENT_CAPABILITIES entry and all capability fields exist in the env schema.agents/skills/memory-load-check/SKILL.md when tools list/search/download/import/export/batch data{Service}BlockMeta exported with at least 7 templatesselectors.execute boundarybun run tool-metadata:generate if any tool outputs/params changed, and confirmed bun run tool-metadata:check passesbun run scripts/generate-docs.ts if any block metadata changed, and committed the full generated diff — including stale-page catch-up for other integrations (bun run docs:check fails CI on reverted generator output)MANUAL-CONTENT-START:intro sectionbun run lint after fixes© 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/validate-integration of simstudioai/sim.
Open the folder on GitHubat commit 546d4e7
Validate Integration 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 |
|---|---|---|---|---|---|---|
| Validate Integration this skillsimstudioai/sim | 30k | — | ~8.7k | Automated safety check: Pass | Apache-2.0 | |
| Diagram Designcathrynlavery/diagram-design | 44k | 1 repos | ~7.5k | Automated safety check: Pass | MIT | |
| Simple Englishmoeru-ai/airi | 50k | 2 repos | ~4.6k | Automated safety check: Pass | MIT | |
| Get API Docs with chubandrewyng/context-hub | 14k | 2 repos | ~775 | Automated safety check: Pass | MIT | |
| Doc SyncJetBrains/ideavim | 10k | 2 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Mailspring App ScreenshotsFoundry376/Mailspring | 18k | — | ~1.4k | Automated safety check: Pass | GPL-3.0 |
cathrynlavery/diagram-design
Creates branded diagrams, from architecture, flowchart and sequence to charts and maps, as self-contained HTML with inline SVG, with import from draw.io, Mermaid and Excalidraw.
moeru-ai/airi
Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.
andrewyng/context-hub
Fetches current documentation for third-party APIs and SDKs with the chub CLI before the agent writes code against them, instead of relying on remembered API shapes.
JetBrains/ideavim
Keeps IdeaVim documentation in sync with code changes. An agent skill from JetBrains/ideavim.
Foundry376/Mailspring
Captures screenshots of the running Mailspring dev app for docs, PRs or visual checks by launching it with a debugging port, driving the UI and clipping to an element.
Agents365-ai/drawio-skill
Creates and edits editable draw.io diagrams from descriptions, code, infrastructure files, SQL and API schemas, with sync, review, test and export tools.
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
Validate an existing Sim integration (tools, block, registry, and resolved-secret/model-input boundaries) against the service's API docs and Sim execution conventions. Validate Integration is an agent skill from simstudioai/sim.
Validate Integration fits situations like: tasks that involve Technical documentation.
Run `npx skills add simstudioai/sim --skill validate-integration -a claude-code`. Or copy the skill folder (.agents/skills/validate-integration in simstudioai/sim) into .claude/skills/validate-integration in your project. Claude Code loads it when a task matches its description.
Run `npx skills add simstudioai/sim --skill validate-integration -a codex`. Or copy the skill folder (.agents/skills/validate-integration in simstudioai/sim) into .agents/skills/validate-integration 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 validate-integration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/validate-integration, .gemini/skills/validate-integration, .github/skills/validate-integration and .opencode/skills/validate-integration in your project.
Going by SKILL.md and its folder, Validate Integration needs the command-line tools its instructions call (bun, npx and git).
SKILL.md names 2 domains. In commands or code: docs.sim.ai; the agent is likely to contact it when it follows the instructions. As links in the text: api.service.com. 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.
Validate Integration 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 8.7k tokens (SKILL.md is roughly 35k 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 Validate Integration: Diagram Design (cathrynlavery/diagram-design, 44k stars), Simple English (moeru-ai/airi, 50k stars), Get API Docs with chub (andrewyng/context-hub, 14k stars) and Doc Sync (JetBrains/ideavim, 10k 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.