komodosolid
Install: claude install-skill intentic/intentic
# Komodo (connected)
Core at `$KOMODO_ADDRESS`, credentials in `$KOMODO_API_KEY` + `$KOMODO_API_SECRET`.
Every call is `POST $KOMODO_ADDRESS/<read|write|execute>/<Operation>` and **the body is the params object
itself**: there is no `{"params":{…}}` wrapper on this path form. Sending one deserializes as *empty* params,
so zero-argument operations still answer and every operation with a required field fails with
``missing field `stack` ``. Define this helper once per shell: `komodo <module>/<Operation> ['<params json>']`:
```sh
komodo() { local p='{}'; [ -n "$2" ] && p="$2"; curl -s -H "x-api-key: $KOMODO_API_KEY" \
-H "x-api-secret: $KOMODO_API_SECRET" -H "content-type: application/json" \
-d "$p" "$KOMODO_ADDRESS/$1"; }
```
Responses carry every field Komodo knows; project them with `jq` instead of reading them whole.
- Who am I: `curl -s -H "x-api-key: $KOMODO_API_KEY" -H "x-api-secret: $KOMODO_API_SECRET" "$KOMODO_ADDRESS/user" | jq '{username, admin}'`, a GET, the one call that is not a POST envelope
- Stacks (compose): `komodo read/ListStacks | jq -c '.[] | {name, state: .info.state, status: .info.status, server: .info.server_id}'`
- A stack's compose file: `komodo read/GetStack '{"stack":"<NAME>"}' | jq -r '.config.file_contents'`, empty when the stack is git-backed or host-backed, and then `.config.repo` / `.config.file_paths` / `.config.files_on_host` say where it really lives
- Images, and what is out of date: `komodo read/ListStacks | jq -c '.[] | {name, ser