# Community kit spec 0.1 A community kit is a set of memes, copypastas and brand files that a project approved for anyone to post. Each kit also holds the rules and the facts that keep a post accurate. The first reader of a kit is an AI agent. The second reader is a person in a browser. Kits live at `https://kits.sable.tools//`. The list of kits is at `https://kits.sable.tools/llms.txt`. ## How an agent uses a kit 1. Fetch `/llms.txt`. It is a short map of the kit. 2. Fetch `/SKILL.md` or `/AGENTS.md`. The two files hold the same guide. Fetch one. 3. Read `status` in `/catalog.json`. If the status is not `approved`, do not post. 4. Pick an asset whose `use_when` list fits the situation. 5. Obey the kit `rules`, the `never_say` list and the asset `rules`. The asset rules add to the kit rules. 6. State a fact only if `facts.claims` has it. Never state a claim in `facts.do_not_claim`. 7. Post as yourself. A post must not claim that the project made or approved it. ## Files | Path | Content | |---|---| | `llms.txt` | A short map of the kit, in the llmstxt.org format. | | `SKILL.md` | The full guide, with skill frontmatter (`name`, `description`). | | `AGENTS.md` | The same guide, without frontmatter. | | `catalog.json` | Every asset, rule and fact, in one JSON document. | | `facts.md` | The claims a post may make, and the claims it must not make. | | `assets/.md` | One record for each asset. | | `index.html` | The gallery for people, with download and copy buttons. | | `media/-.` | Image and video files: PNG, JPEG, MP4 or WebM. | | `text/-.txt` | Text assets, in UTF-8. | | `brand/-.` | Brand marks. | `` is the first 12 hex digits of the SHA-256 of the file. A changed file gets a new name. So the bytes behind one name never change, and you can cache those files forever. Every link in the agent files is an absolute URL. The gallery uses relative links. ## catalog.json ### Top-level fields | Field | Type | Meaning | |---|---|---| | `kit_spec` | string | The spec version, `"0.1"`. | | `spec_url` | string | The URL of this document. | | `status` | string | `preview` or `approved`. See "Status". | | `status_note` | string | One sentence that states the status for a person. | | `approved` | object or null | `by` and `date`. Null when the status is `preview`. | | `org` | string | The kit id. | | `name` | string | The kit name. | | `summary` | string | What the project is and what the kit holds. | | `project` | object | `name`, plus `ticker`, `site`, `x` and `github` when the project has them. | | `base_url` | string | The URL of the kit folder. It ends with `/`. | | `docs` | object | Absolute URLs: `llms`, `skill`, `agents`, `facts`, `catalog`, `gallery`. | | `rules` | list of strings | Rules for every post that uses the kit. | | `never_say` | list of objects | `terms` (a list of strings) and `why`. A post must not use the terms. | | `voice` | list of strings | How posts in this community sound. | | `vocabulary` | list of objects | `term` and `meaning`: the community's own words. | | `formats` | list of objects | `name`, `how` (a list of steps) and `example` (an asset id). | | `brand` | object | `colours` (`name`, `hex`), `marks` and `rules`. | | `facts` | object | `updated`, `claims` and `do_not_claim`. | | `assets` | list of objects | See "Asset fields". | | `build` | object | `id`, `at` (UTC) and `generator`. | ### Asset fields | Field | Type | Meaning | |---|---|---| | `id` | string | Lowercase letters, digits and `-`. | | `kind` | string | `image`, `video` or `text`. | | `title` | string | A short name. | | `caption` | string | What the asset shows and what the joke is. | | `alt` | string or null | Alt text for an image or a video. Use it when you post. | | `text` | string | The full text. Text assets only. | | `tags` | list of strings | Topic words. | | `use_when` | list of strings | Situations where the asset fits. | | `tone` | string or null | One word for the tone. | | `file` | object | `url`, `path`, `sha256`, `bytes`, `mime`, `width`, `height`, `duration_s`. | | `licence` | object | `id`, `name`, `url`, `summary` and `covers`. | | `source` | string | `original` or `mixed`. See "Licences". | | `based_on` | string or null | The meme format that the asset uses. | | `third_party` | list of strings | Each part of the asset that is not the project's work. | | `people` | list of objects | `name` and `remix_consent` (a date) for each real person shown. | | `rules` | list of strings | Rules for this asset. They add to the kit rules. | | `record` | string | The URL of the asset's `assets/.md` record. | To check a download, compare its SHA-256 with `file.sha256`. ### Facts - `facts.claims`: each entry has `claim` and `source`. The source has `title` and `url`. - `facts.do_not_claim`: each entry has `claim` and `why`. ## Status | Status | Meaning | |---|---| | `preview` | The project has not approved the kit. Do not post its assets. | | `approved` | The project approved the kit on `approved.date`. | kits.sable.tools serves only approved kits. A preview kit exists only on the computer of the person who builds it. ## Licences | Licence id | Terms | |---|---| | `CC0-1.0` | No rights reserved. Nobody needs to give credit. | | `CC-BY-4.0` | Use, edit and post the asset. Credit the project. | | `trademark` | Brand marks only. Use a mark only to refer to the project. | The source `mixed` means that the asset uses parts that are not the project's work, for example a meme template. The `third_party` list names those parts. The licence covers only the parts that were made for the project. ## Versions A kit names its spec version in `kit_spec`. A new field can appear in a minor version. A field changes its meaning or goes away only in a new major version. Ignore a field that you do not know. ## HTTP - Every file allows cross-origin reads (`Access-Control-Allow-Origin: *`). - Files under `media/`, `text/` and `brand/` are immutable. Other files can change when the project publishes a new build. Their cache lifetime is 5 minutes. - Range requests work on every file.