JSON output#
Use --json with any non-interactive command, or enable conda’s JSON setting, including CONDA_JSON=true. Discovery, validation, and filesystem behavior stay the same. The interactive quickstart guide rejects JSON mode before prompting. Use the explicit commands in scripts.
A successful command writes one complete, unstyled JSON value to stdout. Paths are strings in the operating system’s path format. Parse the document with a JSON parser, and do not depend on indentation, key order, or escaping style. Empty list and status results are [].
The examples use absolute POSIX paths. Your paths depend on the selected environment and destination root.
list#
conda skill list -p /path/to/source-env --json
The result is an array sorted by skill name. Each object has:
Field |
Type |
Meaning |
|---|---|---|
|
string |
Skill directory name. |
|
string |
Validated description from the header. |
|
string |
Absolute path to the skill directory in the source prefix. |
|
string |
Owning conda package name. |
|
string |
Owning package version. |
[
{
"name": "review-notes",
"description": "Use when turning supplied code-review findings into a concise handoff for the author.",
"path": "/path/to/source-env/share/agent-skills/review-notes",
"package": "conda-skills-example",
"version": "0.1.0"
}
]
status#
conda skill status --json
The result is an array sorted by destination entry name. The command does not require a source environment.
Field |
Type |
Meaning |
|---|---|---|
|
string |
Destination entry name. |
|
string |
|
|
string |
Absolute destination entry path. |
|
string |
Resolved symlink target, or an empty string for an unmanaged entry. |
[
{
"name": "review-notes",
"state": "linked",
"path": "/path/to/project/.agents/skills/review-notes",
"target": "/path/to/source-env/share/agent-skills/review-notes"
}
]
A broken link still has a target string, even if the target does not exist. A linked state does not confirm package ownership, valid frontmatter, trust, or that an agent has loaded the skill.
With status --all --json, the result remains one array. Each entry adds a string backend field (agents or claude). Entries are grouped in that backend order and sorted by name within each group. The default single-backend output is unchanged. An error inspecting either directory fails the command before it emits a partial array. --global selects home scope for both directories, without a source environment lookup.
link#
conda skill link review-notes -p /path/to/source-env --json
The result is an object with string fields name and path, whether the command creates a link or reuses an existing matching link.
{"name": "review-notes", "path": "/path/to/project/.agents/skills/review-notes"}
unlink#
conda skill unlink review-notes --json
The result is an object with string name and boolean removed. true means the destination symlink was removed, while false means the destination was absent. An absent destination needs no source lookup. By default, an existing link’s target must match a recorded conda skill. After reviewing a broken or unverifiable link, --force --json removes only that symlink and returns the same result shape. Neither mode selects the active environment as a source or removes package files.
{"name": "review-notes", "removed": true}
init#
conda skill init review-notes --description "Review supplied notes" --json
The result is an object with string fields name, path, and recipe. The path points to the new authoring skeleton. The recipe field is the absolute path to its conda recipe. The skeleton is not yet an installed skill or a client link.
{"name": "review-notes", "path": "/path/to/project/review-notes", "recipe": "/path/to/project/review-notes/recipe/recipe.yaml"}
inspect#
Without --file, the result contains name, description, package, version, path, and files. Each files entry has a relative POSIX-style path and a type of file, directory, symlink, or special. Entries are sorted. This lists the skill directory’s current contents, not package ownership for each file.
With --file, the metadata fields remain and files is replaced by file (the requested relative path), kind (text or binary), and content (the original decoded text or null for binary data). File previews are limited to 1 MiB. Errors use conda’s usual error response rather than a partial result.
open#
The result contains name, path, and opened: true after the system opener accepts the directory request. This does not confirm that a file-manager window is visible. JSON mode does not suppress the opening operation.
Errors and literal text#
Check the exit status before parsing a response as a successful result. On failure, the process exits nonzero and conda emits its normal error response. There is no plugin-specific error schema. Conda’s fields can vary with the error type and conda version.
Descriptions and paths remain literal data. JSON escapes control characters according to JSON syntax, but decoded strings may still contain those characters. Escape decoded values appropriately if you later print them to a terminal or insert them into HTML. Human-mode terminal escaping is not applied to JSON data.