Skip to content
Skills Library
DevOps & cloud · Building & coding

thoth

/thoth

Develop and test the thoth agent container itself - entrypoint/sync scripts, compose wiring, tests, docs, CI gates. Use when working on this repository (scripts/, docker-compose.yml, Dockerfile, test/, workflows). Covers the in-container constraint that docker is unavailable and how to verify changes directly inside the running container.

Repository
thoth ↗
Licence
MIT
Last repository change
13.11.2026

Assessment and security

100/ 100Class: good
Format25 / 25
Frontmatter with name and description, valid name, description up to 1,024 characters, name matching the folder.
Discoverability25 / 25
Description explains when to use the skill, has a reasonable length and uses third person.
Content35 / 35
At least 150 words and at most 500 lines, headings, step lists, examples or code.
Hygiene15 / 15
No placeholders such as TODO, no Windows paths, with a licence.
Riskno signals detected in the scan
Files in this package
1
Scripts
0
HTML comments
0
URLs in SKILL.md
2
Deprecation

No signals detected. Repository changed on 13.11.2026, without references to retired models or APIs.

Licence

MIT, open: use and modify while retaining author attribution.

What it does and when to use it

Develop and test the thoth agent container itself - entrypoint/sync scripts, compose wiring, tests, docs, CI gates. Use when working on this repository (scripts/, docker-compose.yml, Dockerfile, test/, workflows). Covers the in-container constraint that docker is unavailable and how to verify changes directly inside the running container.

Original author description

Develop and test the thoth agent container itself - entrypoint/sync scripts, compose wiring, tests, docs, CI gates. Use when working on this repository (scripts/, docker-compose.yml, Dockerfile, test/, workflows). Covers the in-container constraint that docker is unavailable and how to verify changes directly inside the running container.

How it works

  1. Critical constraint: docker is NOT available inside the container
  2. Repository layout (what you will touch)
  3. Conventions (enforced by CI)
  4. Making and verifying a change (in-container workflow)
  5. CI flow (what happens to your change on the host)
  6. Common pitfalls in this repo
  7. Quick reference (host-side, for handoff notes)
Original SKILL.md headings · 136 lines, 922 words
SKILL.md preview
---
name: thoth
description: Develop and test the thoth agent container itself - entrypoint/sync scripts, compose wiring, tests, docs, CI gates. Use when working on this repository (scripts/, docker-compose.yml, Dockerfile, test/, workflows). Covers the in-container constraint that docker is unavailable and how to verify changes directly inside the running container.
---

# thoth developer skill

You are working on **thoth** - the containerized agent environment
(OpenCode + goose/goosetown + kubectl) maintained by jarakube.eu. This
skill covers how to change, test, and document this repository.

## Critical constraint: docker is NOT available inside the container

If you are running INSIDE the thoth container (check: `ls
/var/run/docker.sock` fails and `command -v docker` finds nothing),
there is no docker CLI and no docker socket. You cannot build images,
start the compose stack, or run docker-based tests from in here.

What this means in practice:

- **Changes can be made inside the container directly for tests**: the
  repository is reachable through the workspace mount (`/workspace`)
  or the scripts at `/app/scripts/`. Edit files, run them, observe
  behavior - no rebuild needed.
- Scripts under test run in-place: `bash /app/scripts/sync-llm-config.sh`
  writes to `~/.config/...` of the current user - inspect the generated
  configs directly to verify behavior.
- For anything that needs a REBUILD (Dockerfile changes, entrypoint
  changes used at container start), make the change, verify what you
  can in-place, and note that the full verification (`make up`) must
  happen on the HOST - hand the change off with that instruction.
- Docker-dependent tests (`test/block-egress.bats`, suricata compose
  tests in `test/entrypoint.bats`) cannot run inside; the docker-free
  suite (`test/sync-llm-config.bats`) can. Verified workflow inside
  the container:

  ```bash
  # 1. bats via a USER npm prefix (global installs need root):
  npm config set prefix ~/.npm-global
  npm install -g bats
  export PATH="$PATH:~/.npm-global/bin"

  # 2. the repo: your working copy if you mounted it into /workspace,
  #    otherwise clone it (git + gh are available):
  cd /workspace && git clone https://github.com/jarakube/thoth.git

  # 3. run the docker-free suite (tests are hermetic: they unset LLM_*
  #    so the container's own env wiring does not leak in):
  cd thoth && bats test/sync-llm-config.bats
  ```

## Repository layout (what you will touch)

| Path | Purpose |
|---|---|
| `scripts/container-entrypoint.sh` | Container startup: workspace guard, LLM key resolution, GPG setup, beads init, MCP registration. Functions + `main()` behind a source guard - unit tests source it. |
| `scripts/sync-llm-config.sh` | Single-source LLM config for OpenCode + goose (`LLM_*` env vars -> both agents' configs). |
| `scripts/block-egress.sh` + `block-egress-ns.sh` | Egress blocking (iptables `thoth-block` rules in thoth's namespace). |
| `scripts/init-suricata.sh`, `suricata-report.sh` | Suricata sidecar init + traffic overview report. |
| `docker-compose.yml` | Base stack: workspace bind mount, volumes (opencode-data, gnupg-data, beads-data), LLM_*/GPG_*/BEADS_* env wiring. |
| `docker-compose.suricata.yml` | Opt-in IDS sidecar override (never part of plain `make up`). |
| `Dockerfile` | ubuntu:26.04, kubectl, goose (ARG GOOSE_VERSION), opencode from npm, uid-matched appuser (APP_UID/APP_GID). |
| `test/*.bats` | Unit/integration tests; `test/run-tests.sh` installs bats if missing. |
| `.github/workflows/` | build.yml (owner-gated image builds + Trivy), test.yml (gated bats+shellcheck), dco.yml, ready-for-test.yml. |

## Conventions (enforced by CI)

- **DCO**: every commit needs `Signed-off-by: Name <email>` matching
  the author - commit with `git commit --signoff`.
- **Commit style**: conventional one-liners (`feat:`, `fix:`, `docs:`,
  `chore:`) with a body explaining what and why.
- **Docs sync**: after changing README/docs, regenerate `llms.txt`
  (curated index) and `llms-full.txt` (flattened) - see AGENTS.md.
- **No internal names**: only jarakube.eu (maintainer, example MCP
  server) may appear; scan before publishing:
  `rg -i "pdr-harbor|happy_bardeen|jarakube-jaraco" --hidden -g '!.git' .`
- **Host data stays on the host**: user data lives in bind mounts
  (workspace/, share/opencode-runs/) - never chown host files from
  the container.
- **shellcheck** (error severity) over `scripts/*.sh` and
  `test/run-tests.sh` runs in CI - keep scripts clean.

## Making and verifying a change (in-container workflow)

1. **Edit** the file in `/workspace` (the repo) - changes are
   immediately visible on the host through the bind mount.
2. **Targeted verification** - run the touched component directly:

   ```bash
   # entrypoint logic (functions are sourceable):
   bash -c 'source scripts/container-entrypoint.sh; gpg_clean_dead_daemon_state /tmp/test-gnupg'

   # sync script against a scratch HOME:
   HOME=/tmp/synchome LLM_ENDPOINT=http://x:4000/v1 bash scripts/sync-llm-config.sh
   jq . /tmp/synchome/.config/opencode/opencode.json
   ```

3. **Docker-free unit tests** (see above) for the touched area.
4. **Commit** with `git commit --signoff` (git works inside: the
   workspace is a git checkout; GPG signing is configured if a key was
   imported - see the README GPG section).
5. Note in the commit/PR what needs host-side verification (rebuild,
   compose lifecycle, docker-based tests).

## CI flow (what happens to your change on the host)

- PRs: Test workflow (bats + shellcheck) and Build workflow (image
  build) run only after the repo owner comments `ready for test` on
  the PR; new commits invalidate the approval. DCO checks every commit.
- main: builds + Trivy scan (CRITICAL/HIGH, unfixed-only) always run;
  images publish to ghcr.io/<owner>/thoth.

## Common pitfalls in this repo

- **Entrypoint exports do not reach `docker compose exec` shells** -
  non-interactive exec bypasses PID 1; that is why generated configs
  embed values and `.bashrc` hooks exist. Do not "fix" this by
  re-exporting in scripts; extend the generated files instead.
- **Fresh named volumes are root-owned** unless the image contains the
  mount path (see gnupg-data/beads-data seeding in the Dockerfile).
  New volume mounts need the path created in the image first.
- **jq argument context**: inside `group_by(f(x))`, `x` is evaluated
  against the ARRAY, not the element - bind explicitly
  (`group_by(. as $e | ...)`).
- **Heredoc terminators** must be column-0; indented terminators break
  bash scripts silently.
- **`bd init` takes no path argument** - it operates on CWD/BEADS_DIR.
- **PTID/PGID remap in the suricata image** only happens with
  SYS_NICE+NET_ADMIN capabilities present.

## Quick reference (host-side, for handoff notes)

```bash
make up                 # start thoth (uid-matched build, pass key)
make test               # full bats suite (host)
make suricata-up        # thoth + IDS sidecar
make block-egress ARGS="add <ip|domain>"
make suricata-report    # traffic overview
```

Versions

RepositoryScoreLicence
This page · jarakube/thoth100MIT
NirvanaGuha/thoth95MIT
NirvanaGuha/thoth90MIT
seeleai/thoth90MIT

Database snapshot: 13.11.2026 · package version b2a983762bc4 (SHA-256 digest of the entire package)

Downloads in the last 30 days: 0 · ranking

Report a problem with this skill: harmful content, incorrect descriptions or an author’s removal request.

Similar skills

  • 100docker
    Use when working with Docker — Dockerfile edits, docker-compose services, containers, or the dual-container (fast + Xdebug) setup — even when the user just says 'my container won't start'.
  • 100docker
    Docker operations, Dockerfile best practices, Compose, image optimization, and registry workflows. Use when user says 'review my Dockerfile', 'optimize my image', 'reduce image size', 'container won't start', 'set up compose', 'multi-stage build', or when working in Dockerfile,…
  • 100generating-docker-compose-files
    Execute use when you need to work with Docker Compose. This skill provides Docker Compose file generation with comprehensive guidance and automation. Trigger with phrases like "generate docker-compose", "create compose file", or "configure multi-container app".
  • 100generating-docker-compose-files
    Execute use when you need to work with Docker Compose. This skill provides Docker Compose file generation with comprehensive guidance and automation. Trigger with phrases like "generate docker-compose", "create compose file", or "configure multi-container app".
  • 100docker-development
    Docker and container development agent skill and plugin for Dockerfile optimization, docker-compose orchestration, multi-stage builds, and container security hardening. Use when: user wants to optimize a Dockerfile, create or improve docker-compose configurations, implement…
  • 100docker-development
    Use when optimising a Dockerfile, creating or improving docker-compose configurations, implementing multi-stage builds, auditing container security, or reducing image size. Triggers on "Dockerfile", "docker-compose", "container", "image size", "build cache", or "Docker best practices".

Feedback and reports

Your message goes to Bartosz Sokoliński. An email address is needed only for a reply. See the privacy policy.