Catalog authoring
One-command harness distribution for coding agents — a versioned YAML catalog projected into agent instructions, skills, and deterministic git gates.
npx -y skills add niksavis/basicly --skill catalog-authoringAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 24 days oldThe repository was created 24 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 1 stars1 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.
What its author says it does
Copied from the file, not written here
Author and improve basicly catalog sources — skills and fragments — in their YAML source format (never a discoverable .md), then project and verify them. Use when adding or editing a skill or fragment, building a catalog, or deciding where guidance should live (always-on fragment vs on-demand skill).
SKILL.md
5.6 KB, as published. Nobody here has run it
Catalog Authoring
Scope
Owns authoring the two projected catalog content types — skills and fragments — in their non-discoverable YAML source format, and projecting them to the files coding agents actually load.
- A fragment is always-on guidance merged into the projected
CLAUDE.md,AGENTS.md, andcopilot-instructions.md(and, when scoped, into per-path rules/instructions files). Keep it terse; point at commands, do not restate mechanically-enforced rules. - A skill is an on-demand runbook projected to
SKILL.mdat the target skill roots and loaded only when itsdescriptiontrigger matches.
The non-negotiable rule: sources are never named for discovery
Coding agents auto-discover context by filename/extension — SKILL.md,
AGENTS.md, CLAUDE.md, *.instructions.md, *.mdc, GEMINI.md. So catalog
sources are authored as YAML (skill.yaml, <id>.fragment.yaml) and the
discoverable .md is emitted only at the target roots by the projector. Never
add a SKILL.md or *.fragment.md under .basicly/core/; the catalog lint
gate rejects it.
Author a skill
- Scaffold:
basicly catalog new skill <slug>writescore/skills/<slug>/skill.yaml. - Fill in
name(must equal the slug), a strong one-linedescription(the discovery trigger — state when to use it), and theinstructionsbody as a|literal block scalar (markdown, indented two spaces). - Project + verify:
basicly skills-buildthenbasicly skills-check.
Author a fragment
- Scaffold:
basicly catalog new fragment <id> --category <category>writescore/fragments/<category>/<id>.fragment.yaml. - Fill in
id,description,category,applies_to(e.g.[all]), and thebodyblock scalar. Optional:priority,tags,status,title,scope.paths(path-scoped rules), and thereplaces/overrideoverlay fields. - Project + verify:
basicly buildthenbasicly check.
Technology scoping
A source that only makes sense for one stack or environment tool declares
technologies: [python] (skills, fragments, agents, and hooks all accept it);
an untagged source is universal and always ships. Values come from the
controlled vocabulary in basicly.schema.TECHNOLOGIES (stack tags plus
environment tools like zsh/tmux) — catalog lint rejects anything else.
Consumers narrow what they receive with basicly install --technologies ...;
don't tag a source unless it is genuinely useless outside that technology.
Phrasing rules for guidance bodies
Distilled from Anthropic's memory/best-practices docs and the curated CLAUDE.md corpus (2026-07 research, epic basicly-84v):
- Concrete and verifiable beats vague intent: "use 2-space indentation" works, "format code properly" does not.
- Put runnable commands in code fences — a fenced command is run verbatim, a command described in prose gets improvised on.
- Pair every prohibition with the alternative the agent should take instead; a bare "never X" leaves it stuck.
- Give a one-clause rationale so the rule generalizes beyond its literal case.
- Emphasis is a scarce resource: at most one
IMPORTANT-style marker per projection, or every marker becomes invisible. - Every rule should trace to a real incident, not a hypothetical one; the quirks category exists for exactly those.
- Apply the deletion test before adding a bullet: would removing it cause the agent to make mistakes? If not, leave it out.
YAML source shape
Every source starts with a # yaml-language-server: $schema=... header (editor
and agent validation against core/schemas/) and a schema_version. The prose
body is a literal block scalar so markdown round-trips losslessly:
# yaml-language-server: $schema=../../schemas/skill.schema.json
schema_version: 1
name: my-skill
description: What it does and when to use it.
instructions: |
# My Skill
...
Gate
basicly catalog lint schema-validates every source, forbids .md-named
sources under the catalog, and forbids non-.yaml YAML there. It runs on
commit and in CI — run it locally before committing.
Verify against what the agent is told, not the file you edited
The projected file is not the delivered artifact. A host may substitute or fall back, so a change that reads correctly in the projection can land differently in the agent's context — and a size claim measured on the source can be a fraction of the real one.
The concrete case (basicly-m4zv.1): a user-invoked skill projects no
description:, and Claude Code then fills that slot from the first body
line, which is the generated drift marker. The measured 430-character saving
was really 157, and the entry went on advertising a string — just a useless one.
It surfaced only because the change showed up in the authoring session's own
skill list, after the commit.
So when a change alters what an agent is told:
- Read it back where the agent reads it — the advertised skill list, the always-on file as loaded, the rule as injected — not the file you edited.
- Re-measure any size or cost claim on the delivered artifact before writing a figure into a design document. A number measured on the source is a guess about the host.