Repository navigation
specs: skills and crons as first-class .t27 specs #3544
Description
Why
t27.ai publishes two agent catalogs — Claude Code skills (26) and scheduled jobs (33, on GitHub Actions, Inngest, Railway and in-process timers) — and until now both were generated only from code scans: SKILL.md frontmatter, workflow YAML, setInterval sites. Nothing in the spec corpus stated them. That inverts the rule the rest of the project runs on: the spec is the source of truth and the code is its witness.
This issue tracks giving skills and crons first-class .t27 specs under specs/skills/ and specs/crons/, with the site (gHashTag/trinity) generating public/skills/spec-skills.json and public/crons/spec-crons.json from a vendored copy of those files through the compiler wasm at build time — no regex over .t27.
Schema
Every constant is pub const; full tables in specs/skills/README.md and specs/crons/README.md.
- skill (
module skill_<file>):KIND="skill",ID(<repo>/<dir>, equal to the code-manifest id),NAME,REPO,SOURCE,SUMMARY_EN,COMMAND,SPECS: [N]str,TAGS: [N]str,ENABLED: bool,TIMEOUT_MIN: u16. - cron (
module cron_<file>):KIND="cron",ID(<host>/<repo>/<slug>),NAME,HOST(github-actions | inngest | railway-cron | timer),REPO,SERVICE,SUMMARY_EN,SCHEDULEorINTERVAL_MS: u32(never both),SCHEDULE_NOTE?,TZ,RUNS: [N]str(skill ids),RUNS_NOTE,ENABLED: bool,ON_FAILURE,CONTROL,NOTE?. - Empty lists are
[0]str = [](the wasm accepts this form). - Language: specs are English-only (LANG-EN,
bootstrap/build.rs). There is noSUMMARY_RU; the Russian line shown on the site is a site-side translation (apps/website/scripts/agents-i18n.ru.json) merged assummary.ruwithruSource: "site-annotation", never as spec text.
Rules the site generator enforces: duplicate ID → build fails; a RUNS id with no skill spec → health: "fail"; an ID absent from the code manifest → witness: "spec-only"; code with no spec → listed as code-only, never invented; Cyrillic in a spec → build fails; a translation key with no matching spec ID → build fails.
Witness / boundary
- 59/59 typecheck ok under the vendored wasm (sha256
4d9c0447b5ca288790ab03d3dffc2dda629ed47af9d6731a105fc923aea0aee4), nothing discarded. Thattypecheck.okis lenient (true forstr = 5), so the schema check in the generator is the real gate. - The bootstrap compiler on
masterhas not been run against these files yet; CI on the PR is the first run. - Every
RUNSis[]with aRUNS_NOTE; no cron→skill edge is asserted.
Links
- Site PR (generator, Explorer UI, Queen modules SKILLS/CRONS): feat(website): skills and crons as first-class .t27 specs; Queen modules SKILLS (7) and CRONS (8) trinity#975
- Spec PR (this repo): feat(specs): skills and crons as first-class .t27 specs (site generates from them) #3543
Activity
feat(specs): skills and crons as first-class .t27 specs (site generat…
feat(specs): skills and crons as first-class .t27 specs (site generat…
gHashTag commentedon Sep 9, 2026
Design change from the owner (2026-09-09): translations are connected through a
.t27spec, not a site-side JSON convention.specs/i18n/agents-ru.t27(modulei18n_agents_ru,KIND = "i18n") declaresLOCALE,SCOPE, translatableFIELDS(SUMMARY,NAME),BUNDLE_REPO/BUNDLE_PATH(trinity:apps/website/i18n/agents.ru.json, keyed byID),FALLBACK = "en",COVERAGE_REQUIRED = false,ORPHANS_ALLOWED = false. Specs stay English-only; the Cyrillic payload lives only in the bundle. One contract per locale, discovered by the site generator (no hardcoded locale list). Schema:specs/i18n/README.md. Implemented in #3543 and gHashTag/trinity#975 (ru coverage: skills 26/26, crons 33/33, orphans 0).docs(now): re-date the connect-accounts entry into the review window
feat(specs/skills): trinity/connect-accounts (#5630)
spec(automation/bot-topic-tabs): v1 -- the bot's private-chat tabs, t…