Creator · simstudioai
Last updated · Sep 3, 2026
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. Use when adding a per-row table enrichment that fills cells via existing Sim tools.
Creator · simstudioai
Last updated · Sep 3, 2026
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. Use when adding a per-row table enrichment that fills cells via existing Sim tools.
Creator · simstudioai
Last updated · Sep 3, 2026
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. Use when adding a per-row table enrichment that fills cells via existing Sim tools.
Creator · simstudioai
Last updated · Sep 3, 2026
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. Use when adding a per-row table enrichment that fills cells via existing Sim tools.
Sandbox only
Install targets
Codex install prompt
Install the "add-enrichment" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/add-enrichment. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: 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. Use when adding a per-row table enrichment that fills cells via existing Sim tools. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"simstudioai-add-enrichment","task":"Install add-enrichment","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Code review, repo analysis, testing, CI, GitHub, DevOps, and developer workflow skills.
Scenario
Coding agents
I need a coding agent that can understand a repository, edit code, and review pull requests.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add simstudioai/sim --skill add-enrichment
Maintenance
fresh
3d since push
Risk
Needs review
Permission surface may require sandboxing
GitHub quality
30K
91/100 Quality · 82/100 Trust
Coverage tags
Review notes
Permission surface may require sandboxing · Quality score needs review
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
ExcellentHigh-confidence pick with strong adoption and healthy maintenance signals.
Trust
Sandbox onlyUseful candidate with missing or mixed trust signals. Keep it in an isolated workspace until the outcome loop proves task fit.
Audit
Needs reviewA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Run only in a sandbox and compare close alternatives before using it for real work.
Stars
30K GitHub stars
Repo activity
30K stars, 3.8K forks
Maintenance
3d since push
License
Apache-2.0
Install
npx skills add simstudioai/sim --skill add-enrichment
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add simstudioai/sim --skill add-enrichmentDo not use when
Alternative
168.6K Stars
npx skills add mattpocock/skills --skill code-review
Alternative
40.8K Stars
npx skills add appsmithorg/appsmith
Alternative
175.7K Stars
npx skills add mattpocock/skills --skill implement
Alternative
30.9K Stars
npx skills add vercel-labs/agent-skills --skill vercel-react-best-practices
Agent safety v2
Sparse or mixed signals. Useful for discovery, but not for autonomous installation.
Test manually in an isolated workspace and compare against safer alternatives.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
high
Skill metadata references credentials, tokens, environment variables, or secret-bearing workflows.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/simstudioai-add-enrichment/install
Agent should check
Copy prompt
Task: Use add-enrichment in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/simstudioai-add-enrichment/install
Install command: npx skills add simstudioai/sim --skill add-enrichment
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/simstudioai-add-enrichment/install
LLM text format
/api/skills/simstudioai-add-enrichment/install?format=text
Find alternatives
/api/skills/search?q=add-enrichment&limit=3
Agent prompt
Use add-enrichment for this task. Review https://www.openagentskill.com/api/skills/simstudioai-add-enrichment/install, then install with: npx skills add simstudioai/sim --skill add-enrichmentRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/simstudioai-add-enrichment
LLM text
/api/registry/manifest/simstudioai-add-enrichment?format=text
Install alias
/api/registry/install/simstudioai-add-enrichment
Recommend
/api/registry/recommend?task=Use%20add-enrichment%20in%20an%20agent%20workflow&limit=3
Agent fit
Workflow automation
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Use this as a leading candidate, then validate the README and install path in your own agent stack.
Role in stack
Primary pick
Primary fit
Workflow automation
Trust label
Production-ready
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Useful candidate with missing or mixed trust signals. Keep it in an isolated workspace until the outcome loop proves task fit.
GitHub adoption
PASS30K GitHub stars
Stars/forks activity
PASS30K stars, 3.8K forks; issue activity unavailable in current metadata
Recent maintenance
PASS3d since push
License clarity
PASSApache-2.0
Good signals
Review before install
Recommended action
Run only in a sandbox and compare close alternatives before using it for real work.
Quality profile
High-confidence pick with strong adoption and healthy maintenance signals.
Workflow fit
Automate repeated work
I need my agent to automate a repeated workflow across tools and files.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Operate web apps
I need my agent to control a browser, fill forms, and verify web app workflows.
Workflow fit
Turn skills into distribution
A workflow for turning newly indexed skills into SEO briefs, social drafts, comparison pages, and reusable publishing workflows.
Operate and verify web apps
A workflow for agents that navigate products, fill forms, take screenshots, and verify real user flows across web applications.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Alternative shortlist
Similar skills that may fit this task.
Review a branch or diff against repository standards and the originating spec in two independent analysis passes.
Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
Implement work from an approved spec or ticket set, run focused and full tests, invoke code review, and commit the result to the current branch.
React and Next.js performance guidance for writing, reviewing, and refactoring production UI code.
--- name: add-enrichment description: 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. Use when adding a per-row table enrichment that fills cells via existing Sim tools. argument-hint: <enrichment-name> ---
# Adding a Table Enrichment
Enrichments are code-defined entries in `apps/sim/enrichments/` that run **directly per table row** (no workflow). Each enrichment declares inputs, outputs, and an ordered list of **providers**; the cascade runner tries providers in order and the first non-empty result fills the cell. Each provider calls one existing Sim tool via `executeTool`, which injects the workspace's BYOK key or a **hosted key** and bills usage automatically.
Because enrichments run on Sim's hosted keys by default, **every provider tool you reference must have hosted-key support** — otherwise it can only run when the workspace brings its own key. This command makes that check a required step.
## Overview
| Step | What | Where | |------|------|-------| | 1 | Pick the data-source tool(s) for each output | `tools/{service}/` + `tools/registry.ts` | | 2 | **Verify each tool has `hosting`; if not, run `/add-hosted-key`** | `tools/{service}/{action}.ts` | | 3 | Write the enrichment definition | `enrichments/{name}/{name}.ts` + `index.ts` | | 4 | Register it | `enrichments/registry.ts` | | 5 | Verify | tsc / biome / manual run |
## Architecture (what you're plugging into)
- **`enrichments/types.ts`** — `EnrichmentConfig { id, name, description, icon, inputs, outputs, providers }` and `EnrichmentProvider { id, label, toolId, buildParams, projectFailure, mapOutput }` — `toolProvider` fills `projectFailure` with the standard HTTP projection; override it only for a provider whose failure shape is nonstandard (see `enrichments/provider-failures/`). Providers are **plain data** (no `@/tools` import) so the catalog stays client-safe. - **`enrichments/providers.ts`** — `toolProvider(...)` (typed passthrough) plus shared input helpers: `str(v)`, `normalizeDomain(v)`, `firstNonEmpty(arr)`, `splitName(fullName)`, and `projectEnrichmentProviderFailure`. - **`enrichments/run.ts`** — the server-only cascade runner. Calls `executeTool(provider.toolId, { ...params, _context: { workspaceId, userId } })`, accumulates hosted-key cost, returns the first non-empty mapped result. **You do not edit this** — it works for any registry entry. - **`enrichments/registry.ts`** — `ENRICHMENT_REGISTRY` / `ALL_ENRICHMENTS` / `getEnrichment`. Register new entries here.
Outputs automatically become table columns; billing, the catalog/sidebar UI, the column meta-header icon, and per-row execution all work with no extra wiring.
## Step 1: Pick the data-source tool(s)
For each output the enrichment produces, decide which existing tool provides it. Look up the service's API and the tool in `apps/sim/tools/{service}/` (e.g. `hunter_email_finder`, `pdl_person_enrich`, `pdl_company_enrich`). Confirm:
- The tool id is registered in `apps/sim/tools/registry.ts`. - Its `params` accept what you can derive from table columns (read the tool's `params`). - Its `outputs` / `transformResponse` actually expose the field you need (read the real output shape — don't assume).
Order providers **cheapest / most-likely-to-hit first**; the cascade stops at the first non-empty result. Apollo / LinkedIn are not hosted-safe (ToS) — don't use them.
## Step 2: Verify hosted-key support — chain to `/add-hosted-key` if missing
**This is the required gate.** For every tool a provider calls, open `apps/sim/tools/{service}/{action}.ts` and check for a `hosting` block:
```typescript hosting: { envKeyPrefix: 'SERVICE_API_KEY', apiKeyParam: 'apiKey', byokProviderId: 'service', pricing: { /* ... */ }, rateLimit: { /* ... */ }, } ```
- **If `hosting` is present** — good. Note the `envKeyPrefix`; the deployment needs `{PREFIX}_COUNT` + `{PREFIX}_1..N` env vars set for the hosted key to actually resolve at runtime (ops concern, not code). If those env vars aren't set in the target environment, the provider will only run with a workspace BYOK key. - **If `hosting` is absent** — the tool can't use a Sim-provided key, so the enrichment would silently produce blank cells on hosted Sim. **Stop and run `/add-hosted-key <service>`** to add hosted-key support to that tool first, then come back. Do this for every provider tool that lacks it.
Why it matters: the cascade runner only bills (and only reads `output.cost.total`) when `executeTool` injected a hosted key, which requires the tool's `hosting` config. No `hosting` → no hosted key → the enrichment depends entirely on per-workspace BYOK.
## Step 3: Write the enrichment definition
Create `apps/sim/enrichments/{name}/{name}.ts` and a barrel `index.ts`. Mirror the entries registered in `enrichments/registry.ts`.
```typescript import { SomeIcon } from '@sim/emcn/icons' import { filterUndefined } from '@sim/utils/object' import { normalizeDomain, splitName, str, toolProvider } from '@/enrichments/providers' import type { EnrichmentConfig } from '@/enrichments/types'
export const myEnrichment: EnrichmentConfig = { id: 'my-enrichment', name: 'My Enrichment', description: 'One concise sentence describing what it finds.', icon: SomeIcon, inputs: [ // Person enrichments take a single canonical `fullName` (Clay-style); // split it with splitName() for tools that need first/last. { id: 'fullName', name: 'Full name', type: 'string', required: true }, { id: 'companyDomain', name: 'Company domain', type: 'string' }, ], outputs: [{ id: 'value', name: 'value', type: 'string' }], providers: [ toolProvider({ id: 'provider-a', label: 'Provider A', toolId: 'service_action', // must have `hosting` (Step 2) buildParams: (inputs) => { // Return null when there aren't enough inputs → cascade skips this provider. const name = splitName(inputs.fullName) const domain = normalizeDomain(inputs.companyDomain) if (!name || !domain) return null return { domain, first_name: name.firstName, last_name: name.lastName } }, mapOutput: (output) => { // Return { [outputId]: value } on a hit, or null to fall through. const value = str(output.value) return value ? { value } : null }, }), // ...additional fallback providers, in priority order. ], } ```
```typescript // apps/sim/enrichments/{name}/index.ts export { myEnrichment } from './my-enrichment' ```
Rules: - Keep the file **client-safe**: import only `@sim/emcn/icons`, `@sim/utils/*`, `@/enrichments/providers`, and the types. **Never import `@/tools`** here — the runner does the tool call. - `buildParams` returns `null` when inputs are insufficient (provider skipped). `mapOutput` returns `null`/empty for a miss (falls through). Use `filterUndefined` when assembling optional tool params; coerce numbers explicitly (don't pass `''` to number outputs). - Output `id`s are the keys `mapOutput` returns; output `name`s are the default column names (the user can rename them in the config).
## Step 4: Register it
In `apps/sim/enrichments/registry.ts`, import and add the entry (catalog order is registration order):
```typescript import { myEnrichment } from '@/enrichments/my-enrichment'
export const ENRICHMENT_REGISTRY: EnrichmentRegistry = { // ...existing [myEnrichment.id]: myEnrichment, } ```
## Step 5: Verify
1. `bun run type-check` (from `apps/sim`) and `bunx biome check` on the changed files. 2. In a table → **+ New column → Enrichments** → pick the new enrichment, map its inputs to columns, name the output column(s), Save. Confirm it appears in the catalog with its icon/description. 3. With hosted keys (or a workspace BYOK key) configured for each provider's service, run a row and confirm the cell fills; the dev-server log shows `Enrichment hit { provider }`. A row whose providers all miss completes blank; a row where every provider errored shows an error cell.
## Checklist
- [ ] Each output mapped to a real tool field (verified against the tool's `params`/`outputs`) - [ ] **Every provider tool has a `hosting` block — ran `/add-hosted-key` for any that didn't** - [ ] Providers ordered cheapest / most-likely-first; Apollo/LinkedIn not used - [ ] Enrichment file is client-safe (no `@/tools` import); uses `toolProvider` + shared helpers - [ ] `buildParams` returns `null` on insufficient inputs; `mapOutput` returns `null` on a miss - [ ] Registered in `enrichments/registry.ts` - [ ] tsc + biome clean; created and ran the column end-to-end
Source provenance
Decision snapshot
29,529 GitHub stars
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for add-enrichment, ready for a manual X post.
A practical pick for the next repo task: add-enrichment: Add a code-defined table enrichment (registry entry) under `apps/sim/enrichments/` backed by an ordered provider cascade, e... 29.5K stars https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=x
Listing + install path for add-enrichment: https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=x Install: npx skills add simstudioai/sim --skill add-enrichment
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to simstudioai but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment/audit)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)simstudioai
@simstudioai
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Sandbox only
Code Review
Review a branch or diff against repository standards and the originating spec in two independent analysis passes.
168.6K StarsAppsmith
Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
40.8K StarsImplement
Implement work from an approved spec or ticket set, run focused and full tests, invoke code review, and commit the result to the current branch.
175.7K StarsVercel React Best Practices
React and Next.js performance guidance for writing, reviewing, and refactoring production UI code.
30.9K StarsSandbox only
Install targets
Codex install prompt
Install the "add-enrichment" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/add-enrichment. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: 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. Use when adding a per-row table enrichment that fills cells via existing Sim tools. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"simstudioai-add-enrichment","task":"Install add-enrichment","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Code review, repo analysis, testing, CI, GitHub, DevOps, and developer workflow skills.
Scenario
Coding agents
I need a coding agent that can understand a repository, edit code, and review pull requests.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add simstudioai/sim --skill add-enrichment
Maintenance
fresh
3d since push
Risk
Needs review
Permission surface may require sandboxing
GitHub quality
30K
91/100 Quality · 82/100 Trust
Coverage tags
Review notes
Permission surface may require sandboxing · Quality score needs review
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
ExcellentHigh-confidence pick with strong adoption and healthy maintenance signals.
Trust
Sandbox onlyUseful candidate with missing or mixed trust signals. Keep it in an isolated workspace until the outcome loop proves task fit.
Audit
Needs reviewA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Run only in a sandbox and compare close alternatives before using it for real work.
Stars
30K GitHub stars
Repo activity
30K stars, 3.8K forks
Maintenance
3d since push
License
Apache-2.0
Install
npx skills add simstudioai/sim --skill add-enrichment
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add simstudioai/sim --skill add-enrichmentDo not use when
Alternative
168.6K Stars
npx skills add mattpocock/skills --skill code-review
Alternative
40.8K Stars
npx skills add appsmithorg/appsmith
Alternative
175.7K Stars
npx skills add mattpocock/skills --skill implement
Alternative
30.9K Stars
npx skills add vercel-labs/agent-skills --skill vercel-react-best-practices
Agent safety v2
Sparse or mixed signals. Useful for discovery, but not for autonomous installation.
Test manually in an isolated workspace and compare against safer alternatives.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
high
Skill metadata references credentials, tokens, environment variables, or secret-bearing workflows.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/simstudioai-add-enrichment/install
Agent should check
Copy prompt
Task: Use add-enrichment in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/simstudioai-add-enrichment/install
Install command: npx skills add simstudioai/sim --skill add-enrichment
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/simstudioai-add-enrichment/install
LLM text format
/api/skills/simstudioai-add-enrichment/install?format=text
Find alternatives
/api/skills/search?q=add-enrichment&limit=3
Agent prompt
Use add-enrichment for this task. Review https://www.openagentskill.com/api/skills/simstudioai-add-enrichment/install, then install with: npx skills add simstudioai/sim --skill add-enrichmentRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/simstudioai-add-enrichment
LLM text
/api/registry/manifest/simstudioai-add-enrichment?format=text
Install alias
/api/registry/install/simstudioai-add-enrichment
Recommend
/api/registry/recommend?task=Use%20add-enrichment%20in%20an%20agent%20workflow&limit=3
Agent fit
Workflow automation
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Use this as a leading candidate, then validate the README and install path in your own agent stack.
Role in stack
Primary pick
Primary fit
Workflow automation
Trust label
Production-ready
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Useful candidate with missing or mixed trust signals. Keep it in an isolated workspace until the outcome loop proves task fit.
GitHub adoption
PASS30K GitHub stars
Stars/forks activity
PASS30K stars, 3.8K forks; issue activity unavailable in current metadata
Recent maintenance
PASS3d since push
License clarity
PASSApache-2.0
Good signals
Review before install
Recommended action
Run only in a sandbox and compare close alternatives before using it for real work.
Quality profile
High-confidence pick with strong adoption and healthy maintenance signals.
Workflow fit
Automate repeated work
I need my agent to automate a repeated workflow across tools and files.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Operate web apps
I need my agent to control a browser, fill forms, and verify web app workflows.
Workflow fit
Turn skills into distribution
A workflow for turning newly indexed skills into SEO briefs, social drafts, comparison pages, and reusable publishing workflows.
Operate and verify web apps
A workflow for agents that navigate products, fill forms, take screenshots, and verify real user flows across web applications.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Alternative shortlist
Similar skills that may fit this task.
Review a branch or diff against repository standards and the originating spec in two independent analysis passes.
Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
Implement work from an approved spec or ticket set, run focused and full tests, invoke code review, and commit the result to the current branch.
React and Next.js performance guidance for writing, reviewing, and refactoring production UI code.
--- name: add-enrichment description: 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. Use when adding a per-row table enrichment that fills cells via existing Sim tools. argument-hint: <enrichment-name> ---
# Adding a Table Enrichment
Enrichments are code-defined entries in `apps/sim/enrichments/` that run **directly per table row** (no workflow). Each enrichment declares inputs, outputs, and an ordered list of **providers**; the cascade runner tries providers in order and the first non-empty result fills the cell. Each provider calls one existing Sim tool via `executeTool`, which injects the workspace's BYOK key or a **hosted key** and bills usage automatically.
Because enrichments run on Sim's hosted keys by default, **every provider tool you reference must have hosted-key support** — otherwise it can only run when the workspace brings its own key. This command makes that check a required step.
## Overview
| Step | What | Where | |------|------|-------| | 1 | Pick the data-source tool(s) for each output | `tools/{service}/` + `tools/registry.ts` | | 2 | **Verify each tool has `hosting`; if not, run `/add-hosted-key`** | `tools/{service}/{action}.ts` | | 3 | Write the enrichment definition | `enrichments/{name}/{name}.ts` + `index.ts` | | 4 | Register it | `enrichments/registry.ts` | | 5 | Verify | tsc / biome / manual run |
## Architecture (what you're plugging into)
- **`enrichments/types.ts`** — `EnrichmentConfig { id, name, description, icon, inputs, outputs, providers }` and `EnrichmentProvider { id, label, toolId, buildParams, projectFailure, mapOutput }` — `toolProvider` fills `projectFailure` with the standard HTTP projection; override it only for a provider whose failure shape is nonstandard (see `enrichments/provider-failures/`). Providers are **plain data** (no `@/tools` import) so the catalog stays client-safe. - **`enrichments/providers.ts`** — `toolProvider(...)` (typed passthrough) plus shared input helpers: `str(v)`, `normalizeDomain(v)`, `firstNonEmpty(arr)`, `splitName(fullName)`, and `projectEnrichmentProviderFailure`. - **`enrichments/run.ts`** — the server-only cascade runner. Calls `executeTool(provider.toolId, { ...params, _context: { workspaceId, userId } })`, accumulates hosted-key cost, returns the first non-empty mapped result. **You do not edit this** — it works for any registry entry. - **`enrichments/registry.ts`** — `ENRICHMENT_REGISTRY` / `ALL_ENRICHMENTS` / `getEnrichment`. Register new entries here.
Outputs automatically become table columns; billing, the catalog/sidebar UI, the column meta-header icon, and per-row execution all work with no extra wiring.
## Step 1: Pick the data-source tool(s)
For each output the enrichment produces, decide which existing tool provides it. Look up the service's API and the tool in `apps/sim/tools/{service}/` (e.g. `hunter_email_finder`, `pdl_person_enrich`, `pdl_company_enrich`). Confirm:
- The tool id is registered in `apps/sim/tools/registry.ts`. - Its `params` accept what you can derive from table columns (read the tool's `params`). - Its `outputs` / `transformResponse` actually expose the field you need (read the real output shape — don't assume).
Order providers **cheapest / most-likely-to-hit first**; the cascade stops at the first non-empty result. Apollo / LinkedIn are not hosted-safe (ToS) — don't use them.
## Step 2: Verify hosted-key support — chain to `/add-hosted-key` if missing
**This is the required gate.** For every tool a provider calls, open `apps/sim/tools/{service}/{action}.ts` and check for a `hosting` block:
```typescript hosting: { envKeyPrefix: 'SERVICE_API_KEY', apiKeyParam: 'apiKey', byokProviderId: 'service', pricing: { /* ... */ }, rateLimit: { /* ... */ }, } ```
- **If `hosting` is present** — good. Note the `envKeyPrefix`; the deployment needs `{PREFIX}_COUNT` + `{PREFIX}_1..N` env vars set for the hosted key to actually resolve at runtime (ops concern, not code). If those env vars aren't set in the target environment, the provider will only run with a workspace BYOK key. - **If `hosting` is absent** — the tool can't use a Sim-provided key, so the enrichment would silently produce blank cells on hosted Sim. **Stop and run `/add-hosted-key <service>`** to add hosted-key support to that tool first, then come back. Do this for every provider tool that lacks it.
Why it matters: the cascade runner only bills (and only reads `output.cost.total`) when `executeTool` injected a hosted key, which requires the tool's `hosting` config. No `hosting` → no hosted key → the enrichment depends entirely on per-workspace BYOK.
## Step 3: Write the enrichment definition
Create `apps/sim/enrichments/{name}/{name}.ts` and a barrel `index.ts`. Mirror the entries registered in `enrichments/registry.ts`.
```typescript import { SomeIcon } from '@sim/emcn/icons' import { filterUndefined } from '@sim/utils/object' import { normalizeDomain, splitName, str, toolProvider } from '@/enrichments/providers' import type { EnrichmentConfig } from '@/enrichments/types'
export const myEnrichment: EnrichmentConfig = { id: 'my-enrichment', name: 'My Enrichment', description: 'One concise sentence describing what it finds.', icon: SomeIcon, inputs: [ // Person enrichments take a single canonical `fullName` (Clay-style); // split it with splitName() for tools that need first/last. { id: 'fullName', name: 'Full name', type: 'string', required: true }, { id: 'companyDomain', name: 'Company domain', type: 'string' }, ], outputs: [{ id: 'value', name: 'value', type: 'string' }], providers: [ toolProvider({ id: 'provider-a', label: 'Provider A', toolId: 'service_action', // must have `hosting` (Step 2) buildParams: (inputs) => { // Return null when there aren't enough inputs → cascade skips this provider. const name = splitName(inputs.fullName) const domain = normalizeDomain(inputs.companyDomain) if (!name || !domain) return null return { domain, first_name: name.firstName, last_name: name.lastName } }, mapOutput: (output) => { // Return { [outputId]: value } on a hit, or null to fall through. const value = str(output.value) return value ? { value } : null }, }), // ...additional fallback providers, in priority order. ], } ```
```typescript // apps/sim/enrichments/{name}/index.ts export { myEnrichment } from './my-enrichment' ```
Rules: - Keep the file **client-safe**: import only `@sim/emcn/icons`, `@sim/utils/*`, `@/enrichments/providers`, and the types. **Never import `@/tools`** here — the runner does the tool call. - `buildParams` returns `null` when inputs are insufficient (provider skipped). `mapOutput` returns `null`/empty for a miss (falls through). Use `filterUndefined` when assembling optional tool params; coerce numbers explicitly (don't pass `''` to number outputs). - Output `id`s are the keys `mapOutput` returns; output `name`s are the default column names (the user can rename them in the config).
## Step 4: Register it
In `apps/sim/enrichments/registry.ts`, import and add the entry (catalog order is registration order):
```typescript import { myEnrichment } from '@/enrichments/my-enrichment'
export const ENRICHMENT_REGISTRY: EnrichmentRegistry = { // ...existing [myEnrichment.id]: myEnrichment, } ```
## Step 5: Verify
1. `bun run type-check` (from `apps/sim`) and `bunx biome check` on the changed files. 2. In a table → **+ New column → Enrichments** → pick the new enrichment, map its inputs to columns, name the output column(s), Save. Confirm it appears in the catalog with its icon/description. 3. With hosted keys (or a workspace BYOK key) configured for each provider's service, run a row and confirm the cell fills; the dev-server log shows `Enrichment hit { provider }`. A row whose providers all miss completes blank; a row where every provider errored shows an error cell.
## Checklist
- [ ] Each output mapped to a real tool field (verified against the tool's `params`/`outputs`) - [ ] **Every provider tool has a `hosting` block — ran `/add-hosted-key` for any that didn't** - [ ] Providers ordered cheapest / most-likely-first; Apollo/LinkedIn not used - [ ] Enrichment file is client-safe (no `@/tools` import); uses `toolProvider` + shared helpers - [ ] `buildParams` returns `null` on insufficient inputs; `mapOutput` returns `null` on a miss - [ ] Registered in `enrichments/registry.ts` - [ ] tsc + biome clean; created and ran the column end-to-end
Source provenance
Decision snapshot
29,529 GitHub stars
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for add-enrichment, ready for a manual X post.
A practical pick for the next repo task: add-enrichment: Add a code-defined table enrichment (registry entry) under `apps/sim/enrichments/` backed by an ordered provider cascade, e... 29.5K stars https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=x
Listing + install path for add-enrichment: https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=x Install: npx skills add simstudioai/sim --skill add-enrichment
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to simstudioai but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment/audit)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)simstudioai
@simstudioai
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Sandbox only
Code Review
Review a branch or diff against repository standards and the originating spec in two independent analysis passes.
168.6K StarsAppsmith
Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
40.8K StarsImplement
Implement work from an approved spec or ticket set, run focused and full tests, invoke code review, and commit the result to the current branch.
175.7K StarsVercel React Best Practices
React and Next.js performance guidance for writing, reviewing, and refactoring production UI code.
30.9K StarsSandbox only
Install targets
Codex install prompt
Install the "add-enrichment" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/add-enrichment. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: 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. Use when adding a per-row table enrichment that fills cells via existing Sim tools. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"simstudioai-add-enrichment","task":"Install add-enrichment","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Code review, repo analysis, testing, CI, GitHub, DevOps, and developer workflow skills.
Scenario
Coding agents
I need a coding agent that can understand a repository, edit code, and review pull requests.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add simstudioai/sim --skill add-enrichment
Maintenance
fresh
3d since push
Risk
Needs review
Permission surface may require sandboxing
GitHub quality
30K
91/100 Quality · 82/100 Trust
Coverage tags
Review notes
Permission surface may require sandboxing · Quality score needs review
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
ExcellentHigh-confidence pick with strong adoption and healthy maintenance signals.
Trust
Sandbox onlyUseful candidate with missing or mixed trust signals. Keep it in an isolated workspace until the outcome loop proves task fit.
Audit
Needs reviewA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Run only in a sandbox and compare close alternatives before using it for real work.
Stars
30K GitHub stars
Repo activity
30K stars, 3.8K forks
Maintenance
3d since push
License
Apache-2.0
Install
npx skills add simstudioai/sim --skill add-enrichment
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add simstudioai/sim --skill add-enrichmentDo not use when
Alternative
168.6K Stars
npx skills add mattpocock/skills --skill code-review
Alternative
40.8K Stars
npx skills add appsmithorg/appsmith
Alternative
175.7K Stars
npx skills add mattpocock/skills --skill implement
Alternative
30.9K Stars
npx skills add vercel-labs/agent-skills --skill vercel-react-best-practices
Agent safety v2
Sparse or mixed signals. Useful for discovery, but not for autonomous installation.
Test manually in an isolated workspace and compare against safer alternatives.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
high
Skill metadata references credentials, tokens, environment variables, or secret-bearing workflows.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/simstudioai-add-enrichment/install
Agent should check
Copy prompt
Task: Use add-enrichment in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/simstudioai-add-enrichment/install
Install command: npx skills add simstudioai/sim --skill add-enrichment
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/simstudioai-add-enrichment/install
LLM text format
/api/skills/simstudioai-add-enrichment/install?format=text
Find alternatives
/api/skills/search?q=add-enrichment&limit=3
Agent prompt
Use add-enrichment for this task. Review https://www.openagentskill.com/api/skills/simstudioai-add-enrichment/install, then install with: npx skills add simstudioai/sim --skill add-enrichmentRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/simstudioai-add-enrichment
LLM text
/api/registry/manifest/simstudioai-add-enrichment?format=text
Install alias
/api/registry/install/simstudioai-add-enrichment
Recommend
/api/registry/recommend?task=Use%20add-enrichment%20in%20an%20agent%20workflow&limit=3
Agent fit
Workflow automation
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Use this as a leading candidate, then validate the README and install path in your own agent stack.
Role in stack
Primary pick
Primary fit
Workflow automation
Trust label
Production-ready
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Useful candidate with missing or mixed trust signals. Keep it in an isolated workspace until the outcome loop proves task fit.
GitHub adoption
PASS30K GitHub stars
Stars/forks activity
PASS30K stars, 3.8K forks; issue activity unavailable in current metadata
Recent maintenance
PASS3d since push
License clarity
PASSApache-2.0
Good signals
Review before install
Recommended action
Run only in a sandbox and compare close alternatives before using it for real work.
Quality profile
High-confidence pick with strong adoption and healthy maintenance signals.
Workflow fit
Automate repeated work
I need my agent to automate a repeated workflow across tools and files.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Operate web apps
I need my agent to control a browser, fill forms, and verify web app workflows.
Workflow fit
Turn skills into distribution
A workflow for turning newly indexed skills into SEO briefs, social drafts, comparison pages, and reusable publishing workflows.
Operate and verify web apps
A workflow for agents that navigate products, fill forms, take screenshots, and verify real user flows across web applications.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Alternative shortlist
Similar skills that may fit this task.
Review a branch or diff against repository standards and the originating spec in two independent analysis passes.
Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
Implement work from an approved spec or ticket set, run focused and full tests, invoke code review, and commit the result to the current branch.
React and Next.js performance guidance for writing, reviewing, and refactoring production UI code.
--- name: add-enrichment description: 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. Use when adding a per-row table enrichment that fills cells via existing Sim tools. argument-hint: <enrichment-name> ---
# Adding a Table Enrichment
Enrichments are code-defined entries in `apps/sim/enrichments/` that run **directly per table row** (no workflow). Each enrichment declares inputs, outputs, and an ordered list of **providers**; the cascade runner tries providers in order and the first non-empty result fills the cell. Each provider calls one existing Sim tool via `executeTool`, which injects the workspace's BYOK key or a **hosted key** and bills usage automatically.
Because enrichments run on Sim's hosted keys by default, **every provider tool you reference must have hosted-key support** — otherwise it can only run when the workspace brings its own key. This command makes that check a required step.
## Overview
| Step | What | Where | |------|------|-------| | 1 | Pick the data-source tool(s) for each output | `tools/{service}/` + `tools/registry.ts` | | 2 | **Verify each tool has `hosting`; if not, run `/add-hosted-key`** | `tools/{service}/{action}.ts` | | 3 | Write the enrichment definition | `enrichments/{name}/{name}.ts` + `index.ts` | | 4 | Register it | `enrichments/registry.ts` | | 5 | Verify | tsc / biome / manual run |
## Architecture (what you're plugging into)
- **`enrichments/types.ts`** — `EnrichmentConfig { id, name, description, icon, inputs, outputs, providers }` and `EnrichmentProvider { id, label, toolId, buildParams, projectFailure, mapOutput }` — `toolProvider` fills `projectFailure` with the standard HTTP projection; override it only for a provider whose failure shape is nonstandard (see `enrichments/provider-failures/`). Providers are **plain data** (no `@/tools` import) so the catalog stays client-safe. - **`enrichments/providers.ts`** — `toolProvider(...)` (typed passthrough) plus shared input helpers: `str(v)`, `normalizeDomain(v)`, `firstNonEmpty(arr)`, `splitName(fullName)`, and `projectEnrichmentProviderFailure`. - **`enrichments/run.ts`** — the server-only cascade runner. Calls `executeTool(provider.toolId, { ...params, _context: { workspaceId, userId } })`, accumulates hosted-key cost, returns the first non-empty mapped result. **You do not edit this** — it works for any registry entry. - **`enrichments/registry.ts`** — `ENRICHMENT_REGISTRY` / `ALL_ENRICHMENTS` / `getEnrichment`. Register new entries here.
Outputs automatically become table columns; billing, the catalog/sidebar UI, the column meta-header icon, and per-row execution all work with no extra wiring.
## Step 1: Pick the data-source tool(s)
For each output the enrichment produces, decide which existing tool provides it. Look up the service's API and the tool in `apps/sim/tools/{service}/` (e.g. `hunter_email_finder`, `pdl_person_enrich`, `pdl_company_enrich`). Confirm:
- The tool id is registered in `apps/sim/tools/registry.ts`. - Its `params` accept what you can derive from table columns (read the tool's `params`). - Its `outputs` / `transformResponse` actually expose the field you need (read the real output shape — don't assume).
Order providers **cheapest / most-likely-to-hit first**; the cascade stops at the first non-empty result. Apollo / LinkedIn are not hosted-safe (ToS) — don't use them.
## Step 2: Verify hosted-key support — chain to `/add-hosted-key` if missing
**This is the required gate.** For every tool a provider calls, open `apps/sim/tools/{service}/{action}.ts` and check for a `hosting` block:
```typescript hosting: { envKeyPrefix: 'SERVICE_API_KEY', apiKeyParam: 'apiKey', byokProviderId: 'service', pricing: { /* ... */ }, rateLimit: { /* ... */ }, } ```
- **If `hosting` is present** — good. Note the `envKeyPrefix`; the deployment needs `{PREFIX}_COUNT` + `{PREFIX}_1..N` env vars set for the hosted key to actually resolve at runtime (ops concern, not code). If those env vars aren't set in the target environment, the provider will only run with a workspace BYOK key. - **If `hosting` is absent** — the tool can't use a Sim-provided key, so the enrichment would silently produce blank cells on hosted Sim. **Stop and run `/add-hosted-key <service>`** to add hosted-key support to that tool first, then come back. Do this for every provider tool that lacks it.
Why it matters: the cascade runner only bills (and only reads `output.cost.total`) when `executeTool` injected a hosted key, which requires the tool's `hosting` config. No `hosting` → no hosted key → the enrichment depends entirely on per-workspace BYOK.
## Step 3: Write the enrichment definition
Create `apps/sim/enrichments/{name}/{name}.ts` and a barrel `index.ts`. Mirror the entries registered in `enrichments/registry.ts`.
```typescript import { SomeIcon } from '@sim/emcn/icons' import { filterUndefined } from '@sim/utils/object' import { normalizeDomain, splitName, str, toolProvider } from '@/enrichments/providers' import type { EnrichmentConfig } from '@/enrichments/types'
export const myEnrichment: EnrichmentConfig = { id: 'my-enrichment', name: 'My Enrichment', description: 'One concise sentence describing what it finds.', icon: SomeIcon, inputs: [ // Person enrichments take a single canonical `fullName` (Clay-style); // split it with splitName() for tools that need first/last. { id: 'fullName', name: 'Full name', type: 'string', required: true }, { id: 'companyDomain', name: 'Company domain', type: 'string' }, ], outputs: [{ id: 'value', name: 'value', type: 'string' }], providers: [ toolProvider({ id: 'provider-a', label: 'Provider A', toolId: 'service_action', // must have `hosting` (Step 2) buildParams: (inputs) => { // Return null when there aren't enough inputs → cascade skips this provider. const name = splitName(inputs.fullName) const domain = normalizeDomain(inputs.companyDomain) if (!name || !domain) return null return { domain, first_name: name.firstName, last_name: name.lastName } }, mapOutput: (output) => { // Return { [outputId]: value } on a hit, or null to fall through. const value = str(output.value) return value ? { value } : null }, }), // ...additional fallback providers, in priority order. ], } ```
```typescript // apps/sim/enrichments/{name}/index.ts export { myEnrichment } from './my-enrichment' ```
Rules: - Keep the file **client-safe**: import only `@sim/emcn/icons`, `@sim/utils/*`, `@/enrichments/providers`, and the types. **Never import `@/tools`** here — the runner does the tool call. - `buildParams` returns `null` when inputs are insufficient (provider skipped). `mapOutput` returns `null`/empty for a miss (falls through). Use `filterUndefined` when assembling optional tool params; coerce numbers explicitly (don't pass `''` to number outputs). - Output `id`s are the keys `mapOutput` returns; output `name`s are the default column names (the user can rename them in the config).
## Step 4: Register it
In `apps/sim/enrichments/registry.ts`, import and add the entry (catalog order is registration order):
```typescript import { myEnrichment } from '@/enrichments/my-enrichment'
export const ENRICHMENT_REGISTRY: EnrichmentRegistry = { // ...existing [myEnrichment.id]: myEnrichment, } ```
## Step 5: Verify
1. `bun run type-check` (from `apps/sim`) and `bunx biome check` on the changed files. 2. In a table → **+ New column → Enrichments** → pick the new enrichment, map its inputs to columns, name the output column(s), Save. Confirm it appears in the catalog with its icon/description. 3. With hosted keys (or a workspace BYOK key) configured for each provider's service, run a row and confirm the cell fills; the dev-server log shows `Enrichment hit { provider }`. A row whose providers all miss completes blank; a row where every provider errored shows an error cell.
## Checklist
- [ ] Each output mapped to a real tool field (verified against the tool's `params`/`outputs`) - [ ] **Every provider tool has a `hosting` block — ran `/add-hosted-key` for any that didn't** - [ ] Providers ordered cheapest / most-likely-first; Apollo/LinkedIn not used - [ ] Enrichment file is client-safe (no `@/tools` import); uses `toolProvider` + shared helpers - [ ] `buildParams` returns `null` on insufficient inputs; `mapOutput` returns `null` on a miss - [ ] Registered in `enrichments/registry.ts` - [ ] tsc + biome clean; created and ran the column end-to-end
Source provenance
Decision snapshot
29,529 GitHub stars
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for add-enrichment, ready for a manual X post.
A practical pick for the next repo task: add-enrichment: Add a code-defined table enrichment (registry entry) under `apps/sim/enrichments/` backed by an ordered provider cascade, e... 29.5K stars https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=x
Listing + install path for add-enrichment: https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=x Install: npx skills add simstudioai/sim --skill add-enrichment
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to simstudioai but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment/audit)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)simstudioai
@simstudioai
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Sandbox only
Code Review
Review a branch or diff against repository standards and the originating spec in two independent analysis passes.
168.6K StarsAppsmith
Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
40.8K StarsImplement
Implement work from an approved spec or ticket set, run focused and full tests, invoke code review, and commit the result to the current branch.
175.7K StarsVercel React Best Practices
React and Next.js performance guidance for writing, reviewing, and refactoring production UI code.
30.9K StarsSandbox only
Install targets
Codex install prompt
Install the "add-enrichment" agent skill from https://github.com/simstudioai/sim/tree/main/.agents/skills/add-enrichment. Read its SKILL.md or equivalent instructions first, install only the files needed for this workspace, and summarize any required setup before using it. Skill purpose: 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. Use when adding a per-row table enrichment that fills cells via existing Sim tools. After the install attempt, report the result to https://www.openagentskill.com/api/agent/outcome with POST JSON {"event_id":"install_<unique-id>","skill_slug":"simstudioai-add-enrichment","task":"Install add-enrichment","agent":"codex","outcome":"success","install_used":true}. Replace event_id with a unique value and outcome with success or failed. Report success only after the skill is installed and a minimal verification passes.Supply asset profile
Code review, repo analysis, testing, CI, GitHub, DevOps, and developer workflow skills.
Scenario
Coding agents
I need a coding agent that can understand a repository, edit code, and review pull requests.
Agent fit
Claude Code + CLI + Codex
Codex, Claude Code, Cursor, CLI, or custom agents.
Install
Ready
npx skills add simstudioai/sim --skill add-enrichment
Maintenance
fresh
3d since push
Risk
Needs review
Permission surface may require sandboxing
GitHub quality
30K
91/100 Quality · 82/100 Trust
Coverage tags
Review notes
Permission surface may require sandboxing · Quality score needs review
Agent adoption scorecard
These scores combine public repository metadata, OpenAgentSkill review signals, maintenance freshness, and install readiness. They are a shortlist signal, not a replacement for human review.
Quality
ExcellentHigh-confidence pick with strong adoption and healthy maintenance signals.
Trust
Sandbox onlyUseful candidate with missing or mixed trust signals. Keep it in an isolated workspace until the outcome loop proves task fit.
Audit
Needs reviewA machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
OpenAgentSkill Trust Score v5
Run only in a sandbox and compare close alternatives before using it for real work.
Stars
30K GitHub stars
Repo activity
30K stars, 3.8K forks
Maintenance
3d since push
License
Apache-2.0
Install
npx skills add simstudioai/sim --skill add-enrichment
Install safety
Agent-readable metadata
Use this block or the embedded JSON to decide whether an agent should install this skill, choose an alternative, or ask for human review first.
Suited tasks
Suited agents
Install decision
Trust and risk
Outcome loop
Install command
npx skills add simstudioai/sim --skill add-enrichmentDo not use when
Alternative
168.6K Stars
npx skills add mattpocock/skills --skill code-review
Alternative
40.8K Stars
npx skills add appsmithorg/appsmith
Alternative
175.7K Stars
npx skills add mattpocock/skills --skill implement
Alternative
30.9K Stars
npx skills add vercel-labs/agent-skills --skill vercel-react-best-practices
Agent safety v2
Sparse or mixed signals. Useful for discovery, but not for autonomous installation.
Test manually in an isolated workspace and compare against safer alternatives.
high
Skill metadata references terminal, CLI, shell, subprocess, or command execution workflows.
medium
Skill likely fetches remote pages, APIs, repositories, or external services.
medium
Skill may read or write project files, documents, generated artifacts, or local workspace state.
high
Skill metadata references credentials, tokens, environment variables, or secret-bearing workflows.
Agent resolve plan
The Resolve API returns the selected skill, alternatives, safety policy, audit notes, install target, and copy-paste prompt an agent can follow without scraping this page.
Open JSON
/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Resolve text
/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium&format=text
Install handoff
/api/skills/simstudioai-add-enrichment/install
Agent should check
Copy prompt
Task: Use add-enrichment in this workspace.
Resolve first: https://www.openagentskill.com/api/agent/resolve?task=Use%20add-enrichment%20for%20an%20agent%20workflow&agent=codex&max_risk=medium
Review install handoff: https://www.openagentskill.com/api/skills/simstudioai-add-enrichment/install
Install command: npx skills add simstudioai/sim --skill add-enrichment
Before running it, summarize audit warnings, required permissions, and the fallback skill if install is risky.Agent handoff
Use the public install endpoint to fetch the command, safety checklist, target prompts, and canonical links for this skill.
Install handoff
/api/skills/simstudioai-add-enrichment/install
LLM text format
/api/skills/simstudioai-add-enrichment/install?format=text
Find alternatives
/api/skills/search?q=add-enrichment&limit=3
Agent prompt
Use add-enrichment for this task. Review https://www.openagentskill.com/api/skills/simstudioai-add-enrichment/install, then install with: npx skills add simstudioai/sim --skill add-enrichmentRegistry metadata
This page exposes the same decision, trust, audit, use-case, and install signals through the Registry API, so agents can rank this skill without scraping the UI.
Manifest
/api/registry/manifest/simstudioai-add-enrichment
LLM text
/api/registry/manifest/simstudioai-add-enrichment?format=text
Install alias
/api/registry/install/simstudioai-add-enrichment
Recommend
/api/registry/recommend?task=Use%20add-enrichment%20in%20an%20agent%20workflow&limit=3
Agent fit
Workflow automation
Use-case tags
Platforms
Claude Code
Audit report
A machine-readable review of install readiness, security metadata, maintenance, and adoption risk.
Agent decision cockpit
Use this as a leading candidate, then validate the README and install path in your own agent stack.
Role in stack
Primary pick
Primary fit
Workflow automation
Trust label
Production-ready
Install path
Command ready
Use when
Evidence
review first
Implementation path
Trust profile
Useful candidate with missing or mixed trust signals. Keep it in an isolated workspace until the outcome loop proves task fit.
GitHub adoption
PASS30K GitHub stars
Stars/forks activity
PASS30K stars, 3.8K forks; issue activity unavailable in current metadata
Recent maintenance
PASS3d since push
License clarity
PASSApache-2.0
Good signals
Review before install
Recommended action
Run only in a sandbox and compare close alternatives before using it for real work.
Quality profile
High-confidence pick with strong adoption and healthy maintenance signals.
Workflow fit
Automate repeated work
I need my agent to automate a repeated workflow across tools and files.
Build and ship code
I need a coding agent that can understand a repository, edit code, and review pull requests.
Operate web apps
I need my agent to control a browser, fill forms, and verify web app workflows.
Workflow fit
Turn skills into distribution
A workflow for turning newly indexed skills into SEO briefs, social drafts, comparison pages, and reusable publishing workflows.
Operate and verify web apps
A workflow for agents that navigate products, fill forms, take screenshots, and verify real user flows across web applications.
Inspect, patch, and verify code
A workflow for software agents that inspect repositories, review pull requests, generate tests, and turn findings into shippable patches.
Alternative shortlist
Similar skills that may fit this task.
Review a branch or diff against repository standards and the originating spec in two independent analysis passes.
Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
Implement work from an approved spec or ticket set, run focused and full tests, invoke code review, and commit the result to the current branch.
React and Next.js performance guidance for writing, reviewing, and refactoring production UI code.
--- name: add-enrichment description: 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. Use when adding a per-row table enrichment that fills cells via existing Sim tools. argument-hint: <enrichment-name> ---
# Adding a Table Enrichment
Enrichments are code-defined entries in `apps/sim/enrichments/` that run **directly per table row** (no workflow). Each enrichment declares inputs, outputs, and an ordered list of **providers**; the cascade runner tries providers in order and the first non-empty result fills the cell. Each provider calls one existing Sim tool via `executeTool`, which injects the workspace's BYOK key or a **hosted key** and bills usage automatically.
Because enrichments run on Sim's hosted keys by default, **every provider tool you reference must have hosted-key support** — otherwise it can only run when the workspace brings its own key. This command makes that check a required step.
## Overview
| Step | What | Where | |------|------|-------| | 1 | Pick the data-source tool(s) for each output | `tools/{service}/` + `tools/registry.ts` | | 2 | **Verify each tool has `hosting`; if not, run `/add-hosted-key`** | `tools/{service}/{action}.ts` | | 3 | Write the enrichment definition | `enrichments/{name}/{name}.ts` + `index.ts` | | 4 | Register it | `enrichments/registry.ts` | | 5 | Verify | tsc / biome / manual run |
## Architecture (what you're plugging into)
- **`enrichments/types.ts`** — `EnrichmentConfig { id, name, description, icon, inputs, outputs, providers }` and `EnrichmentProvider { id, label, toolId, buildParams, projectFailure, mapOutput }` — `toolProvider` fills `projectFailure` with the standard HTTP projection; override it only for a provider whose failure shape is nonstandard (see `enrichments/provider-failures/`). Providers are **plain data** (no `@/tools` import) so the catalog stays client-safe. - **`enrichments/providers.ts`** — `toolProvider(...)` (typed passthrough) plus shared input helpers: `str(v)`, `normalizeDomain(v)`, `firstNonEmpty(arr)`, `splitName(fullName)`, and `projectEnrichmentProviderFailure`. - **`enrichments/run.ts`** — the server-only cascade runner. Calls `executeTool(provider.toolId, { ...params, _context: { workspaceId, userId } })`, accumulates hosted-key cost, returns the first non-empty mapped result. **You do not edit this** — it works for any registry entry. - **`enrichments/registry.ts`** — `ENRICHMENT_REGISTRY` / `ALL_ENRICHMENTS` / `getEnrichment`. Register new entries here.
Outputs automatically become table columns; billing, the catalog/sidebar UI, the column meta-header icon, and per-row execution all work with no extra wiring.
## Step 1: Pick the data-source tool(s)
For each output the enrichment produces, decide which existing tool provides it. Look up the service's API and the tool in `apps/sim/tools/{service}/` (e.g. `hunter_email_finder`, `pdl_person_enrich`, `pdl_company_enrich`). Confirm:
- The tool id is registered in `apps/sim/tools/registry.ts`. - Its `params` accept what you can derive from table columns (read the tool's `params`). - Its `outputs` / `transformResponse` actually expose the field you need (read the real output shape — don't assume).
Order providers **cheapest / most-likely-to-hit first**; the cascade stops at the first non-empty result. Apollo / LinkedIn are not hosted-safe (ToS) — don't use them.
## Step 2: Verify hosted-key support — chain to `/add-hosted-key` if missing
**This is the required gate.** For every tool a provider calls, open `apps/sim/tools/{service}/{action}.ts` and check for a `hosting` block:
```typescript hosting: { envKeyPrefix: 'SERVICE_API_KEY', apiKeyParam: 'apiKey', byokProviderId: 'service', pricing: { /* ... */ }, rateLimit: { /* ... */ }, } ```
- **If `hosting` is present** — good. Note the `envKeyPrefix`; the deployment needs `{PREFIX}_COUNT` + `{PREFIX}_1..N` env vars set for the hosted key to actually resolve at runtime (ops concern, not code). If those env vars aren't set in the target environment, the provider will only run with a workspace BYOK key. - **If `hosting` is absent** — the tool can't use a Sim-provided key, so the enrichment would silently produce blank cells on hosted Sim. **Stop and run `/add-hosted-key <service>`** to add hosted-key support to that tool first, then come back. Do this for every provider tool that lacks it.
Why it matters: the cascade runner only bills (and only reads `output.cost.total`) when `executeTool` injected a hosted key, which requires the tool's `hosting` config. No `hosting` → no hosted key → the enrichment depends entirely on per-workspace BYOK.
## Step 3: Write the enrichment definition
Create `apps/sim/enrichments/{name}/{name}.ts` and a barrel `index.ts`. Mirror the entries registered in `enrichments/registry.ts`.
```typescript import { SomeIcon } from '@sim/emcn/icons' import { filterUndefined } from '@sim/utils/object' import { normalizeDomain, splitName, str, toolProvider } from '@/enrichments/providers' import type { EnrichmentConfig } from '@/enrichments/types'
export const myEnrichment: EnrichmentConfig = { id: 'my-enrichment', name: 'My Enrichment', description: 'One concise sentence describing what it finds.', icon: SomeIcon, inputs: [ // Person enrichments take a single canonical `fullName` (Clay-style); // split it with splitName() for tools that need first/last. { id: 'fullName', name: 'Full name', type: 'string', required: true }, { id: 'companyDomain', name: 'Company domain', type: 'string' }, ], outputs: [{ id: 'value', name: 'value', type: 'string' }], providers: [ toolProvider({ id: 'provider-a', label: 'Provider A', toolId: 'service_action', // must have `hosting` (Step 2) buildParams: (inputs) => { // Return null when there aren't enough inputs → cascade skips this provider. const name = splitName(inputs.fullName) const domain = normalizeDomain(inputs.companyDomain) if (!name || !domain) return null return { domain, first_name: name.firstName, last_name: name.lastName } }, mapOutput: (output) => { // Return { [outputId]: value } on a hit, or null to fall through. const value = str(output.value) return value ? { value } : null }, }), // ...additional fallback providers, in priority order. ], } ```
```typescript // apps/sim/enrichments/{name}/index.ts export { myEnrichment } from './my-enrichment' ```
Rules: - Keep the file **client-safe**: import only `@sim/emcn/icons`, `@sim/utils/*`, `@/enrichments/providers`, and the types. **Never import `@/tools`** here — the runner does the tool call. - `buildParams` returns `null` when inputs are insufficient (provider skipped). `mapOutput` returns `null`/empty for a miss (falls through). Use `filterUndefined` when assembling optional tool params; coerce numbers explicitly (don't pass `''` to number outputs). - Output `id`s are the keys `mapOutput` returns; output `name`s are the default column names (the user can rename them in the config).
## Step 4: Register it
In `apps/sim/enrichments/registry.ts`, import and add the entry (catalog order is registration order):
```typescript import { myEnrichment } from '@/enrichments/my-enrichment'
export const ENRICHMENT_REGISTRY: EnrichmentRegistry = { // ...existing [myEnrichment.id]: myEnrichment, } ```
## Step 5: Verify
1. `bun run type-check` (from `apps/sim`) and `bunx biome check` on the changed files. 2. In a table → **+ New column → Enrichments** → pick the new enrichment, map its inputs to columns, name the output column(s), Save. Confirm it appears in the catalog with its icon/description. 3. With hosted keys (or a workspace BYOK key) configured for each provider's service, run a row and confirm the cell fills; the dev-server log shows `Enrichment hit { provider }`. A row whose providers all miss completes blank; a row where every provider errored shows an error cell.
## Checklist
- [ ] Each output mapped to a real tool field (verified against the tool's `params`/`outputs`) - [ ] **Every provider tool has a `hosting` block — ran `/add-hosted-key` for any that didn't** - [ ] Providers ordered cheapest / most-likely-first; Apollo/LinkedIn not used - [ ] Enrichment file is client-safe (no `@/tools` import); uses `toolProvider` + shared helpers - [ ] `buildParams` returns `null` on insufficient inputs; `mapOutput` returns `null` on a miss - [ ] Registered in `enrichments/registry.ts` - [ ] tsc + biome clean; created and ran the column end-to-end
Source provenance
Decision snapshot
29,529 GitHub stars
Audit
Install and adoption review
Agent-proven evidence
Outcome reports after resolve, review, install, and one narrow run.
No agent outcome data yet. The first agent run can report success, setup needs, risk blocks, failure, or not-relevant through /api/agent/outcome.
Install
Free and open source. Review the report before installing into production agents.
Growth loop
Scenario-led draft for add-enrichment, ready for a manual X post.
A practical pick for the next repo task: add-enrichment: Add a code-defined table enrichment (registry entry) under `apps/sim/enrichments/` backed by an ordered provider cascade, e... 29.5K stars https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=x
Listing + install path for add-enrichment: https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=x Install: npx skills add simstudioai/sim --skill add-enrichment
Listing source
This listing was indexed from public sources and is not marked official until a maintainer claim is approved.
Attribution links to the public repository or creator profile. Creators can claim the listing to update ownership signals.
Claim this skillOwner claim
This Registry indexed listing is attributed to simstudioai but is not marked official yet. Claim it to add a verified owner signal and make future launch, install, and audit updates easier to trust.
Creator backlink kit
Show the canonical listing, current trust and audit signals, and real Agent-Proven evidence where developers evaluate the repository.
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment/audit)
[](https://www.openagentskill.com/skills/simstudioai-add-enrichment?ref=github&utm_source=github&utm_medium=referral&utm_campaign=creator_badge)simstudioai
@simstudioai
Share whether this skill looks useful for your agent workflow. Aggregated feedback improves rankings over time.
Sandbox only
Code Review
Review a branch or diff against repository standards and the originating spec in two independent analysis passes.
168.6K StarsAppsmith
Platform to build admin panels, internal tools, and dashboards. Integrates with 25+ databases and any API.
40.8K StarsImplement
Implement work from an approved spec or ticket set, run focused and full tests, invoke code review, and commit the result to the current branch.
175.7K StarsVercel React Best Practices
React and Next.js performance guidance for writing, reviewing, and refactoring production UI code.
30.9K StarsPermission surface
secrets or environment access, shell or command execution
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness
Permission surface
secrets or environment access, shell or command execution
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness
Permission surface
secrets or environment access, shell or command execution
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness
Permission surface
secrets or environment access, shell or command execution
Agent outcomes
No agent outcome data yet
Docs
Strong README/SKILL.md context
Risk summary
Install readiness