BouletteProof

Context Steward — AI skill for Claude Code

AI community

Load skills dynamically.

How to install Context Steward

This entry records only its repository, not the path inside it, so there is no exact command to give. Open BouletteProof/context-steward and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Context Steward does

Load skills dynamically. Learn what works. Works with any LLM. MCP server for Claude Desktop, Claude Code, and Cursor.

Alternatives in AI

  • Firecrawl MCP Server — 🔥 Official Firecrawl MCP Server - Adds powerful web scraping and search to Cursor, Claude and any other LLM c 6.1k ★
  • Jcodemunch MCP — Cut AI token costs 95%+ on code exploration 2.6k ★
  • Metaharness — 🛠️ The meta-harness for AI agents — scaffold your own focused, branded agent harness with its own npx CLI, MC 616 ★

README

context-steward

**Load skills dynamically. Learn what works. Works with any LLM.**

MCP server for Claude Desktop, Claude Code, and Cursor.


The problem

You have 10 skill files. Your agent loads all of them into the system prompt. That's 15,000 tokens burned before the task starts — whether the agent reads them or not.

On a 32K model, that's 47% of your context gone. And you have no idea which skills actually help.

How it works

Lazy loading

Skills are MCP tools. Zero skill content in the initial prompt.

When your agent hits a task, it calls:

load_skills({ task: "refactor the auth module" })

context-steward finds the relevant skill, returns it with a `contextId`, and content enters context only when needed — right before generation. The `contextId` is a handle: pass it back later to link outcome feedback to the specific skill that was used.

Feedback loop

After the task, report what happened — not a score:

report_outcome({
  contextId: "abc123",
  signal: "praised",
  notes: "Clean decomposition, all types correct, user said 'perfect'"
})

**Signals** are observable conversation events:

Signal When to use Derived score
praised User explicitly said good/great/perfect 0.95
used_as_is User accepted and moved to the next topic 0.70
revised User asked for specific changes 0.40
rejected User said no, start over, dismissed output 0.15
redone_by_user User did it themselves after seeing the attempt 0.10

Why signals instead of scores? Because a model scoring its own work is unreliable — it will always be generous with itself. Signals are binary observations: did the user accept it or not? Did they ask for changes or not? No subjectivity in the observation.

The "derived score" column is a deterministic mapping used only for aggregation and ranking. It's not a judgment; it's a sort key.

Over time, skills accumulate signal history:

$ context-stewa