Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add jimmc414/claude-code-plugin-marketplace --skill propagate-then-searchgit clone --depth 1 https://github.com/jimmc414/claude-code-plugin-marketplaceWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/jimmc414/claude-code-plugin-marketplace/propagate-then-search)<a href="https://agentmods.dev/skills/jimmc414/claude-code-plugin-marketplace/propagate-then-search"><img src="https://agentmods.dev/badge/skills/jimmc414/claude-code-plugin-marketplace/propagate-then-search/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/jimmc414/claude-code-plugin-marketplace/propagate-then-search"><img src="https://agentmods.dev/badge/skills/jimmc414/claude-code-plugin-marketplace/propagate-then-search.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00027 | $0.00808 |
| Opus 5 | $0.00014 | $0.00404 |
| Sonnet 5 | $0.00005 | $0.00162 |
| Haiku 4.5 | $0.00003 | $0.00081 |
Grade A, and why
propagate-then-search scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 12d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 123 lines — stays where its author put it; the contents beside it link to each section on GitHub.
propagate-then-search
When to Use
- Constraint satisfaction problems
- When assigning one value constrains others
- Large search space that can be pruned
- Sudoku, scheduling, puzzles with rules
When NOT to Use
- No constraint propagation possible
- Constraints are independent
- Simple brute force is fast enough
The Pattern
Propagate: When you assign a value, infer all consequences. Search: Only guess when propagation can't proceed.
def solve(problem):
"""Solve by alternating propagation and search."""
state = propagate(problem.initial_state)
if state is None:
return None # Contradiction during propagation
if is_complete(state):
return state
# Search: make a guess and recurse
return search(state)
def search(state):
# Choose variable with fewest remaining options (MRV)
var = min(unassigned_vars(state),
key=lambda v: len(possible_values(state, v)))
for value in possible_values(state, var):
new_state = assign(copy(state), var, value)
new_state = propagate(new_state)
if new_state is not None:
result = solve(new_state)
if result is not None:
return result
return None # All values failed
Example (from pytudes Sudoku.ipynb)
def solve(grid):
return search(parse_grid(grid))
def search(values):
"""DFS with constraint propagation."""
if values is False:
return False
if all(len(values[s]) == 1 for s in squares):
return values # Solved!
# MRV: choose unfilled square with fewest possibilities
n, s = min((len(values[s]), s)
for s in squares if len(values[s]) > 1)
# Try each possibility
for d in values[s]:
result = search(assign(values.copy(), s, d))
if result:
return result
return False
def assign(values, s, d):
"""Assign d to square s; propagate constraints."""
other = values[s].replace(d, '')
if all(eliminate(values, s, d2) for d2 in other):
return values
return False
def eliminate(values, s, d):
"""Remove d from values[s]; propagate consequences."""
if d not in values[s]:
return values # Already gone
values[s] = values[s].replace(d, '')
# Rule 1: If square has no possibilities, fail
if len(values[s]) == 0:
return False
# Rule 2: If square has one possibility, eliminate from peers
if len(values[s]) == 1:
d2 = values[s]
if not all(eliminate(values, s2, d2) for s2 in peers[s]):
return False
# Rule 3: If only one place for d in unit, assign it there
for u in units[s]:
places = [s2 for s2 in u if d in values[s2]]
if len(places) == 0:
return False
if len(places) == 1:
if not assign(values, places[0], d):
return False
return values
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 12d ago First seen · 123 lines · 27 tokens per session scan A aa29e6c0835e
propagate-then-search is a skill published in the GitHub repository jimmc414/claude-code-plugin-marketplace (4 stars, last pushed today), licensed MIT. It adds 27 tokens to every session and 808 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
audit-progressive-disclosure
Read-only progressive-disclosure audit for agent-facing instruction markdown. Grades every target against a three-tier load-cost model (always-loaded / invocation-loaded / on-demand) and classifies seven finding shapes in two lanes: split opportunities (oversize vs tier-calibrated Anthropic-prescribed caps…
quiz-me
Post-work comprehension check: after a change is complete, generate a self-contained HTML report of what was done (context, intuition, decisions) with a quiz at the bottom for the user to answer. Verifying the HUMAN absorbed the work, not the artifact. Non-gating by default; the quizpolicy userConfig tunes offer…
shape
Shape the assistant's output for a reader with ADHD, and anyone who wants action-first, low-friction responses. Lead with the concrete next action, number multi-step work, restate state across turns, cap and rank lists, give concrete time estimates, make wins visible, and cut preamble, recap, and closers. Use when…
generate
Build a source-backed AI industry briefing from official vendor publications, configured RSS feeds, GitHub releases, reputable secondary reporting, and user-supplied URLs. Use when: 'ai briefing', 'ai news', 'what's new in AI', 'catch me up on AI', 'prep for AI meeting', 'AI roundup', or 'generate AI slides'.
audit-comment-residue
Classify code comments for four residue shapes. History narration ("used to… now…"), plan/session references ("Task 2 replaces the old…", "in this PR"), conversational antecedents ("per your request", "as you asked"), and ticket/PR/branch back-references a future reader will never see. Emitting Tier 1 (remove) and…
eli5
Dead-simple VISUAL explainer. Produces a visual HTML explainer that assumes zero prior knowledge: one idea per diagram, minimal text. Works on a codebase object (a module, a tradeoff, an incident) or a general concept, and grounds in the real artifact before drawing anything. Use when: 'ELI5', 'explain like I'm five'…