Ktesio

Manifest Format

skills.json is the project manifest. It declares skill dependencies this project uses and local skills this repo publishes for others.

Shape

{
  "dependencies": {
    "docs": {
      "repo": "https://github.com/example/agent-docs.git",
      "rev": "branch:main"
    },
    "local-docs": {
      "path": ".agents/skills/local-docs"
    }
  },
  "publish": [
    "local-docs",
    {
      "skill": "extra-docs",
      "path": "skills/extra-docs",
      "deprecated": true
    }
  ]
}

Fields

FieldTypeRequiredMeaning
dependenciesobjectnoSkills this project uses; defaults to {}
dependencies.<name>.repostringyes, for remote depsGit clone URL, local git path, or supported shorthand
dependencies.<name>.pathstringyes, for local depsLocal path to a skill used by this project
dependencies.<name>.revstringnoSource selector: commit:<sha>, branch:<name>, or tag:<name>
publisharraynoLocal skills this repo exposes to other projects; defaults to []
publish[] stringstringnoPublish a local path dependency by name
publish[].skillstringyes, for object entriesPublished skill name
publish[].pathstringyes, for object entriesPath inside this repo to copy when installed elsewhere
publish[].deprecatedboolnoWarn whenever this published skill is installed

Skill names must match:

^[a-zA-Z0-9_-]+$

Each dependency must declare exactly one of repo or path.

Minimal Manifest

{}

kt init writes both top-level keys for readability:

{
  "dependencies": {},
  "publish": []
}

When .agents/skills/ already contains installed skills, kt init adopts those directories into dependencies. Known public skills are recorded as remote dependencies when they can be resolved through an existing lock entry or an exact skills.sh match; unmatched custom skills are recorded as local path dependencies. Adopted skills are not added to publish automatically.

Dependency Example

{
  "dependencies": {
    "docs": {
      "repo": "https://github.com/example/agent-docs.git",
      "rev": "tag:v1.2.0"
    },
    "review": {
      "repo": "git@github.com:example/review-skill.git"
    },
    "local-docs": {
      "path": ".agents/skills/local-docs"
    }
  },
  "publish": []
}

For remote dependencies, the dependency key is the published skill name in the source repo. skills.lock records the resolved commit after install.

Publish Example

{
  "dependencies": {
    "my-skill": {
      "path": ".agents/skills/my-skill"
    }
  },
  "publish": [
    "my-skill",
    {
      "skill": "extra-skill",
      "path": "skills/extra-skill"
    }
  ]
}

String publish entries reference local path dependencies. Object publish entries can expose any repo-local file or directory. When a repo with publish entries is installed, Ktesio copies only the selected published path into the destination skill directory.

If a source repo has no skills.json, Ktesio asks before falling back to directories under skills/, SKILLS/, or .agents/skills/. Repos with a skills.json but no publish entries are not installable by fallback.

See Also

On this page