Reference

Item format

Directory

trove/<kind-plural>/<namespace>.<name>/
├── <upstream files>        verbatim copies (entry file + everything bundled with it)
├── LICENSE.upstream        governing licence text, when the item didn't ship one (optional)
├── NOTICE.upstream         nearest upstream NOTICE file, when outside the item (optional)
├── ananke.yaml             generated Ananke manifest
└── dex.json                generated provenance + catalog record

<kind-plural> is one of skills, agents, instructions, prompts, hooks, workflows, plugins. Inside the wheel the same directories sit under dex_trove/.

Single-file upstream items (agents, instructions, workflows) become a folder containing that one file, under its original filename (e.g. api-architect.agent.md).

dex.json

A real example (trove/skills/awesome-copilot.git-commit/dex.json):

{
  "id": "awesome-copilot/git-commit",
  "kind": "skill",
  "namespace": "awesome-copilot",
  "name": "git-commit",
  "title": "Git Commit with Conventional Commits",
  "description": "Execute git commit with conventional commit message analysis, …",
  "tags": ["awesome-copilot", "skill"],
  "version": "1.0.0",
  "entry": "SKILL.md",
  "dir": "skills/awesome-copilot.git-commit",
  "source": {
    "id": "awesome-copilot",
    "title": "Awesome GitHub Copilot",
    "repo": "https://github.com/github/awesome-copilot",
    "commit": "613efc8c21d9b3ce642dff361d17006cd9967e28",
    "path": "skills/git-commit",
    "url": "https://github.com/github/awesome-copilot/tree/613efc8c…/skills/git-commit",
    "author": null
  },
  "license": {
    "spdx": "MIT",
    "verdict": "allow",
    "evidence": "frontmatter license: 'MIT'",
    "notice": "Copyright GitHub, Inc.",
    "components": []
  },
  "inspired_by": [],
  "executes_code": false,
  "members": [],
  "files": ["SKILL.md"],
  "entry_hash": "554d1a3c…",
  "content_hash": "2ec73abb…",
  "learned_at": "2026-10-20T03:28:53+00:00"
}
FieldTypeMeaning
idstringnamespace/name (unique per kind)
kindenumskill agent instruction prompt hook workflow plugin
namespacestringsource id
namestringslugified name: ^[a-z0-9](?:[a-z0-9._-]{0,62}[a-z0-9])?$
titlestringdisplay title: sources.yaml override, else frontmatter title/name (non-skills), else first H1, else name
descriptionstringfrontmatter description, else the first ~400 characters of the body
tagsstring[]upstream tags/keywords + kind + namespace + executes-code / ananke-secret-flag when applicable
versionSemVeritem version (rules)
entrystringentry file, relative to the item directory
dirstringitem directory, relative to the trove root
source.id / title / repothe source
source.commitstring | nullupstream commit learned (null for non-git local folders)
source.pathstringitem path inside the source
source.urlstring | nullpinned link to the item upstream (or into this repo for first-party items)
source.authorstring | nullupstream author (frontmatter or plugin.json)
license.spdxstringSPDX id of the governing licence
license.verdictallowalways allow for admitted items
license.evidencestringwhere the verdict came from (file and fingerprint, or frontmatter value)
license.noticestringcopyright line(s) extracted from the governing text
license.componentsstring[]other allowed licences found in nested files (e.g. OFL-1.1 fonts)
inspired_by{title, url}[]from sources.yaml items
executes_codeboolcontains scripts or hooks.json
membersstring[]plugins only: kind:namespace/name of each admitted member
filesstring[]upstream files in the item (sorted; generated files excluded)
entry_hashsha256of the entry file (duplicate detection)
content_hashsha256over {path: sha256} of all files (drift detection, versioning)
learned_atISO-8601when the current content was first learned (unchanged if content is unchanged)
apply_tostringinstructions only: upstream applyTo glob
secret_flagsstring[]rule path:line for each line Ananke’s scanner would refuse (no values)
notesstring[]e.g. skipped symlinks, files withheld by exclude globs

ananke.yaml

Generated to satisfy Ananke’s strict ArtifactManifest schema (unknown fields are rejected):

FieldValue
kindskill, agent, prompt (instruction/prompt), tool (hook), workflow, bundle (plugin)
namespace, name, versionfrom dex.json
ananke_idurn:dex-trove:<dex-kind>:<namespace>:<name>, a stable identity across versions
summaryfirst sentence(s) of the description, ≤ ~200 chars
descriptionfull description
runtime.supported[claude-code, github-copilot, generic]
instructions.refagents and prompts: the entry file
permissionsitems without code: explicitly empty (filesystem read/write [], shell.allow: [], network: []). Items with code: omitted, so Ananke warns until reviewed.
membersplugins: [{ref: ananke://<kind>/<ns>/<name>, version: '*'}]
license{expression: <spdx>, source: <evidence>, approval: approved}
metadata{tags, homepage: <pinned upstream url>, repository: <repo>}

Ananke-side identity

Example
URIananke://skill/awesome-copilot/git-commit@1.0.0
Referenceawesome-copilot/git-commit@^1
Installed layout.ananke/skills/installed/awesome-copilot.git-commit@1.0.0/

Edit this page on GitHub ↗