feature-map

star 3.3k

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.

langwatch By langwatch schedule Updated 4/19/2026

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']"

Feature Map Maintenance

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.

Information Architecture

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

Key Design Decisions

  1. No "integrations" category — SDKs/frameworks enable features, they aren't features themselves. Each feature declares its own SDK surface.
  2. Library contains reusable components (evaluators, datasets, agents, workflows) — NOT "platform" catch-all.
  3. Annotations live in Observability (they annotate traces).
  4. Guardrails = online-evaluation accessed via code (as_guardrail=True), not a separate concept.
  5. Evaluators and Datasets are in Library, not Evaluations — they're shared components used by experiments, online evaluation, and simulations.

The Surfaces Model

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 URL

Fields point to namespaces, not individual methods. E.g., "python": "langwatch.experiment" means the whole experiment module, not just init().

The Sync Model

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").

Where to Find Things in the Codebase

API Endpoints

  • Hono routes (current): langwatch/src/app/api/ — each [[...route]]/app.ts is a Hono app
    • traces: langwatch/src/app/api/traces/[[...route]]/app.ts
    • scenarios: langwatch/src/app/api/scenarios/[[...route]]/app.ts
    • prompts: langwatch/src/app/api/prompts/[[...route]]/app.ts
    • evaluators: langwatch/src/app/api/evaluators/[[...route]]/app.ts
    • datasets: langwatch/src/app/api/dataset/[[...route]]/
    • analytics: langwatch/src/app/api/analytics/
    • model-providers: langwatch/src/app/api/model-providers/[[...route]]/
  • Legacy Next.js routes (being migrated): langwatch/src/pages/api/
  • tRPC routers: langwatch/src/server/api/routers/ registered in langwatch/src/server/api/root.ts

Platform UI

  • Route definitions: langwatch/src/utils/routes.tsprojectRoutes object has every page route
  • Sidebar menu: langwatch/src/components/MainMenu.tsx — sections: Observe, Evaluate, Library
  • Feature icons: langwatch/src/utils/featureIcons.ts

MCP Tools

  • All tools: mcp-server/src/index.ts — every server.tool() call
  • Tool handlers: mcp-server/src/tools/*.ts
  • Currently 21 tools: 2 docs, 1 discovery, 3 observability, 4 prompt, 5 scenario, 4 evaluator, 2 model-provider

CLI Commands

  • Entry point: typescript-sdk/src/cli/index.ts
  • Command implementations: typescript-sdk/src/cli/commands/
  • Currently: login + prompt subcommands (init, create, add, remove, list, sync, pull, push)

SDKs

  • Python: python-sdk/src/langwatch/__init__.py (top-level exports), modules: experiment, evaluation, dataset, evaluators, prompts, dspy
  • TypeScript: typescript-sdk/src/index.tsLangWatch class with .prompts, .experiments, .evaluations, .evaluators, .datasets, .traces
  • Scenario SDK (separate): @langwatch/scenario (TS) / langwatch-scenario (Python)

Skills (external, for users)

  • Location: skills/*/SKILL.md
  • Feature skills: tracing, evaluations, scenarios, prompts (each handles both code and platform approaches)
  • Meta skills: level-up (orchestrates all feature skills)
  • Cross-cutting: analytics

Documentation

  • LangWatch docs: served via fetch_langwatch_docs MCP tool, index at https://langwatch.ai/docs/llms.txt
  • Scenario docs: served via fetch_scenario_docs MCP tool, index at https://langwatch.ai/scenario/llms.txt

How to Update the Feature Map

When a new API endpoint is added

  1. Read feature-map.json
  2. Find the feature entry by id
  3. Update surfaces.api with the route namespace
  4. If it's a new feature, create a new entry under the right category

When a new MCP tool is added

  1. Verify the tool exists in mcp-server/src/index.ts
  2. Add the tool name to surfaces.platform.mcp array

When a new skill is created

  1. Verify the skill exists in skills/{name}/SKILL.md
  2. Add to surfaces.code.skill (for code-path skills) or surfaces.platform.skill (for platform-path skills)

When a new CLI command is added

  1. Verify it exists in typescript-sdk/src/cli/commands/
  2. Add to surfaces.code.cli array

When SDK surface changes

  1. Update surfaces.code.sdk with the namespace

When sync capability changes

  1. Move value from plannedSync to sync
  2. Or set new plannedSync for future plans

When a completely new feature is added

  1. Decide which category it belongs to based on the hierarchy rules above
  2. Create a new entry with all known surfaces
  3. Set sync appropriately
  4. Consider: does it need a skill? A docs page? MCP tool?

Validation

After any change, verify:

  • Every api value corresponds to a route in langwatch/src/app/api/ or langwatch/src/pages/api/
  • Every mcp tool name appears in mcp-server/src/index.ts
  • Every skill name has a skills/{name}/SKILL.md
  • Every cli command exists in typescript-sdk/src/cli/
  • Every ui route exists in langwatch/src/utils/routes.ts
  • No aspirational entries (use plannedSync for future intent)

Task

$ARGUMENTS

Install via CLI
npx skills add https://github.com/langwatch/langwatch --skill feature-map
Repository Details
star Stars 3,297
call_split Forks 322
navigation Branch main
article Path SKILL.md
More from Creator