Playbook for anything on the TrueNAS host — consult before touching services, data, or containers. Covers SSH entry, container interaction, and data/layout notes so you can operate safely on TrueNAS.
Provides safe TrueNAS host operations for Docker containers and services. Use this when you need to inspect, debug, or interact with containers on TrueNAS via SSH, or query the anypod SQLite database.
/plugin marketplace add thurstonsand/thurstons-claude-skills/plugin install homelab@thurstons-skillsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
scripts/docker_exec_python.shscripts/docker_exec_sqlite.shssh truenas (auth pre-configured)ansiblonomicon repo folder (in ansible/stacks/)/mnt/performance/docker/stacks/<stack>/compose.yaml/mnt/performance/docker/<stack>//mnt/capacity/watch/<container>/ansible/inventory/group_vars/truenas.yml in ansiblonomicon| Task | Command |
|---|---|
| List containers | ssh truenas docker ps |
| Filter containers | ssh truenas docker ps | grep <name> |
| View compose | ssh truenas cat /mnt/performance/docker/stacks/<stack>/compose.yaml |
| View logs | ssh truenas docker logs <container> |
| Exec command | ssh truenas docker exec -i <container> <command> |
| Inspect | ssh truenas docker inspect <container> |
Stacks are deployed via Ansible, not manually:
# From ansiblonomicon repo
poe truenas # Full playbook
poe truenas -t stacks # Just stacks
but you can run ad-hoc commands against the docker containers/compose files on the truenas host. Changes will not be preserved unless they are made to the ansiblonomicon repo.
/mnt/capacity/watch/anypod/data (binds to /data in container)
media/<feed_id>/transcripts/<feed_id>//data/db/anypod.dbfeed (PK id; feed metadata, source info, timestamps, counters)download (PK feed_id, id; per-episode info, status, transcript fields)appstate (PK id; last_yt_dlp_update, other global state)scripts/docker_exec_python.sh <container> '<python_code>'
scripts/docker_exec_python.sh anypod '
import sqlite3, json
conn = sqlite3.connect("/data/db/anypod.db")
conn.row_factory = sqlite3.Row
rows = conn.execute("SELECT * FROM feed").fetchall()
print(json.dumps([dict(r) for r in rows], indent=2))
conn.close()
'
Note: Default interpreter is
/app/.venv/bin/python(works for anypod). Override withCONTAINER_PYTHON:CONTAINER_PYTHON=/usr/bin/python3 scripts/docker_exec_python.sh your-container 'print("hi")'
scripts/docker_exec_sqlite.sh <container> <db_path> '<sql_query>'
scripts/docker_exec_sqlite.sh anypod /data/db/anypod.db '
SELECT feed_id, status, COUNT(*) AS count
FROM download
GROUP BY feed_id, status;
'
docker exec: Simple commands, logs, inspection# Is anypod running?
ssh truenas docker ps | grep anypod
# View anypod compose
ssh truenas cat /mnt/performance/docker/stacks/anypod/compose.yaml
# Query anypod DB
scripts/docker_exec_sqlite.sh anypod /data/db/anypod.db "SELECT * FROM feed;"