Official agent skill

Langsmith Custom Apps

by langchain-ai in langchain-ai/langsmith-skills

INVOKE THIS SKILL when building, iterating on, copying, or sharing a LangSmith Custom App — a React/TypeScript UI that runs inside LangSmith and reads the LangSmith API.

OfficialMITAuto-check passedAI & LLM Engineering

Install Langsmith Custom Apps

skills CLI
$ npx skills add langchain-ai/langsmith-skills --skill langsmith-custom-apps -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install langchain-ai/langsmith-skills langsmith-custom-apps --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/langchain-ai/langsmith-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/config/skills/langsmith-custom-apps .claude/skills/langsmith-custom-apps && rm -rf skills-src

Use ~/.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/

Facts

Skill name
langsmith-custom-apps
GitHub stars
159
Token cost
~3.2k tokens
SKILL.md length
1,525 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

INVOKE THIS SKILL when building, iterating on, copying, or sharing a LangSmith Custom App — a React/TypeScript UI that runs inside LangSmith and reads the LangSmith API.

  • Works in 3 steps: LANGSMITH_API_KEY in the environment… → LANGSMITH_WORKSPACE_ID may point at a… → langsmith apps dev needs a workspace API…
  • Tasks that involve LLM observability
  • Calls npm, npx and curl; reaches api.smith.langchain.com; needs LANGSMITH_API_KEY

What it does

Langsmith Custom Apps is an agent skill from langchain-ai/langsmith-skills, published by the product's own GitHub organization. INVOKE THIS SKILL when building, iterating on, copying, or sharing a LangSmith Custom App — a React/TypeScript UI that runs inside LangSmith and reads the LangSmith API. Covers the langsmith apps CLI, pulling an existing app's source, replicating an app into another workspace, verifying app logic without a browser, and sanitizing an app before sending it outside your org. Uses the langsmith CLI tool.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in AI & LLM Engineering, covering LLM observability. It works with LangSmith, React and TypeScript. The licence is MIT.

When your agent uses it

  • Tasks that involve LLM observability

Example prompts

  • “/langsmith-custom-apps”

Requirements

  • Python 3
  • Node.js
  • A credential in LANGSMITH_API_KEY

Workflow steps

3 steps, taken from the first numbered list in SKILL.md.

  1. LANGSMITH_API_KEY in the environment outranks the saved OAuth profile. A stale exported key 403s every call while langsmith auth info…
  2. LANGSMITH_WORKSPACE_ID may point at a different workspace than the key, which surfaces as a confusing 403 rather than a wrong-workspace…
  3. langsmith apps dev needs a workspace API key, not OAuth. It captures one access token at startup and never refreshes it, so after roughly…

What it can do on your machine

Read from SKILL.md and the folder at commit 1fb52e8. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • npx
    • curl
    • python3
    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • api.smith.langchain.com

    Also links to:

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • LANGSMITH_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Langsmith Custom Apps loads about 3.2k tokens when it runs. Until then it costs about 106 tokens; SKILL.md has 1,525 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~106
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from langchain-ai/langsmith-skills at commit 1fb52e8, republished under its MIT licence (© langchain-ai). 1,525 words, ~3,235 tokens.

Download SKILL.mdSave it as .claude/skills/langsmith-custom-apps/SKILL.md (or your agent's skills folder).
name
langsmith-custom-apps
description
INVOKE THIS SKILL when building, iterating on, copying, or sharing a LangSmith Custom App — a React/TypeScript UI that runs inside LangSmith and reads the LangSmith API. Covers the langsmith apps CLI, pulling an existing app's source, replicating an app into another workspace, verifying app logic without a browser, and sanitizing an app before sending it outside your org. Uses the langsmith CLI tool.
<oneliner>
Custom Apps are Enterprise-plan React UIs that render inside LangSmith and read the LangSmith API through a host-injected bridge. You build one locally with `langsmith apps`, push it, and it appears under **Custom Apps** in the workspace sidebar. This skill covers the work around the app directory: the CLI surface, the app lifecycle, verification, and sharing.
</oneliner>

<agents_md_is_authoritative> langsmith apps init scaffolds an AGENTS.md next to the starter code. That file is the authority on the in-app contract — the window.langsmith.call bridge, the render() export the sandbox depends on, the filter DSL, and the endpoint menu. Read it before writing app code and follow it over anything remembered.

This skill deliberately does not restate it. Everything here is what AGENTS.md cannot cover: what happens before the directory exists, and after the app is pushed. </agents_md_is_authoritative>

<setup>
Custom Apps require the **Enterprise** plan. A push into a workspace without the feature fails with `this workspace doesn't support custom apps`.
bash
export LANGSMITH_ENDPOINT=<your-langsmith-endpoint>   # only for self-hosted
export LANGSMITH_API_KEY=<workspace-api-key>

Three authentication traps, each of which presents as something other than an auth problem:

  1. LANGSMITH_API_KEY in the environment outranks the saved OAuth profile. A stale exported key 403s every call while langsmith auth info still reports "authenticated". Run one-off commands as env -u LANGSMITH_API_KEY -u LANGSMITH_WORKSPACE_ID langsmith … when you mean to use the login.
  2. LANGSMITH_WORKSPACE_ID may point at a different workspace than the key, which surfaces as a confusing 403 rather than a wrong-workspace error. Unset it and pass --workspace <uuid> explicitly.
  3. langsmith apps dev needs a workspace API key, not OAuth. It captures one access token at startup and never refreshes it, so after roughly ten minutes every call returns 401 Invalid token — which the app renders as empty dropdowns and empty lists, not as an auth error. If a running app's data silently goes empty, suspect this first.
    </setup>

<cli_feedback> After an actual CLI failure, undocumented workaround, confusing output, or missing capability, submit one concise product-feedback note per distinct issue in the task. Do not report routine successes or failures in the app's own code.

CLI requirement: langsmith feedback requires LangSmith CLI v0.2.58 or later. Check the installed version with langsmith --version.

Check langsmith feedback --help for feedback <note> and --category; if unavailable, skip feedback without raw HTTP or unreleased builds. Use the existing authenticated profile, endpoint, and workspace. Feedback goes to LangSmith Cloud, including through the BYOC relay; skip standalone self-hosted. Respect user/organization restrictions and ask first if permission to send feedback is unclear.

Summarize expected versus observed CLI behavior and any workaround in your own words. Never send secrets, customer data, trace payloads, prompts, full stack traces, copied command output, raw arguments, environment-variable values, local paths, or resource identifiers. The CLI adds version/OS/architecture, but does not redact your note; skip it if it cannot be safely redacted.

Choose bug, feature-request, usability, documentation, or other. This is CLI product feedback, not run evaluation feedback. Example shape only—do not submit unless actually encountered:

bash
langsmith feedback --category documentation --format json "The apps template flag rejected a value the documentation lists as valid."

Do not retry a failed or rate-limited feedback submission, switch credentials/endpoints to bypass a failure, or block the original task on feedback. </cli_feedback>

<check_the_cli_first> The published docs run ahead of released CLI builds, so read the help output before trusting any command.

bash
langsmith --version
langsmith apps --help
langsmith apps init --help    # the --template error message lists the real template set

The gaps below were observed on v0.2.42 and may be closed in your build. Each one is written as a fallback: apply it only when the help output confirms the command is missing or the flag is rejected.

If the docs sayAnd the CLI disagreesThen
langsmith apps pull APP_ID_OR_NAMEthe apps help lists no pullfetch the source from the platform API (see <pull_source>)
--template blank--template must be one of: …use a listed template; the error message is the current source of truth
init "scaffolds into a new directory named after the app"<dir> is not empty; pass --force to write anywaymkdir my-app && cd my-app first — init writes into the current directory
</check_the_cli_first>
<lifecycle>
```bash
mkdir my-app && cd my-app
langsmith apps init --name my-app --template <listed-template> --workspace <ws-uuid>
npm install
export LANGSMITH_API_KEY=<workspace-api-key>   # see setup trap 3
langsmith apps dev                              # live sandbox against LangSmith
npm run build
langsmith apps push --name my-app --workspace <ws-uuid>
```

apps dev streams the app's failed API calls and uncaught errors to that terminal. Add --verbose for every successful call plus all console.* output, or --quiet to silence it.

apps push builds first when package.json has a build script; --no-build uploads as-is. The first push creates the app and links the directory through .langsmith/app.json; later pushes update that same app. --name only applies on creation, and renames if passed afterwards. Commit .langsmith/app.json so teammates push to the same app. </lifecycle>

<pull_source> When the CLI has no pull, the platform API returns every file inline:

bash
langsmith apps list --workspace <ws-uuid> --format json      # find the app id
curl -s -H "X-API-Key: $LANGSMITH_API_KEY" \
  "https://api.smith.langchain.com/v1/platform/custom-apps/<app-id>" \
  | python3 -c "
import json, os, sys
app = json.load(sys.stdin)
for path, content in app['files'].items():
    os.makedirs(os.path.dirname(path) or '.', exist_ok=True)
    open(path, 'w').write(content)
print(f\"wrote {len(app['files'])} files\")"

The record also carries name, entrypoint, current_version, scope, created_by, updated_by, and views_7d. Use GET /v1/platform/custom-apps for the whole list. </pull_source>

<replicate_across_workspaces>

  1. Pull the source into a fresh directory.
  2. Delete .langsmith/app.json. It links the directory to the source app id, so leaving it in place makes the next push update the original app instead of creating one in the target workspace. This is the single most damaging mistake in this workflow.
  3. Push with the target workspace and a name:
bash
langsmith apps push --name <name> --workspace <target-ws-uuid>
  1. Re-point anything workspace-specific in the app's config (deep-link workspace UUIDs, project ids, feedback keys) at the target workspace, then rebuild — see <before_sharing_externally> for why editing source alone is not enough. </replicate_across_workspaces>

<app_facts>

  • Apps are workspace-scoped ("scope": "workspace"). Someone outside the workspace cannot open the URL, so "share this app" always means shipping source, never a link.
  • is_enabled: false is the normal state right after a push. It is not a failed deploy — do not debug it as one.
  • Deleting is langsmith apps delete <app-id-or-name> --yes; it is not recoverable, so confirm the id against apps list first. </app_facts>
Show full SKILL.md (605 more words)Show less

<verify_without_browser> You cannot click the app, and a bug in its data layer renders as a plausible empty state rather than an error. This loop is the highest-value habit in this skill.

  1. Keep aggregation pure. Parsing and counting live in a module with no React and no window.langsmith (for example src/lib/<domain>.ts); the API module only fetches rows and hands them over.
  2. Capture real rows with the CLI into fixtures:
bash
langsmith api runs/query -X POST --workspace <ws-uuid> \
  -F 'session[]=<project-uuid>' -F 'filter=eq(run_type, "tool")' \
  -F 'select[]=id' -F 'select[]=trace_id' -F 'select[]=inputs' -F 'limit=100' \
  > /tmp/fixtures/tools.json
  1. Run the app's real TypeScript over them in node, using the esbuild that already ships with vite — no new dependency, no test framework:
bash
npx esbuild /tmp/harness.ts --bundle --platform=node --format=cjs \
  --outfile=/tmp/harness.cjs && node /tmp/harness.cjs
  1. Read the numbers against the raw data, not just "it ran." A real example: an app counted skill loads by matching paths under /skills/<name>/, but directory listings emit entries as '/memories/skills/auth-sso-scim' with no trailing slash, and the pattern required one. The feature's entire output — the list of never-used skills — came back empty and looked like a legitimately clean result. Only comparing counts against the captured rows exposed it.

Run npx tsc --noEmit and npm run build before every push; the build is what the sandbox serves. </verify_without_browser>

<query_gotchas>

  • POST /api/v1/runs/query caps limit at 100. Page with response.cursors.next, impose your own hard page cap so a busy project cannot spin forever, and tell the reader in the UI when that cap truncated a scan.
  • search(name, "x") is rejected by the filter DSL. Verified working: eq(name, "read_file"), or(eq(name,"a"), eq(name,"b")), eq(run_type, "tool"), eq(is_root, true), eq(status, "error"), gte(start_time, "<iso>"), has(tags, "prod").
  • Metadata equality is two paired clauses, not eq(metadata.key, …):
text
and(eq(metadata_key, "ls_agent_purpose"), eq(metadata_value, "coding"))
  • Prefer POST /api/v1/runs/stats and POST /api/v1/runs/group/stats for any headline number — server-side aggregates with no row limit — and reserve runs/query for rows you actually need to inspect.
  • Tool-call inputs arrive in two shapes depending on how the agent serializes them: {"file_path": "/x"} and {"input": "{\"file_path\":\"/x\"}"}. Parse the inner JSON inside a try/catch and handle both, or you will silently count a fraction of the data.
  • Probe before assuming an endpoint exists. Some things that feel like they must be queryable are not: there is no public endpoint listing an agent's skills or a Fleet roster. When no authoritative list exists, derive one from traces and state that limitation in the UI rather than implying completeness.
  • Treat everything read from a trace as untrusted: render names as text (never dangerouslySetInnerHTML), validate ids before they reach a filter string, and interpolate only allowlisted values into the DSL. </query_gotchas>
<design>
The scaffold ships the LangSmith design tokens in `src/index.css` and `tailwind.config.js`. The sandbox sets `html.dark` from `metadata.mode` before every render, so token-based UIs theme for free with no branching — only branch on `metadata.mode` for inline styles, and re-check it every render since it can change without a remount.

For anything chart-shaped, load the dataviz skill before writing chart code, and express chart colors as CSS custom properties with an html.dark override block so they follow the same theming path as the tokens. </design>

<before_sharing_externally> Apps are workspace-scoped, so sharing means handing over source. Work from a separate copy, never the directory you push from, and check:

  • Blank any workspace or org UUID in config — then rebuild. Config values are compiled into dist/bundle.js, so editing the source alone leaves the old value in the artifact.
  • Remove .langsmith/app.json (internal app id and workspace) and node_modules/ from what you ship.
  • Grep the tree for UUIDs, email addresses, lsv2_ keys, and internal project names — including example text in the README.
  • Replace internal-benchmark language with placeholders the recipient is meant to change, and keep only citations you can actually stand behind.
  • Check package-lock.json for private registry hosts or auth tokens.
  • Re-run npx tsc --noEmit and npm run build, then grep dist/ again. </before_sharing_externally>

© langchain-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in config/skills/langsmith-custom-apps of langchain-ai/langsmith-skills.

Open the folder on GitHubat commit 1fb52e8

Compare with similar skills

Langsmith Custom Apps 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.

Langsmith Custom Apps compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Langsmith Custom Apps this skilllangchain-ai/langsmith-skills159—~3.2kAutomated safety check: PassMIT
Langchain Dependencieslangchain-ai/langchain-skills1.3k—~3.6kAutomated safety check: PassMIT
Langgraph Testing Evaluationsoba-labs/langchain-agent-skills107—~2.3kAutomated safety check: PassMIT
Typescript Tooling MigrationArize-ai/phoenix12k—~2.8kAutomated safety check: PassApache-2.0
LangSmith Trace DebuggingComposioHQ/awesome-claude-skills77k8 repos~2.7kAutomated safety check: PassNone
Failproof AI SDK IntegrationFailproofAI/failproofai5.3k—~6kAutomated safety check: PassCustom licence

Similar skills

  • Langchain Dependencies

    langchain-ai/langchain-skills

    Official

    INVOKE THIS SKILL when setting up a new project or when asked about package versions, installation, or dependency management for LangChain, LangGraph, LangSmith, or Deep Agents.

    1.3k GitHub stars~3.6k tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • Langgraph Testing Evaluation

    soba-labs/langchain-agent-skills

    A skill your agent uses when you need to test or evaluate LangGraph/LangChain agents: writing unit or integration tests, generating test scaffolds, mocking LLM/tool behavior, running trajectory…

    107 GitHub stars~2.3k tokensUpdated 1 mo ago
    AI & LLM EngineeringAuto-check passed
  • Migrate or upgrade TypeScript tooling in the Phoenix monorepo.

    12k GitHub stars~2.8k tokensUpdated today
    DevelopmentAuto-check passed
  • LangSmith Trace Debugging

    ComposioHQ/awesome-claude-skills

    Debugs LangChain and LangGraph agents by pulling recent execution traces with the langsmith-fetch CLI and reporting errors, tool calls, timings and token use.

    77k GitHub starsUsed in 8 repos~2.7k tokens
    AI & LLM EngineeringAuto-check passed
  • Failproof AI SDK Integration

    FailproofAI/failproofai

    Helps instrument a custom Python or TypeScript agent to record events for Failproof AI, verify what gets written, and run an evaluator worker that scores the runs.

    5.3k GitHub stars~6k tokensUpdated 2 days ago
    AI & LLM EngineeringAuto-check passed
  • Add Docs Page

    langchain-ai/docs

    Official

    Add, move, rename, or delete a page on the LangChain docs site.

    426 GitHub stars~2k tokensUpdated today
    AI & LLM EngineeringAuto-check passed

More from langchain-ai/langsmith-skills

  • Langsmith Online Eval Engineering

    langchain-ai/langsmith-skills

    Official

    Design, test, create, and attach LangSmith online evaluators for production traces or conversation threads.

    159 GitHub stars~1.4k tokensUpdated 7 days ago
    Auto-check passed

Questions about Langsmith Custom Apps

What does Langsmith Custom Apps do?

INVOKE THIS SKILL when building, iterating on, copying, or sharing a LangSmith Custom App — a React/TypeScript UI that runs inside LangSmith and reads the LangSmith API. Langsmith Custom Apps is an agent skill from langchain-ai/langsmith-skills, published by the product's own GitHub organization. INVOKE THIS SKILL when building, iterating on, copying, or sharing a LangSmith Custom App — a React/TypeScript UI that runs inside LangSmith and reads the LangSmith API.

When should I use Langsmith Custom Apps?

Langsmith Custom Apps fits situations like: tasks that involve LLM observability.

How do I install Langsmith Custom Apps in Claude Code?

Run `npx skills add langchain-ai/langsmith-skills --skill langsmith-custom-apps -a claude-code`. Or copy the skill folder (config/skills/langsmith-custom-apps in langchain-ai/langsmith-skills) into .claude/skills/langsmith-custom-apps in your project. Claude Code loads it when a task matches its description.

How do I install Langsmith Custom Apps in Codex?

Run `npx skills add langchain-ai/langsmith-skills --skill langsmith-custom-apps -a codex`. Or copy the skill folder (config/skills/langsmith-custom-apps in langchain-ai/langsmith-skills) into .agents/skills/langsmith-custom-apps in your project. Codex loads it when a task matches its description.

Can I use Langsmith Custom Apps in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add langchain-ai/langsmith-skills --skill langsmith-custom-apps -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/langsmith-custom-apps, .gemini/skills/langsmith-custom-apps, .github/skills/langsmith-custom-apps and .opencode/skills/langsmith-custom-apps in your project.

What does Langsmith Custom Apps need to run?

Going by SKILL.md and its folder, Langsmith Custom Apps needs the command-line tools its instructions call (npm, npx, curl, python3 and node) and credentials named LANGSMITH_API_KEY. Our summary lists: Python 3; Node.js; A credential in LANGSMITH_API_KEY.

Does Langsmith Custom Apps access the network?

SKILL.md names 2 domains. In commands or code: api.smith.langchain.com; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. This is read from the text; nothing was executed.

Is Langsmith Custom Apps safe to install?

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.

What licence does Langsmith Custom Apps use?

Langsmith Custom Apps is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Langsmith Custom Apps use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Langsmith Custom Apps?

Skills that share tags, products or a category with Langsmith Custom Apps: Langchain Dependencies (langchain-ai/langchain-skills, 1.3k stars), Langgraph Testing Evaluation (soba-labs/langchain-agent-skills, 107 stars), Typescript Tooling Migration (Arize-ai/phoenix, 12k stars) and LangSmith Trace Debugging (ComposioHQ/awesome-claude-skills, 77k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Langsmith Custom Apps?

langchain-ai (a GitHub organization, an official publisher) maintains it in langchain-ai/langsmith-skills, which has 159 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 2, 2026.

Source: langchain-ai/langsmith-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.