Skip to main content
This tutorial shows how DecimalAI tracks your agent’s skills — from initial discovery through activation detection and effectiveness analysis. By the end, you’ll know which skills are working and which need improvement.

The Scenario

You have a coding assistant with 3 skills: code-review, sql-optimizer, and deploy-checklist. You want to know:
  • Which skills are being used most?
  • Which version of code-review performs best?
  • Should you keep deploy-checklist or retire it?

1

Auto-Discover Skills

Your skills live in .claude/skills/ as SKILL.md files:
Initialize DecimalAI — skills are discovered automatically:
No configuration needed. The SDK scans standard directories, parses SKILL.md frontmatter, and registers the skill registry.
You should now see: startup logs reporting the synced skill count, and all three skills listed on your installed skills page. If the log reports 0 skills, discovery found nothing — check the files live under a standard project-local directory like .claude/skills/ (personal/global directories are opt-in; see skill discovery) and that each SKILL.md has valid frontmatter.
2

Run Your Agent

Your agent handles requests as normal. For each trace, the SDK detects which skills were activated by comparing the LLM’s rendered prompt against known skill bodies.
No extra code needed — activation detection is automatic across all framework integrations.
You should now see: each trace’s detail view listing the skill(s) whose body reached the model under Active skills. If traces arrive with no active skills, the body probably never reached the model — a menu row alone (name + description) counts as offered, not used. See the silent no-ops list at the bottom of this page.
3

View Skill Analytics

After accumulating traces, check the Skills page in the dashboard. Each skill shows:
  • Activation count: How many traces used this skill
  • Pass rate: % of skill traces that passed evaluators
  • Effectiveness: Composite score
  • Trend: Improving, stable, or declining
Example data after 1 week:
deploy-checklist is barely used and performs poorly. Consider retiring it or rewriting the instructions.
4

Improve a Skill

Edit the code-review SKILL.md to add better instructions:
Restart your agent. The SDK detects the content hash changed, creates v2, and registers a new manifest version.
5

Compare Versions

After v2 collects traces, compare the two versions:The improved instructions are catching more security issues. DecimalAI’s comparison includes statistical significance testing — so you know the improvement is real, not noise.

Smart Routing (Bonus)

When you have many skills, use smart routing to select the best ones for each query:
Smart routing combines semantic similarity with historical effectiveness — skills that perform well on similar queries get boosted.

Key takeaway: DecimalAI turns skills from “static instructions” into observable, measurable, improvable components. You can see exactly which skills contribute to good outputs, which need improvement, and which should be retired — all backed by production data, not guesswork.

If a skill never shows up

Skill plumbing fails quietly by design — the agent keeps running with fewer skills instead of crashing. These are the usual suspects: The SDK is deliberately fail-open: a misconfiguration degrades quietly instead of crashing your agent. These are the six places that bites, in the order people hit them.
Browsing or previewing a skill on the public registry doesn’t make it routable — you have to adopt it into your org first. Either way works — Use (router.use("name") or the Use button) creates a linked pointer that tracks the author’s updates, and Fork (router.fork("name"), or router.install("name") to also write it to disk, or the Fork button) creates an editable copy you own. The Skill Router offers both. If you use per-agent assignments, also assign it to the requesting agent. Until you Use or Fork it, the skill never appears in your agent’s menu, with no warning anywhere.
By default build_prompt_fragment injects one-line menu rows (name + description). The skill’s actual instructions reach the model only if you pass inject_body=True to the SkillRouter (smart-routed queries), or enable the load_skill tool so the model can pull bodies on demand. Menu rows count as offered — usage panels show rung-labeled counts for them, and activation isn’t measurable for bare prompt-injection usage. If a skill “isn’t working,” check whether its body ever actually reached the model.
The on-demand body loader is opt-in: pass enable_skill_loader=True to install() on the openai_agents or pydantic_ai adapters. On the anthropic adapter there is no tool loop — enable_skill_loader=True there injects the skill menu into system (the offered rung only); add init(inject_skill_body=True) if you want full bodies delivered, and note enable_load_skill_tool is accepted but dormant. Kill-switch: init(load_skill_tool=False) or DECIMALAI_LOAD_SKILL_TOOL=0.
decimalai.init(langchain=True) (and every other framework flag) logs a warning and continues untraced when the framework package isn’t importable — your agent runs, nothing is recorded. The same applies to DECIMAL_AUTO_TRACE (auto-init warns and skips) and to the raw-provider flags (openai=True etc.), which soft-skip when the matching OpenInference instrumentor is absent. Fix: for a framework flag, install the matching extra, e.g. pip install "decimalai[langchain]"; for a raw-provider flag, install the instrumentor package the startup warning names, e.g. pip install openinference-instrumentation-openai (the [openai] extra covers only the provider SDK, not the instrumentor). Then re-check startup logs.
Adapters only inject skills into prompt shapes they can safely rewrite. On openai_agents, an agent whose instructions is a user-supplied callable is left untouched; on langchain, a prebuilt PromptValue (or any unrecognized prompt shape) passes through unchanged. The agent runs normally — with zero skills injected and no error raised.
The regression check needs two things before it can say anything real: a baseline manifest (recorded automatically on the Action’s first run, or by decimalai.init() running in production) and ingested traces to measure blast radius against. A fresh workspace legitimately reports “first run — no baseline” and then near-zero affected traces. That’s honesty, not breakage — reports gain weight over days as production trace volume accumulates.

You’ve done it

Auto-discovered skills from .claude/skills/ in production traces
Inspected per-skill activation counts and effectiveness scores
Used smart routing to select the best skills for each query

Next Steps

Skills Guide

Versioning, forking, publishing to the public registry.

Skills Registry

Browse community skills ranked by SkillScore.