Replies: 1 comment 1 reply
-
|
Small data point from building/shipping a context/rules sync package ( 1. Portability tierThe label that survives contact with authors is not portability:
tier: universal | portable-with-adapters | project-local
tested_on:
- claude-code
- cursor
required_capabilities:
- file.read
- file.write.overwrite
- shell.exec.git
project_assumptions:
- path: justfile
required: false
known_lossy_targets:
- target: claude-ai
reason: target file tool has different overwrite semantics
evidence:
smoke: .tome/smoke/decision-memo.yml
last_verified: 2026-05-18Two things keep it honest:
The social trick is to make 2. Open format enumI would reserve a namespace before you need it. The collision is usually not name spelling; it is divergent semantics under the same friendly name. Example shape: format: cursor-rules
format_version: cursor-rules@2026-05
capability_profile: cursor-rules/scoped-mdc-v1
renderer: tomevault/cursor-rules@0.1.0Open enum is fine, but I’d pair it with a capability/fidelity report. Unknown renderers can skip, but they should not silently imply equivalence. “Rendered, but lost path scoping / alwaysApply / overwrite semantics / tool access semantics” is much more valuable than success/fail. 3. Cross-bundle compositionThe first primitive I’d keep very boring:
The mistake I’d avoid in draft-01 is making dependencies feel like package-manager dependencies too early. For AI instruction bundles, semantic override and authority matter more than install convenience. “Which bundle is allowed to define the release process?” is a more dangerous question than “can I fetch this markdown?” 4. Strict security defaultDeny-by-default can hold if declarations are partly generated and diffable. If authors manually write permissions from scratch, adoption pressure tends to produce “just grant all”. A better workflow is:
So the security block is not just policy; it is also review UX. If I were narrowing draft-01, I’d optimize for three outputs: a portability lint report, a fidelity/loss report per target, and a lockfile diff that makes new authority/security claims obvious. That gives maintainers something concrete to review instead of trusting manifest prose. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
We are drafting tome.yaml, a manifest for bundling AI instruction files (CLAUDE.md, AGENTS.md, .cursorrules, SKILL.md skills) into one portable unit with a lockfile and a security block. It sits a layer above AGENTS.md: AGENTS.md is one file for one tool, tome.yaml declares the bundle and the formats to render it into. We are not trying to replace AGENTS.md or compete with the Agent Rules work; this is the layer up.
We have shipped this on exactly one real bundle so far, our own (this repo), and we are about to ship it on more. Before we lock draft-01 we want input from people who have shipped systems shaped like this in production, because theory is not telling us where it breaks.
Spec: https://tomevault.io/docs/tome-yaml
Four things we cannot answer from theory. Answer any one that matches something you have actually shipped; two sentences of real experience is worth more to us than a long opinion.
1. Portability tier. We are adding a per-component flag marking whether a bundled instruction file is portable to any project or assumes our specific setup (hardcoded paths, internal scripts). Has anyone shipped a per-component portability or scope flag that authors did not simply game by marking everything portable? If you kept the labels honest, what did it: lint, scoring, gating, social pressure, or nothing?
2. Open format enum. Our manifest declares render targets by a
formatstring, left as an open enum so we are not the bottleneck every time a new AI tool ships a new file format. If you maintain a plugin system with an open name field, when did the first divergent-semantics-under-one-name collision actually happen, and what did it cost to fix after the fact versus reserving the namespace on day one?3. Cross-bundle composition. Right now a bundle cannot depend on another bundle. We deferred it deliberately, to watch real authoring first. If you have shipped manifest-level dependencies (Helm subcharts, Cargo, Bundler, Terraform modules), what was the moment in production you realised your first dependency primitive was wrong, and which way did it bite: too permissive, or too restrictive?
4. Strict security default. Our manifest has a security block: declare what the bundle is allowed to do (read files, network, exec, secrets), deny by default, omit the block entirely and you get deny-all. For anyone who shipped a deny-by-default permissions model (Deno, OPA, a plugin sandbox): did the strict default hold, or did adoption pressure quietly erode it? What kept declarations honest rather than reflexive?
Replies here, or on any thread we have linked from this one, all land in the same place. We will summarise what we change and why, and credit anyone whose input we ship.
Beta Was this translation helpful? Give feedback.
All reactions