# Send Truenas Skill to your agent
Use the source page and any available docs to guide the install because the item is currently unstable or timing out.
## Fast path
- Open the source page via Review source status.
- If you can obtain the package, extract it into a folder your agent can access.
- Paste one of the prompts below and point your agent at the source page and extracted files.
## Suggested prompts
### New install

```text
I tried to install a skill package from Yavira, but the item is currently unstable or timing out. Inspect the source page and any extracted docs, then tell me what you can confirm and any manual steps still required. Then review README.md for any prerequisites, environment setup, or post-install checks.
```
### Upgrade existing

```text
I tried to upgrade a skill package from Yavira, but the item is currently unstable or timing out. Compare the source page and any extracted docs with my current installation, then summarize what changed and what manual follow-up I still need. Then review README.md for any prerequisites, environment setup, or post-install checks.
```
## Machine-readable fields
```json
{
  "schemaVersion": "1.0",
  "item": {
    "slug": "truenas-skill",
    "name": "Truenas Skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/anotb/truenas-skill",
    "canonicalUrl": "https://clawhub.ai/anotb/truenas-skill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadUrl": "/downloads/truenas-skill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=truenas-skill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "package-lock.json",
      "package.json",
      "references/app-installation.md",
      "references/bookmarks.md"
    ],
    "downloadMode": "manual_only",
    "sourceHealth": {
      "source": "tencent",
      "slug": "truenas-skill",
      "status": "unstable",
      "reason": "timeout",
      "recommendedAction": "retry_later",
      "checkedAt": "2026-05-10T06:37:03.470Z",
      "expiresAt": "2026-05-10T18:37:03.470Z",
      "httpStatus": null,
      "finalUrl": null,
      "contentType": null,
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=truenas-skill",
        "error": "Timed out after 5000ms",
        "slug": "truenas-skill"
      },
      "scope": "item",
      "summary": "Item is unstable.",
      "detail": "This item is timing out or returning errors right now. Review the source page and try again later.",
      "primaryActionLabel": "Review source status",
      "primaryActionHref": "https://clawhub.ai/anotb/truenas-skill"
    },
    "validation": {
      "installChecklist": [
        "Wait for the source to recover or retry later.",
        "Review SKILL.md only after the download returns a real package.",
        "Treat this source as transient until the upstream errors clear."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    }
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/truenas-skill",
    "downloadUrl": "https://openagent3.xyz/downloads/truenas-skill",
    "agentUrl": "https://openagent3.xyz/skills/truenas-skill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/truenas-skill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/truenas-skill/agent.md"
  }
}
```
## Documentation

### TrueNAS SCALE Skill

Manage a TrueNAS SCALE server and its apps via the TrueNAS API and Dockge Socket.IO.

### Required Environment Variables

TRUENAS_URL       — TrueNAS base URL (e.g., https://10.0.0.5:444)
TRUENAS_API_KEY   — API key from TrueNAS UI → API Keys

### Optional: TLS Configuration

TRUENAS_VERIFY_TLS  — Set to "1" to enforce TLS certificate validation (default: skip for self-signed certs)

### Optional: Dockge (Docker Compose UI)

DOCKGE_URL        — Dockge URL (e.g., http://10.0.0.5:5001)
DOCKGE_USER       — Dockge login username
DOCKGE_PASS       — Dockge login password

### Optional: Homelab Service API Keys

See the references/ directory for per-service env vars. Common ones:

SONARR_URL, SONARR_API_KEY           — TV show management
RADARR_URL, RADARR_API_KEY           — Movie management
PROWLARR_URL, PROWLARR_API_KEY       — Indexer management
OVERSEERR_URL, OVERSEERR_API_KEY     — Media request UI
PLEX_URL                             — Media server (no auth on LAN)
TAUTULLI_URL, TAUTULLI_API_KEY       — Plex analytics
QBITTORRENT_URL                      — Torrent client (no auth)
SABNZBD_URL, SABNZBD_API_KEY         — Usenet client
AUDIOBOOKSHELF_URL, AUDIOBOOKSHELF_API_KEY
NTFY_URL                             — Push notifications
SYNCTHING_URL, SYNCTHING_API_KEY     — File sync
N8N_URL, N8N_API_KEY                 — Workflow automation
NOCODB_URL, NOCODB_API_KEY           — Database
CHANGEDETECTION_URL, CHANGEDETECTION_API_KEY
CRAFTY_URL, CRAFTY_API_KEY           — Game servers
LAZYLIBRARIAN_URL, LAZYLIBRARIAN_API_KEY
METUBE_URL                           — YouTube downloader
KARAKEEP_URL, KARAKEEP_API_KEY       — Bookmarks with AI tagging

### API Notes

HTTPS REQUIRED: TrueNAS auto-revokes API keys used over HTTP.

REST API Deprecation Notice: The REST API (/api/v2.0/) is deprecated in TrueNAS 25.04
and fully removed in 26.04. Use the WebSocket API (via scripts/truenas-ws.mjs) as
the forward-compatible method. REST examples below still work on 24.10 and 25.x.

### REST API (Legacy)

curl -sk "$TRUENAS_URL/api/v2.0/[endpoint]" \\
  -H "Authorization: Bearer $TRUENAS_API_KEY"

The -k flag is needed for self-signed certificates (common on home servers).

### WebSocket API (Recommended)

The WebSocket API uses a DDP-like protocol (Meteor style). REST paths become dot notation:
/api/v2.0/app → app.query, /api/v2.0/system/info → system.info.

// Connect: wss://<host>/websocket (rejectUnauthorized: false for self-signed)

// 1. Handshake
send: {"msg": "connect", "version": "1", "support": ["1"]}
recv: {"msg": "connected", "session": "..."}

// 2. Authenticate
send: {"id": "1", "msg": "method", "method": "auth.login_with_api_key", "params": ["API_KEY"]}
recv: {"id": "1", "msg": "result", "result": true}

// 3. Call methods
send: {"id": "2", "msg": "method", "method": "system.info", "params": []}
send: {"id": "3", "msg": "method", "method": "app.query", "params": []}

Use the helper script for WebSocket calls: node scripts/truenas-ws.mjs <method> [params_json]

### Security Notes

Self-signed certificates: TLS verification is skipped by default (curl -k, rejectUnauthorized: false) because homelab servers typically use self-signed certs. Set TRUENAS_VERIFY_TLS=1 to enforce strict TLS validation.
API key scope: Use a read-only or least-privilege API key when possible. TrueNAS lets you scope keys to specific endpoints.
Credentials stay local: All env vars are read at runtime and sent only to the configured service endpoints. Nothing is phoned home.

### System Info

curl -sk "$TRUENAS_URL/api/v2.0/system/info" -H "Authorization: Bearer $TRUENAS_API_KEY"

### Pool Health

# All pools with health status
curl -sk "$TRUENAS_URL/api/v2.0/pool" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | {name, healthy}'

# Or via WebSocket
node scripts/truenas-ws.mjs pool.query '[]'

The API returns a .healthy boolean per pool. For deeper status, inspect the full pool object.

### Active Alerts

curl -sk "$TRUENAS_URL/api/v2.0/alert/list" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | {level, formatted}'

### Running Services

curl -sk "$TRUENAS_URL/api/v2.0/service" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | select(.state == "RUNNING") | .service'

### List Datasets

curl -sk "$TRUENAS_URL/api/v2.0/pool/dataset" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | {name, type, used: .used.parsed, available: .available.parsed}'

### Create Dataset

curl -sk -X POST "$TRUENAS_URL/api/v2.0/pool/dataset" \\
  -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  -H "Content-Type: application/json" \\
  -d '{"name": "pool/path/new-dataset"}'

### Delete Dataset

# Destructive — confirm with user first
curl -sk -X DELETE "$TRUENAS_URL/api/v2.0/pool/dataset/id/DATASET_ID" \\
  -H "Authorization: Bearer $TRUENAS_API_KEY"

### List Snapshots

# WebSocket (required on 25.10+, /api/v2.0/zfs/snapshot returns 404)
node scripts/truenas-ws.mjs zfs.snapshot.query '[]'

### Create Snapshot

node scripts/truenas-ws.mjs zfs.snapshot.create '[{"dataset": "pool/dataset", "name": "manual-YYYY-MM-DD"}]'

### Snapshot Task Status

curl -sk "$TRUENAS_URL/api/v2.0/pool/snapshottask" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | {dataset, schedule, enabled}'

### Replication Health

curl -sk "$TRUENAS_URL/api/v2.0/replication" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | {name, state: .state.state}'

### App Management

TrueNAS Apps are the official marketplace for installing containerized services.

### List Installed Apps

curl -sk "$TRUENAS_URL/api/v2.0/app" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | {name, state, version}'

### Check for Updates

curl -sk "$TRUENAS_URL/api/v2.0/app" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | select(.upgrade_available) | .name'

### Install / Update Apps

See references/app-installation.md for the full installation guide covering:

Checking app templates and storage requirements
Creating datasets with proper ACLs
Installing with correct storage mappings
Handling apps with multiple storage mounts

### App Status

curl -sk "$TRUENAS_URL/api/v2.0/app?name=APP_NAME" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[0] | {name, state, portals}'

### Dockge (Docker Compose Stacks)

Dockge is a companion UI for Docker Compose stacks not in the TrueNAS Apps catalog.
It uses Socket.IO, not REST. Use the provided scripts.

### Prerequisites

npm install   # in this skill's root directory

### List Stacks

node scripts/dockge-list.mjs

### Update Stacks

# Update all running stacks
node scripts/dockge-update.mjs

# Update specific stacks
node scripts/dockge-update.mjs mystack1 mystack2

### Socket.IO Protocol Details

Dockge uses Socket.IO with WebSocket transport.

Status codes:

1 = inactive/exited
3 = running
4 = updating

Key events:

login — authenticate with username/password
stackList — get all stacks (received via agent event)
agent, "", "updateStack", stackName — trigger pull + restart

Note: Stacks prefixed with ix- are TrueNAS-managed apps visible to Dockge — skip those when updating.

### Monitoring Checklist

Run these commands for a quick health overview:

# Pool health
curl -sk "$TRUENAS_URL/api/v2.0/pool" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | {name, healthy}'

# Active alerts
curl -sk "$TRUENAS_URL/api/v2.0/alert/list" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | {level, formatted}'

# Running services
curl -sk "$TRUENAS_URL/api/v2.0/service" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | select(.state == "RUNNING") | .service'

# App updates available
curl -sk "$TRUENAS_URL/api/v2.0/app" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | select(.upgrade_available) | .name'

# Replication status
curl -sk "$TRUENAS_URL/api/v2.0/replication" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | {name, state: .state.state}'

### Homelab Services

This skill includes reference files for common homelab service categories. Each covers
API patterns, env vars, and common agent tasks for services that typically run alongside
TrueNAS:

ReferenceServicesFileMedia managementOverseerr, Sonarr, Radarr, Prowlarr, Plex, Tautullireferences/media-management.mdApp installationTrueNAS native app install guidereferences/app-installation.mdDownload clientsqBittorrent, SABnzbd, FlareSolverrreferences/downloads.mdHomelab servicesntfy, Syncthing, n8n, NocoDB, ChangeDetection, Craftyreferences/homelab-services.mdBooks & mediaAudiobookshelf, LazyLibrarian, Calibre-Web, MeTubereferences/books-and-media.mdBookmarksKarakeep (AI-powered bookmark manager)references/bookmarks.md

Load the relevant reference file when the user asks about a specific service category.

### "Check NAS health"

Run the monitoring checklist above. Summarize pool states, alerts, and any pending updates.

### "What's running?"

# TrueNAS apps
curl -sk "$TRUENAS_URL/api/v2.0/app" -H "Authorization: Bearer $TRUENAS_API_KEY" \\
  | jq '.[] | select(.state == "RUNNING") | .name'

# Dockge stacks (if configured)
node scripts/dockge-list.mjs

### "Install an app"

Follow the guide in references/app-installation.md:

Check app template for storage requirements
Create dataset(s) under the apps pool
Set ACL with apps preset
Install app with correct storage mappings

### "Take a snapshot"

node scripts/truenas-ws.mjs zfs.snapshot.create '[{"dataset": "pool/dataset", "name": "manual-snapshot-name"}]'

### "What's downloading?"

See references/downloads.md for qBittorrent and SABnzbd API commands.

### "Add a movie/show"

See references/media-management.md for Overseerr request workflow.
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: anotb
- Version: 1.2.0
## Source health
- Status: unstable
- Item is unstable.
- This item is timing out or returning errors right now. Review the source page and try again later.
- Health scope: item
- Reason: timeout
- Checked at: 2026-05-10T06:37:03.470Z
- Expires at: 2026-05-10T18:37:03.470Z
- Recommended action: Review source status
## Links
- [Detail page](https://openagent3.xyz/skills/truenas-skill)
- [Send to Agent page](https://openagent3.xyz/skills/truenas-skill/agent)
- [JSON manifest](https://openagent3.xyz/skills/truenas-skill/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/truenas-skill/agent.md)
- [Download page](https://openagent3.xyz/downloads/truenas-skill)