with one click
feature-map
// Maintain the canonical LangWatch feature map (/feature-map.json). Use when adding features, APIs, MCP tools, CLI commands, or skills — to update the central registry and keep surfaces in sync.
// Maintain the canonical LangWatch feature map (/feature-map.json). Use when adding features, APIs, MCP tools, CLI commands, or skills — to update the central registry and keep surfaces in sync.
Manage the LangWatch Kanban GitHub project board — sync statuses, view your board, find stale items, move issues, assign work.
Project-level code review: check changed files against LangWatch codebase rules (IDs, multitenancy, layering, naming, SRP).
Collaborative headed browser session for UI work. Launch Playwright Chromium visible to the user, handle auth, then interactively drive the browser while the user watches and gives real-time visual feedback. Edit code and refresh to verify fixes live. Use when the user says 'browser pair', 'paired browser', 'let's look at this together', 'open chromium', or wants to iterate on UI with live visual feedback.
Validate a feature works by driving a real browser with Playwright MCP. No test files — just interactive verification.
| name | feature-map |
| description | Maintain the canonical LangWatch feature map (/feature-map.json). Use when adding features, APIs, MCP tools, CLI commands, or skills — to update the central registry and keep surfaces in sync. |
| user-invocable | true |
| argument-hint | [what changed, e.g. 'added dataset MCP tools'] |
You are maintaining /feature-map.json — the canonical information architecture for LangWatch. Every platform feature is defined here with its surfaces (how it's accessed) and sync state (how code and platform relate). All implementations (sidebar, docs, skills, MCP tools) derive from this map.
/FEATURE_MAP.md is the human-readable companion — a coverage table derived from the JSON. Keep it in sync when you edit the JSON. Use the underscore form (FEATURE_MAP.md), matching GitHub's convention for uppercase root files like CODE_OF_CONDUCT.md and PULL_REQUEST_TEMPLATE.md. Never create a hyphenated FEATURE-MAP.md variant.
The hierarchy represents the product's mental model, not the code structure:
observability/ — Tracing, Analytics, User Events, Annotations
evaluations/ — Experiments, Online Evaluation (includes guardrails via code)
agent-simulations/ — Scenarios, Runs
prompt-management/ — Prompts, Prompt Playground
library/ — Agents, Workflows, Evaluators, Datasets
settings/ — Model Providers
as_guardrail=True), not a separate concept.Each feature has two main access paths:
code — developer writes files in their project (SDK, CLI, skill)platform — no-code via UI or MCP tools (UI route, MCP tool, platform skill)Plus cross-cutting:
api — REST/Hono API endpoint namespace (used by both code and platform)docs — canonical documentation URLFields point to namespaces, not individual methods. E.g., "python": "langwatch.experiment" means the whole experiment module, not just init().
How code and platform relate for each feature:
| sync value | meaning | example |
|---|---|---|
null | separate or one-mode only | annotations (platform only) |
"bidirectional" | code ↔ platform, synced | prompts (via prompt sync) |
"code-to-platform" | code generates, platform displays | tracing, experiments |
"platform-to-code" | platform configures, code consumes | — (none currently) |
plannedSync captures known future intent (e.g., scenarios will become "bidirectional").
langwatch/src/app/api/ — each [[...route]]/app.ts is a Hono app
langwatch/src/app/api/traces/[[...route]]/app.tslangwatch/src/app/api/scenarios/[[...route]]/app.tslangwatch/src/app/api/prompts/[[...route]]/app.tslangwatch/src/app/api/evaluators/[[...route]]/app.tslangwatch/src/app/api/dataset/[[...route]]/langwatch/src/app/api/analytics/langwatch/src/app/api/model-providers/[[...route]]/langwatch/src/pages/api/langwatch/src/server/api/routers/ registered in langwatch/src/server/api/root.tslangwatch/src/utils/routes.ts — projectRoutes object has every page routelangwatch/src/components/MainMenu.tsx — sections: Observe, Evaluate, Librarylangwatch/src/utils/featureIcons.tsmcp-server/src/index.ts — every server.tool() callmcp-server/src/tools/*.tstypescript-sdk/src/cli/index.tstypescript-sdk/src/cli/commands/login + prompt subcommands (init, create, add, remove, list, sync, pull, push)python-sdk/src/langwatch/__init__.py (top-level exports), modules: experiment, evaluation, dataset, evaluators, prompts, dspytypescript-sdk/src/index.ts — LangWatch class with .prompts, .experiments, .evaluations, .evaluators, .datasets, .traces@langwatch/scenario (TS) / langwatch-scenario (Python)skills/*/SKILL.mdfetch_langwatch_docs MCP tool, index at https://langwatch.ai/docs/llms.txtfetch_scenario_docs MCP tool, index at https://langwatch.ai/scenario/llms.txtfeature-map.jsonidsurfaces.api with the route namespacemcp-server/src/index.tssurfaces.platform.mcp arrayskills/{name}/SKILL.mdsurfaces.code.skill (for code-path skills) or surfaces.platform.skill (for platform-path skills)typescript-sdk/src/cli/commands/surfaces.code.cli arraysurfaces.code.sdk with the namespaceplannedSync to syncplannedSync for future planssync appropriatelyAfter any change, verify:
api value corresponds to a route in langwatch/src/app/api/ or langwatch/src/pages/api/mcp tool name appears in mcp-server/src/index.tsskill name has a skills/{name}/SKILL.mdcli command exists in typescript-sdk/src/cli/ui route exists in langwatch/src/utils/routes.tsplannedSync for future intent)$ARGUMENTS