reference
Skill528 starsChanged 41 days agoApache-2.0View on GitHub
Use when implementing or evaluating reference coverage for a semantic-conventions changeset involving GenAI spans, attributes, entities, metrics, or events across Python libraries.
8 other projects use a version of this.
Adopted by
Most recently taken up by
- yuri-xyz/skillstheir own version, first seen Nov 8, 2026
- ku5ic/claude-kittheir own version, first seen Nov 4, 2026
- ajitta/know-your-unknownstheir own version, first seen Oct 27, 2026
- yacb2/aidextheir own version, first seen Oct 9, 2026
- 20alexl/windvanetheir own version, first seen Oct 8, 2026
- modelstudioai/clitheir own version, first seen Jul 21, 2026
Other versions8 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 8
- modelstudioai/cli★ 369same name
- DeepVista-AI/deepvista-cli★ 9same name
- ajitta/know-your-unknowns★ 2same name
- ku5ic/claude-kit★ 2same name
- yacb2/aidex★ 2same name
- yuri-xyz/skills★ 2same name
- 20alexl/windvane★ 0same name
- seshachalam-yv/etcd-druid-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository5 other files it gives its agents.
- AGENTS.mdAGENTS.md
- reference/AGENTS.mdAGENTS.md
- .github/copilot-instructions.mdCopilot instructions
- pr-descriptionSkill
- unslopSkill
The file
We split this skill into the rules it gives an agent
6 rules. 0 are common, 3 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Use this skill to add or update reference implementations under reference/scenarios/<library>/ when conventions change.
- Very specific: line 12
Find libraries: Check which scenarios under reference/scenarios/ support the changed operation(s).
- Distinctive: line 16
If the library cannot provide a value, do not fake it, leave it unset.
- Very specific: line 17
Update reference/scenarios/<library>/README.md operation table and status.
- Distinctive: line 34
When adding or updating a reference scenario, update its README.md:
- Distinctive: line 53
Good: Read values from SDK arguments or response objects:
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Reference Scenarios Skill
Use this skill to add or update reference implementations under reference/scenarios/<library>/ when conventions change.
Workflow
- Find libraries: Check which scenarios under
reference/scenarios/support the changed operation(s). - Update
scenario.pyandREADME.md:- Wrap real library calls in spans. Call or patch private methods if needed to instrument the library only when it's not possible to do so through the public API.
- Set attributes inline using only real values from SDK inputs, outputs, errors, or library state.
- If the library cannot provide a value, do not fake it, leave it unset.
- Update
reference/scenarios/<library>/README.mdoperation table and status.
- Run and test:
cd reference uv run run-scenario <library> # run scenario and update data.json uv run run-scenario --all # run all scenarios uv run update-reports # update report tables in README.md - Regenerate docs (from repo root):
make generate-all
Scenario README (reference/scenarios/<library>/README.md)
When adding or updating a reference scenario, update its README.md:
- Libraries only: Scenarios are for libraries and SDKs only. Do NOT add application examples.
- Short description: 1-2 sentences explaining what the library is (e.g. model-call boundary, agent framework) and what it owns vs delegates.
- Operations table: List relevant operations and their status:
| Operation | Should be instrumented here | Status |
| --- | --- | --- |
| inference (`chat`) | Yes - calls model directly | ✅ Implemented |
| execute_tool | No - app runs tools | ➖ Not instrumentable |
| retrieval | Yes - Vector Stores search | ❌ Not implemented |Good vs Bad Patterns
1. Where values come from
Good: Read values from SDK arguments or response objects:
# 'model' is an SDK parameter; response fields come from the SDK object
with tracer.start_as_current_span("chat", attributes={"gen_ai.request.model": model}) as span:
response = client.chat.completions.create(model=model, messages=messages)
span.set_attribute("gen_ai.response.id", response.id)
span.set_attribute("gen_ai.usage.output_tokens", response.usage.completion_tokens)Bad: Hardcoding values or using fake test data:
# Bad: hardcoded value not returned by SDK
span.set_attribute("gen_ai.agent.name", "my-agent")
# Bad: reading from test config instead of SDK request/response
span.set_attribute("gen_ai.response.model", test_config["expected_model"])2. Set attributes inline
Good: Set attributes right next to the SDK call:
with tracer.start_as_current_span("invoke_agent") as span:
result = agent.invoke(prompt)
span.set_attribute("gen_ai.agent.id", agent.id)Bad: Hiding attribute logic in helper functions:
with tracer.start_as_current_span("invoke_agent") as span:
result = agent.invoke(prompt)
_set_attributes(span, agent, result) # Hides where values come from3. Span boundaries
Good: Span wraps the specific library call representing the operation:
with tracer.start_as_current_span("chat") as span:
response = client.chat.completions.create(model=model, messages=messages)Bad: Span wraps scenario setup, multiple calls, or application loops:
# Bad: wraps multiple separate calls and setup code
with tracer.start_as_current_span("chat"):
setup_environment()
resp1 = client.chat.completions.create(...)
resp2 = client.chat.completions.create(...)
# Bad: wraps custom application logic instead of instrumenting library API
with tracer.start_as_current_span("invoke_agent"):
for step in app_steps:
process_step(step)Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

