Create Connector
harness/harness-skills
Generate Harness Connector YAML for integrations and create/test via MCP.
A skill your agent uses when deploying, restarting, verifying or rolling back the containerised plugged.in production stack, when the site returns 404 or 5xx after a deploy or git operation, or when…
$ npx skills add VeriTeknik/pluggedin-app --skill pluggedin-stack-ops -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install VeriTeknik/pluggedin-app pluggedin-stack-ops --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/VeriTeknik/pluggedin-app.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/pluggedin-stack-ops .claude/skills/pluggedin-stack-ops && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pluggedin-stack-ops" agent skill from https://github.com/VeriTeknik/pluggedin-app/tree/main/.claude/skills/pluggedin-stack-ops into .claude/skills/pluggedin-stack-ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pluggedin-stack-ops", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/VeriTeknik/pluggedin-app/tree/main/.claude/skills/pluggedin-stack-opsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add VeriTeknik/pluggedin-app --skill pluggedin-stack-ops -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install VeriTeknik/pluggedin-app pluggedin-stack-ops --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VeriTeknik/pluggedin-app.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/pluggedin-stack-ops .agents/skills/pluggedin-stack-ops && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pluggedin-stack-ops" agent skill from https://github.com/VeriTeknik/pluggedin-app/tree/main/.claude/skills/pluggedin-stack-ops into .agents/skills/pluggedin-stack-ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pluggedin-stack-ops", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add VeriTeknik/pluggedin-app --skill pluggedin-stack-ops -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install VeriTeknik/pluggedin-app pluggedin-stack-ops --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VeriTeknik/pluggedin-app.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/pluggedin-stack-ops .cursor/skills/pluggedin-stack-ops && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pluggedin-stack-ops" agent skill from https://github.com/VeriTeknik/pluggedin-app/tree/main/.claude/skills/pluggedin-stack-ops into .cursor/skills/pluggedin-stack-ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pluggedin-stack-ops", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/VeriTeknik/pluggedin-app.git --path .claude/skills/pluggedin-stack-ops--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add VeriTeknik/pluggedin-app --skill pluggedin-stack-ops -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install VeriTeknik/pluggedin-app pluggedin-stack-ops --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VeriTeknik/pluggedin-app.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/pluggedin-stack-ops .gemini/skills/pluggedin-stack-ops && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pluggedin-stack-ops" agent skill from https://github.com/VeriTeknik/pluggedin-app/tree/main/.claude/skills/pluggedin-stack-ops into .gemini/skills/pluggedin-stack-ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pluggedin-stack-ops", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install VeriTeknik/pluggedin-app pluggedin-stack-opsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add VeriTeknik/pluggedin-app --skill pluggedin-stack-ops -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/VeriTeknik/pluggedin-app.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/pluggedin-stack-ops .github/skills/pluggedin-stack-ops && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pluggedin-stack-ops" agent skill from https://github.com/VeriTeknik/pluggedin-app/tree/main/.claude/skills/pluggedin-stack-ops into .github/skills/pluggedin-stack-ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pluggedin-stack-ops", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add VeriTeknik/pluggedin-app --skill pluggedin-stack-ops -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install VeriTeknik/pluggedin-app pluggedin-stack-ops --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/VeriTeknik/pluggedin-app.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/pluggedin-stack-ops .opencode/skills/pluggedin-stack-ops && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pluggedin-stack-ops" agent skill from https://github.com/VeriTeknik/pluggedin-app/tree/main/.claude/skills/pluggedin-stack-ops into .opencode/skills/pluggedin-stack-ops/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pluggedin-stack-ops", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pluggedin-stack-opsA skill your agent uses when deploying, restarting, verifying or rolling back the containerised plugged.in production stack, when the site returns 404 or 5xx after a deploy or git operation, or when…
Pluggedin Stack Ops is an agent skill from VeriTeknik/pluggedin-app. Use when deploying, restarting, verifying or rolling back the containerised plugged.in production stack, when the site returns 404 or 5xx after a deploy or git operation, or when changing infra/docker-compose.yml, infra/traefik/ or the app image.
Its SKILL.md is about 1.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering MCP servers, Containers and Git workflow. It works with Git, Docker and Model Context Protocol. The repository describes itself as: The Crossroads for AI Data Exchanges. A unified, self-hostable web interface for discovering, configuring, and managing Model Context Protocol (MCP) servers—bringing together AI… The licence is MIT.
Read from SKILL.md and the folder at commit a65f1ff. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
dockergitcurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
traefik.plugged.inplugged.inFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pluggedin Stack Ops loads about 1.3k tokens when it runs. Until then it costs about 67 tokens; SKILL.md has 615 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
sudo systemctl enable --now nginx pluggedinAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from VeriTeknik/pluggedin-app at commit a65f1ff, republished under its MIT licence (© VeriTeknik). 615 words, ~1,285 tokens.
.claude/skills/pluggedin-stack-ops/SKILL.md (or your agent's skills folder).plugged.in runs as a Docker Compose stack: Traefik on :80/:443, the Next.js app,
Postgres 16 + pgvector, Redis, Ofelia (cron), and a docker-socket-proxy. The native
nginx + systemd stack it replaced is stopped and disabled but still installed.
Entry point is always infra/scripts/deploy.sh. Running compose by hand skips secret
decryption, so the secrets file and the staged Traefik config never appear.
| Task | Command |
|---|---|
| Deploy | ./infra/scripts/deploy.sh |
| Smoke test | ./infra/scripts/verify.sh (add --quick to skip the RAG canary) |
| Logs | docker compose -f infra/docker-compose.yml logs -f --tail=50 pluggedin-app traefik |
| Which routers exist | Traefik dashboard at https://traefik.plugged.in/api/http/routers (basic auth) |
Health must report "status":"healthy" and "database":true. The endpoint never
emits "ok" — asserting that is a bug that once made the smoke test unpassable.
git pull
git pullalone can 404 the site.
infra/traefik/dynamic/ is bind-mounted straight from the git working tree, and
Traefik hot-watches it. Any git operation that rewrites those files — pull,
checkout, rebase — can be observed mid-write. Traefik then loads a file missing a
middleware, every router referencing it errors, and the site returns 404 until the
next reload. Observed for ~40s after a git checkout where the before and after
content were identical: content equality is not write atomicity.
Until the dynamic config is staged outside the working tree, treat any git operation against this checkout as a change window: run it, then immediately check
curl -s -o /dev/null -w '%{http_code}\n' https://plugged.in/
docker logs --since 2m traefik 2>&1 | grep -i 'does not exist'middleware "X@file" does not exist is the signature. It self-heals on the next
reload; touch infra/traefik/dynamic/middlewares.yml forces one.
Mounts and environment are fixed at create time, and docker compose up -d only
recreates a container if its definition changed — rewriting a mounted file does not.
Secrets now come from a mounted file loaded at process start, so a changed secret needs
the container restarted, not merely the file rewritten. If a change must take effect, confirm the container was recreated:
docker inspect pluggedin-app --format '{{.State.StartedAt}}'Check from outside the host, not just via verify.sh, which only probes
internally. A stack can be internally green and externally 404 — that is exactly what
a broken Traefik provider looks like, because Traefik's own healthcheck stays green
while it serves nothing.
The native units are disabled but present:
sudo systemctl enable --now nginx pluggedin
docker compose -f infra/docker-compose.yml stop traefik
crontab /home/pluggedin/crontab.pre-ofelia.backupThis returns traffic to the external Postgres. Writes made against the
containerised database after cutover are not replayed; the dumps in
/var/backups/pluggedin/ are the reconciliation input, and they are encrypted with
the rotated data key.
| Trap | Detail |
|---|---|
| Traefik ≤ v3.5 | Pins Docker API 1.24; Engine 29 rejects it. No label router is discovered, site 404s, healthcheck stays green. v3.7 is a floor, not a preference. |
systempaths in compose | Takes =, not :. The colon form fails the recreate, not the config parse — the old container keeps serving and the error is easy to miss. |
| MCP sandboxing | Needs CAP_SYS_ADMIN + apparmor:unconfined + seccomp:unconfined + systempaths=unconfined. Any missing one silently falls back to no isolation, because MCP_ISOLATION_FALLBACK=none. Verify with bwrap ... /usr/bin/env sh -c 'echo OK; echo $$' inside the container — pid=2 proves the namespace. |
| Image disk growth | CI builds a ~4 GB image per push on this same host with no retention. Reclaim with docker image prune -af --filter until=90m. |
| Restoring a DB dump | Dumps from the external PG are encrypted with the pre-rotation data key. Run infra/scripts/reencrypt-data-key.mjs --apply then --verify, or the app cannot read 5,305 values. |
| Mistake | Result |
|---|---|
git pull without checking the site after | Possible silent 404 window |
Trusting verify.sh alone | Internal-only; misses a broken public route |
| Assuming an edited mounted file took effect | Containers keep old env until recreated |
Running compose directly instead of deploy.sh | Secrets never decrypted; Traefik config never staged |
| Restoring a dump without re-encrypting | Every MCP config and OAuth token unreadable |
© VeriTeknik, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/pluggedin-stack-ops of VeriTeknik/pluggedin-app.
Open the folder on GitHubat commit a65f1ff
Pluggedin Stack Ops next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pluggedin Stack Ops this skillVeriTeknik/pluggedin-app | 103 | — | ~1.3k | Automated safety check: Notes | MIT | |
| Create Connectorharness/harness-skills | 115 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Devcontainer Devstacklok/toolhive-studio | 170 | — | ~3.8k | Automated safety check: Notes | Apache-2.0 | |
| Unraiddinglebear-ai/unraid | 135 | — | ~5.4k | Automated safety check: Notes | MIT | |
| Devsydevsy-org/devsy | 109 | — | ~1.7k | Automated safety check: Pass | MPL-2.0 | |
| Skillz Integrationgithub/gh-aw | 5.3k | — | ~905 | Automated safety check: Pass | MIT |
harness/harness-skills
Generate Harness Connector YAML for integrations and create/test via MCP.
stacklok/toolhive-studio
Spin up and interact with ToolHive Studio's containerized dev environment (Xvfb + noVNC + DinD).
dinglebear-ai/unraid
This skill should be used when the user mentions Unraid, asks to check server health, monitor array or disk status, list or restart Docker containers, start or stop VMs, read system logs, check…
devsy-org/devsy
Operate Devsy workspaces and providers for end users. An agent skill from devsy-org/devsy.
github/gh-aw
Run and integrate Skillz MCP server with Docker for skill execution.
badseal/ssh-skill
A skill your agent uses when a task requires SSH or SCP/SFTP behavior, a remote server, server alias/IP/hostname/user@host, bastion or jump-host access, remote command execution, upload/download…
VeriTeknik/pluggedin-app
A skill your agent uses when adding, changing, reading or rotating a secret in infra/sops/secrets.env.sops, adding an age recipient, or when sops reports "Error unmarshalling input json", "Config…
Works with
Categories
A skill your agent uses when deploying, restarting, verifying or rolling back the containerised plugged.in production stack, when the site returns 404 or 5xx after a deploy or git operation, or when…. Pluggedin Stack Ops is an agent skill from VeriTeknik/pluggedin-app.yml, infra/traefik/ or the app image.
Pluggedin Stack Ops fits situations like: rolling back the containerised plugged.in production stack; the site returns 404; 5xx after a deploy; changing infra/docker-compose.yml.
Run `npx skills add VeriTeknik/pluggedin-app --skill pluggedin-stack-ops -a claude-code`. Or copy the skill folder (.claude/skills/pluggedin-stack-ops in VeriTeknik/pluggedin-app) into .claude/skills/pluggedin-stack-ops in your project. Claude Code loads it when a task matches its description.
Run `npx skills add VeriTeknik/pluggedin-app --skill pluggedin-stack-ops -a codex`. Or copy the skill folder (.claude/skills/pluggedin-stack-ops in VeriTeknik/pluggedin-app) into .agents/skills/pluggedin-stack-ops in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add VeriTeknik/pluggedin-app --skill pluggedin-stack-ops -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pluggedin-stack-ops, .gemini/skills/pluggedin-stack-ops, .github/skills/pluggedin-stack-ops and .opencode/skills/pluggedin-stack-ops in your project.
Going by SKILL.md and its folder, Pluggedin Stack Ops needs the command-line tools its instructions call (docker, git and curl). Our summary lists: Docker.
SKILL.md names 2 domains. In commands or code: traefik.plugged.in and plugged.in; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Pluggedin Stack Ops is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.3k tokens (SKILL.md is roughly 5.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pluggedin Stack Ops: Create Connector (harness/harness-skills, 115 stars), Devcontainer Dev (stacklok/toolhive-studio, 170 stars), Unraid (dinglebear-ai/unraid, 135 stars) and Devsy (devsy-org/devsy, 109 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
VeriTeknik (a GitHub organization) maintains it in VeriTeknik/pluggedin-app, which has 103 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 6, 2026.
Source: VeriTeknik/pluggedin-app on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.