Skip to content
Hoody.com

The Agent Skills endpoints manage the agent’s skill library: listing installed skills, searching and installing from the remote skill hub, previewing and importing skills, reading and writing skill source, and toggling trust/enable state. Skills are scoped to the requesting cwd/config_dir and are realm-scoped to the gateway’s own realm — a client-supplied X-Hoody-Realm or ?realm= is ignored when the gateway has its own pinned/active realm.

All endpoints accept the standard per-request scope headers (X-Hoody-Cwd, X-Hoody-Config-Dir, X-Hoody-Container, X-Hoody-Realm) and the ?realm= query alias.

Lists the installed skills (identity = root + rel) for the requesting cwd/config_dir, with their enabled/trust state. Realm-scoped to the gateway’s own realm.

NameInTypeRequiredDescription
pagequeryintegerNo1-based page number for pagination.
limitqueryintegerNoMaximum items per page (0 = no pagination).
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
{
"items": [
{
"root": "project",
"rel": "skills/commit",
"name": "commit",
"enabled": true,
"trusted": true
}
],
"meta": {
"total": 12,
"page": 1,
"limit": 50
}
}
await client.agent.skills.listSkillsIterator({ page: 1, limit: 50 })
Terminal window
curl "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills?page=1&limit=50"

Returns the skill-hub fetch cache statistics (skills.cache_stats).

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
{
"entries": 23,
"bytes": 184320,
"hits": 142,
"misses": 17,
"pinned": 4
}
await client.agent.skills.getSkillHubCache()
Terminal window
curl "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/hub/cache"

Searches the remote skill hub (skills.hub_search). Pass ?q= in the query.

NameInTypeRequiredDescription
qquerystringNoSearch query.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
{
"results": [
{
"id": "hub/commit-format",
"name": "commit-format",
"description": "Conventional commit helper",
"version": "1.2.0",
"author": "hoody"
}
],
"total": 1
}
await client.agent.skills.searchSkillHub({ q: "commit format" })
Terminal window
curl "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/hub/search?q=commit%20format"

Fetches a preview of a hub skill before install (skills.hub_preview). Pass ?id= to identify the hub skill.

NameInTypeRequiredDescription
idquerystringNoHub skill identifier.
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
{
"id": "hub/commit-format",
"name": "commit-format",
"version": "1.2.0",
"readme": "# commit-format\n\nFormats conventional commits.",
"permissions": ["network.read"]
}
await client.agent.skills.previewSkillHub({ id: "hub/commit-format" })
Terminal window
curl "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/hub/preview?id=hub%2Fcommit-format"

Returns a skill’s source body (skills.read_source). Identify the skill by the daemon keys root_dir + rel_dir (the friendly aliases ?root= / ?rel= are also accepted and translated). The reply is {content, gen, path}; pass gen back as base_gen on the write to detect conflicts.

NameInTypeRequiredDescription
root_dirquerystringNoSkill root directory (identity; alias: root).
rel_dirquerystringNoSkill relative directory (identity; alias: rel).
rootquerystringNoFriendly alias of root_dir (translated to root_dir server-side).
relquerystringNoFriendly alias of rel_dir (translated to rel_dir server-side).
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
{
"content": "# commit\n\nWrites a conventional commit message.",
"gen": 3,
"path": "/home/user/.hoody/project/skills/commit/SKILL.md"
}
await client.agent.skills.getSkillSource({ root_dir: "project", rel_dir: "skills/commit" })
Terminal window
curl "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/source?root_dir=project&rel_dir=skills%2Fcommit"

Overwrites a skill’s source body (skills.write_source). Identify the skill by root_dir + rel_dir in the body (aliases root / rel accepted); the new body text is content (alias source); pass the read’s gen as base_gen for conflict detection.

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
NameTypeRequiredDescription
root_dirstringYesSkill root directory (identity; alias: root).
rel_dirstringYesSkill relative directory (identity; alias: rel).
contentstringYesNew SKILL.md body (alias: source).
base_genintegerNoThe gen returned by skills.read_source, for conflict detection.
{
"ok": true,
"gen": 4,
"path": "/home/user/.hoody/project/skills/commit/SKILL.md"
}
await client.agent.skills.putSkillSource({
root_dir: "project",
rel_dir: "skills/commit",
content: "# commit\n\nWrites a conventional commit message.",
base_gen: 3
})
Terminal window
curl -X PUT "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/source" \
-H "Content-Type: application/json" \
-d '{
"root_dir": "project",
"rel_dir": "skills/commit",
"content": "# commit\n\nWrites a conventional commit message.",
"base_gen": 3
}'

Scans well-known locations for importable skills (skills.import_scan).

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
{
"found": [
{
"path": "/opt/shared/skills/release-notes",
"name": "release-notes",
"source": "shared"
}
],
"scanned": 4
}
await client.agent.skills.scanSkillImport()
Terminal window
curl "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/import/scan"

Imports a discovered skill into the local store (skills.import_apply).

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).

The body is forwarded to the daemon skills.import_apply RPC. Identify the discovered skill to import (e.g. by its scan path/id returned from scanSkillImport). Reserved _-prefixed keys are ignored and the request scope (cwd/config_dir) is applied automatically.

{
"ok": true,
"imported": "release-notes",
"path": "/home/user/.hoody/project/skills/release-notes"
}
await client.agent.skills.applySkillImport({ path: "/opt/shared/skills/release-notes" })
Terminal window
curl -X POST "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/import/apply" \
-H "Content-Type: application/json" \
-d '{ "path": "/opt/shared/skills/release-notes" }'

Creates a new local skill (skills.create).

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
NameTypeRequiredDescription
namestringYesSkill name (the SKILL.md directory stem).
descriptionstringNoSkill description (frontmatter).
contentstringNoInitial SKILL.md body.
{
"ok": true,
"name": "review",
"path": "/home/user/.hoody/project/skills/review/SKILL.md"
}
await client.agent.skills.createSkill({
name: "review",
description: "Generates a code review summary",
content: "# review\n\nGenerates a code review summary."
})
Terminal window
curl -X POST "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills" \
-H "Content-Type: application/json" \
-d '{
"name": "review",
"description": "Generates a code review summary",
"content": "# review\n\nGenerates a code review summary."
}'

Deletes a skill (skills.delete). Identify the skill by root_dir + rel_dir in the body (aliases root / rel accepted).

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
NameTypeRequiredDescription
root_dirstringYesSkill root directory (identity; alias: root).
rel_dirstringYesSkill relative directory (identity; alias: rel).
{
"ok": true,
"deleted": "review"
}
await client.agent.skills.deleteSkill({ root_dir: "project", rel_dir: "skills/review" })
Terminal window
curl -X POST "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/delete" \
-H "Content-Type: application/json" \
-d '{ "root_dir": "project", "rel_dir": "skills/review" }'

Renames a skill (skills.rename). Identify the skill by root_dir + rel_dir (aliases root / rel accepted) and pass the new name as new_name.

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
NameTypeRequiredDescription
root_dirstringYesSkill root directory (identity; alias: root).
rel_dirstringYesSkill relative directory (identity; alias: rel).
new_namestringYesNew skill directory name.
{
"ok": true,
"old_name": "review",
"new_name": "code-review"
}
await client.agent.skills.renameSkill({
root_dir: "project",
rel_dir: "skills/review",
new_name: "code-review"
})
Terminal window
curl -X POST "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/rename" \
-H "Content-Type: application/json" \
-d '{ "root_dir": "project", "rel_dir": "skills/review", "new_name": "code-review" }'

Toggles a skill’s enabled state (skills.toggle — NAME-scoped: it gates the effective skill name in the runtime registry). Identify the skill by name in the body, and pass disabled (boolean) for the new state.

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
NameTypeRequiredDescription
namestringYesEffective skill name (NOT root/rel — toggle is name-scoped).
disabledbooleanNotrue to disable the skill, false to enable it.
{
"ok": true,
"name": "commit",
"disabled": true
}
await client.agent.skills.toggleSkill({ name: "commit", disabled: true })
Terminal window
curl -X POST "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/toggle" \
-H "Content-Type: application/json" \
-d '{ "name": "commit", "disabled": true }'

Sets a skill’s trust state (skills.set_trust). Identify the skill by root_dir + rel_dir (aliases root / rel accepted); the trust flag is trusted (boolean). Trust gates arbitrary code execution.

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
NameTypeRequiredDescription
root_dirstringYesSkill root directory (identity; alias: root).
rel_dirstringYesSkill relative directory (identity; alias: rel).
trustedbooleanYestrue to grant execution trust, false to revoke.
{
"ok": true,
"trusted": true
}
await client.agent.skills.trustSkill({
root_dir: "project",
rel_dir: "skills/commit",
trusted: true
})
Terminal window
curl -X POST "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/trust" \
-H "Content-Type: application/json" \
-d '{ "root_dir": "project", "rel_dir": "skills/commit", "trusted": true }'

Installs a skill from the hub (skills.hub_install) — this writes arbitrary skill code to disk.

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
NameTypeRequiredDescription
idstringYesHub skill identifier (from searchSkillHub / previewSkillHub).
{
"ok": true,
"installed": "commit-format",
"path": "/home/user/.hoody/project/skills/commit-format",
"trusted": false
}
await client.agent.skills.installSkillHub({ id: "hub/commit-format" })
Terminal window
curl -X POST "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/hub/install" \
-H "Content-Type: application/json" \
-d '{ "id": "hub/commit-format" }'

Clears the skill-hub fetch cache, including pins (skills.cache_clear).

NameInTypeRequiredDescription
X-Hoody-CwdheaderstringNoPer-request working-directory scope.
X-Hoody-Config-DirheaderstringNoPer-request --config-dir override.
X-Hoody-ContainerheaderstringNoPer-request bound remote container (omitted = local).
X-Hoody-RealmheaderstringNoPer-request realm selector: "global" or a 24-hex id.
realmquerystringNoQuery alias of X-Hoody-Realm (read only when the header is absent).
{
"ok": true,
"cleared": 23,
"pins_cleared": 4
}
await client.agent.skills.clearSkillHubCache()
Terminal window
curl -X DELETE "https://5f3a9b2e8d1c4e7f0a2b6d8c-4c1d8e9f3a5b7c2e1d8f6a4b-agent-1.us-east-1.containers.hoody.icu/api/v1/agent/skills/hub/cache"