Anthropic's skill guidance: keep SKILL.md under 500 lines, split into reference files linked one level deep as it nears that. using-scribe was 478 and every new practice lands there. - SKILL.md 478 -> 317 lines. It keeps orientation, one copy, the reflexes, scope, the judge section, UI and the process-skill index, plus a "Read these when the moment comes" list naming each file with its moment. - projects.md: binding a non-git directory (.scribe) and project inception. - writing-records.md: where a new rule goes, lesson growth, and notes that carry their own check (reflex 10 keeps a pointer). - missed-retrieval.md: the record-before-dial route, verbatim. - Text moved, not rewritten, except for the seams and one cross-reference. Tests: - tests.helpers.skill_text reads SKILL.md plus its reference files. The ownership registry, the miss-route and the verification tests use it, so a topic stays owned by its skill whichever file holds it. - The force test scans every skill .md on its own, since each file is read on its own. - New test_skill_structure: SKILL.md <= 350 lines, every reference file is linked from SKILL.md, none links another, and one over 100 lines opens with Contents. Each guard is shown to fail. The plugin version is minted. That also clears 4fb53b8's red Plugin hooks lane, which failed only because PACKAGING.md changed without a mint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.0 KiB
Projects: binding a directory, and starting one
Part of the using-scribe skill. Read it when a working directory maps to no project, or when a new project is about to be created.
Binding a directory to a project
A directory does not have to be a git repo to have a project. A repo is
bound by its remote (list_repo_bindings shows the bindings). Anything else —
a notes folder, a server's config directory, a scratch directory — is bound by
a .scribe file naming the project:
{"instance": "https://scribe.example.com", "project_id": 2, "project": "Homelab"}
instance is what makes the id trustworthy. An id means nothing on its own —
it is a different project on every Scribe — so a marker that has travelled to
another instance is ignored rather than followed to the wrong project. A bare
2 also works when writing the file by hand. When work plainly belongs to a
project and the directory names none, offer to write the marker;
list_projects has the id.
Starting a project: decide what it inherits
A project's inheritance is a decision, not a default. Before
create_project, ask the operator the two inception questions and pass the
answers — never create a project bare by default:
- which design system its UI is built from (
list_design_systems; or none) →design_system_id=<id | -1> - whether to seed the standard starter Systems so records can be tagged
from day one →
seed_systems=true|false
Rules are not an inception question: a global rule already applies to every project, and a project's own rules are written on it as they come up.
If enter_project returns an inception key, the project was never decided
(it inherits its defaults silently): raise that ask once, with the defaults it
carries, then decide_project_inception(project_id, …). Existing projects
were stamped "legacy" and do not ask; any project can be re-decided. The
design-system and Systems tools still work one at a time — inception is the
moment they are decided together, and the record of why.