agentsclimarketplace

Xp update

Skill opahimmel/experience-database/xp-system/skills/xp-update

Writes knowledge infusions from the current session into .xp/db.jsonl. Use it with /xp-update at the end of a session or whenever the user explicitly asks for it.From its SKILL.md

Install
npx -y skills add opahimmel/experience-database --skill xp-update

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.1 KB, 974 tokens by cl100k_base, as published. Nobody here has run it

xp-update

Write directly, then show the marker snippet. No exploring. Session knowledge only.

Precondition

.xp/db.jsonl must exist. If not → call /xp-index first.

Purpose

The XP-System is a semantic blueprint of the codebase. Each entry describes a labeled symbol so that a new agent, after one grep, understands within 30 seconds what it is, what it's connected to, and what isn't in the code.

Not exception knowledge. Baseline knowledge.

Process

1. What gets entered?

Every symbol that was tagged with an @xp marker in this session, or already carries one whose note is outdated or incomplete.

An entry answers three questions:

QuestionWhat belongs in it
What is it?Semantic role, not syntax — what the symbol means in the system
What does it connect to?Direct dependencies, consumers, related concepts in the system
What isn't in the code?Implicit contracts, naming discrepancies, edge cases, traps

2. Filter

CheckResult
Already in db.jsonl? (grep "slug" .xp/db.jsonl)Upsert — old line gets replaced
Entry outdated / irrelevant?Actively delete the line (upsert without appending) or omit it
Would the note add nothing beyond the readable code?Add it anyway — semantic role + connections still count

3. Write the entry (upsert)

Format:

{"id": "domain:slug", "keywords": ["natural-language", "search", "terms"], "note": "Semantic role. Connections + why. Traps or implicit contracts.", "files": ["src/relevant.ts"], "file_hash": "abc123", "updated": "YYYY-MM-DD"}

keywords — natural-language terms from how the task was described, not code symbols. Goal: grep -i "ordering" hits the entry sequencer:resolve-chain. At least 3, at most 8 keywords per entry.

Determine the file hash:

git hash-object src/relevant.ts

Upsert — replace existing id, append new ones:

python3 -c "
import json, sys
new = json.loads(sys.argv[1])
lines = [l for l in open('.xp/db.jsonl') if json.loads(l)['id'] != new['id']]
lines.append(json.dumps(new, ensure_ascii=False) + '\n')
open('.xp/db.jsonl', 'w').writelines(lines)
" '<JSON>'

No appending without checking first. No status: obsolete. No duplicates.

The note — density over completeness:

Everything in one or two sentences. Three aspects, no filler.

"Shape is an interface in types.ts" — syntax, not semantics ❌ "Refactored Shape today" — session diary ✅ "Central canvas data structure — stored in the DB as canvas_object (naming discrepancy). ShapeNormalizer must run before every render call, or it crashes. Consumers: RenderEngine, ExportService." — role + connections + trap ✅ "Single entry point for all API errors — handling elsewhere is not caught. Connects to Logger and ResponseBuilder. Naming convention: E_USER_ prefix for user-facing errors." — semantics + topology + contract

4. Split vs. merge

One entry = one precise hit. Cramming multiple facts into one note creates exactly the noise the XP-System is meant to avoid: someone searching for _frameAssignments would otherwise also get name-migration context along with it.

Split when:

  • the facts can become true/done independently of each other (one can be finished while the others aren't)
  • a user would plausibly search for only one of the facts, not all of them

Merge when:

  • the facts are inseparable — neither makes sense without the other
  • one fact without the other would be misleading

Cluster term: when several slugs belong to the same effort, add a shared term to all their keyword arrays (e.g. "frame-labels-rollout"). A broad search then hits all of them; a precise search hits only one. No depends_on field needed — the domain prefix in the id (frame-labels:) acts as an implicit cluster when grepping.

5. Display

Show all new or changed entries.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,537. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.