Trace Codes logo

Trace Codes

Organization
Calibre-Labs
trace-codes

Turn free-form notes from reading agent traces into trace codes: named, yes/no failure or quality patterns with definitions, examples and counts. Use this skill whenever someone has annotated traces or review notes and asks to "cluster my notes", "create trace codes", "find the failure modes", "do error analysis on these annotations", "what patterns are in these traces", or "what should we fix first". Also use to merge new notes into an existing set of codes. Output is a trace codes file, a labeling sheet for human review, and proposed rubric updates.

Overview

PublisherCalibre-Labs
Repositoryreforge-ai-evals
Skill nametrace-codes
Stars
94
Forks
9
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by Calibre-Labs on GitHub. Read the source before you install it.

Installation

Install the Trace Codes AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Calibre-Labs/reforge-ai-evals/tree/main/skills/trace-codes
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Calibre-Labs/reforge-ai-evals.git /tmp/reforge-ai-evals
mkdir -p .claude/skills
cp -r /tmp/reforge-ai-evals/skills/trace-codes .claude/skills/trace-codes
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Trace Codes in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Trace Codes on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Trace Codes is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Trace codes skill

Trace analysis has three steps: build a set of inputs and run the agent, read the traces and write notes, then cluster the notes into codes. A person does the reading. This skill does the clustering and everything that follows from it.

A trace code is a short name for one pattern seen across traces, defined so that anyone can answer yes or no for a single trace. Codes become the vocabulary for the rubric, the backlog and the automated evals.

Do not write the notes yourself. If the user has traces and no notes, tell them to read and annotate at least ten first. Reading is where product judgment comes in, so a person does it. You may help them read faster (summarize a long trace, point at the tool calls) but the observations must be theirs.

Inputs

InputRequiredTypical form
NotesYesA CSV or JSON with a trace id and a free-text note per trace, pasted text, or a review page that stores notes (see below).
TracesHelpfulThe files or folder the notes refer to, so examples can quote what happened
RubricHelpfulThe current eval rubric, to map each code to a line
Existing codesIf anyA previous trace codes file to merge into

Find these in the working folder before asking. If the notes have no trace ids, number them and say so.

Workflow

Step 1. Split notes into observations

One note often contains several observations ("stale revenue number, also no source for the third company, good scoping question"). Split each note into single observations and keep the trace id with each. Keep positive observations too. A code can describe something the agent should keep doing.

Step 2. Cluster into codes

Group observations that describe the same pattern. For each group write:

  • Title: three to six words, descriptive, no jargon the team would not use.
  • Definition: one sentence that can be answered yes or no for a single trace. Start with "The agent ..." or "The output ...".
  • Examples: two or three, each with the trace id and a short paraphrase of what happened. Quote the trace when it is available.
  • Count: how many traces show it, out of how many were annotated.

Rules:

  • Codes must not overlap. If two definitions would both say yes for the same reason on the same trace, merge them or redraw the line between them.
  • Split a code when its examples have different causes or would need different fixes.
  • Do not force every observation into a code. List the leftovers under "Unclustered" with their trace ids. Leftovers are often the start of the next code.
  • Expect six to twelve codes from ten to thirty traces. Far more than that usually means the codes are too narrow.
  • Use the reviewer's words where possible. Do not import a generic taxonomy.

Step 3. Tag each code

Add three tags to every code:

  • Rubric group: outcome, trajectory, governance or experience.
  • Rubric line: the ID of the line it relates to if a rubric exists, and whether that line caught it, caused it, or nothing covers it.
  • Layer, when the trace shows it: context (the model had the information and misused it), retrieval (the wrong or stale information came in), harness (the code around the model did or failed to do something) or systems (cost, latency, a tool or API failing). Write "unknown" if the notes and traces do not show the cause. Do not guess.

Step 4. Recommend the next step for each code

Work through these questions in order:

  1. Was the agent ever told to handle this? If not, it is a specification gap. Recommend a prompt or PRD change, not an eval.
  2. Does it work in some cases and fail in others? If it never works, recommend a design change (a tool, a retrieval step, a different architecture), not an eval.
  3. If it works inconsistently, it needs an eval. If a rule on the trace can decide it, recommend a code-based eval. Otherwise recommend an LLM judge.

Step 5. Prioritize

Rank codes by how often they occur and how much each one costs the user or the business. An irreversible or trust-breaking failure outranks a frequent cosmetic one. If user feedback exists (tickets, thumbs, complaints), note which codes it supports. Name the top three.

Step 6. Propose rubric changes

If a rubric exists, list the changes the codes imply, one per line: add a line, sharpen a line, or no change because an existing line already caught it. Do not edit the rubric here. Offer to run eval-rubric in v2 mode with these codes.

Output

Save three files in the working folder:

  1. trace-codes.md: a summary table (code, definition, count, rubric group, layer, next step), then one section per code with its examples, then Unclustered, then proposed rubric changes.
  2. trace-codes.csv: one row per code with the same fields, for other skills and tools to read.
  3. trace-labels.csv: one row per annotated trace and one column per code. Pre-fill a cell with suggested only where the reviewer's own note supports it. Leave the rest blank. The reviewer confirms or corrects every cell with yes or no. These human labels are what judges get calibrated against later, so never present suggestions as labels.

In the reply, give the number of traces and codes, the top three codes with counts, and the one question the reviewer should settle first (usually a code with a fuzzy boundary).

When the notes live in a review page

If the notes are in a published review page with its own database (such as one built with trace-review-app), read them from the page instead of asking for an export. Then write the result back so the team sees it in the page, in one document at codes/current:

json
{
  "generated": "2026-10-28T16:40:00Z",
  "from": "18 notes by 2 reviewers",
  "codes": [
    {"name": "Cites a link it never opened",
     "definition": "Yes if a cited source was not in what search returned, or does not open.",
     "count": 3, "traces": ["trace-06", "trace-09", "trace-01"],
     "example": "Trace 6: the Okta press release link is a 404.",
     "next": "Write a check"}
  ],
  "rubric": [{"change": "New", "id": "G5", "line": "Cites only pages it opened in this session."}]
}

traces uses the page's own trace ids. rubric is optional; eval-rubric in v2 mode can add it later. Writing replaces the previous codes, so keep a copy of anything worth keeping first. Still save the three files below.

Merging new notes into existing codes

When a trace codes file already exists, assign new observations to existing codes first. Create a new code only when several observations fit none. Report what changed: counts that moved, new codes, and codes that should now be split or retired. Keep code titles stable so earlier labels stay valid.

Knowing when to stop reading

If the last ten traces produced no new code, the reviewer has likely seen enough for this version of the agent. Say so. Reading starts again whenever the agent changes in a meaningful way: a new tool, a new prompt, a new model.

Working notes

  • Paraphrase examples. Strip names, emails and other personal data from anything quoted.
  • A code that only one reviewer can apply is not finished. Rewrite the definition until a second person would give the same answer.
  • Counts from ten traces tell you the order of the codes. They are too few to report as percentages of production traffic.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Trace Codes AI skill do?

Turn free-form notes from reading agent traces into trace codes: named, yes/no failure or quality patterns with definitions, examples and counts. Use this skill whenever someone has annotated traces or review notes and asks to "cluster my notes", "create trace codes", "find the failure modes", "do error analysis on these annotations", "what patterns are in these traces", or "what should we fix first". Also use to merge new notes into an existing set of codes. Output is a trace codes file, a labeling sheet for human review, and proposed rubric updates.

Why use Trace Codes on TypingMind?

Because you install it once and use it with any model. Trace Codes is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Trace Codes in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Calibre-Labs/reforge-ai-evals/tree/main/skills/trace-codes. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Trace Codes?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Trace Codes?

As many as you like. As long as a model supports skills, you can use Trace Codes with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Trace Codes AI skill free?

Yes. It is published on GitHub by Calibre-Labs under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇