← Back to Skills Marketplace
asteinberger

Portainer

by Andy Steinberger · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
3373
Downloads
3
Stars
10
Active Installs
1
Versions
Install in OpenClaw
/install portainer
Description
Control Docker containers and stacks via Portainer API. List containers, start/stop/restart, view logs, and redeploy stacks from git.
README (SKILL.md)

🐳 Portainer Skill

    ╔═══════════════════════════════════════════════════════════╗
    ║                                                           ║
    ║   🐳  P O R T A I N E R   C O N T R O L   C L I  🐳      ║
    ║                                                           ║
    ║       Manage Docker containers via Portainer API          ║
    ║            Start, stop, deploy, redeploy                  ║
    ║                                                           ║
    ╚═══════════════════════════════════════════════════════════╝

"Docker containers? I'll handle them from my lily pad." 🐸


📖 What Does This Skill Do?

The Portainer Skill gives you control over your Docker infrastructure through Portainer's REST API. Manage containers, stacks, and deployments without touching the web UI.

Features:

  • 📊 Status — Check Portainer server status
  • 🖥️ Endpoints — List all Docker environments
  • 📦 Containers — List, start, stop, restart containers
  • 📚 Stacks — List and manage Docker Compose stacks
  • 🔄 Redeploy — Pull from git and redeploy stacks
  • 📜 Logs — View container logs

⚙️ Requirements

What Details
Portainer Version 2.x with API access
Tools curl, jq
Auth API Access Token

Setup

  1. Get API Token from Portainer:

    • Log into Portainer web UI
    • Click username → My Account
    • Scroll to "Access tokens" → Add access token
    • Copy the token (you won't see it again!)
  2. Configure credentials:

    # Add to ~/.clawdbot/.env
    PORTAINER_URL=https://your-portainer-server:9443
    PORTAINER_API_KEY=ptr_your_token_here
    
  3. Ready! 🚀


🛠️ Commands

status — Check Portainer Server

./portainer.sh status

Output:

Portainer v2.27.3

endpoints — List Environments

./portainer.sh endpoints

Output:

3: portainer (local) - ✓ online
4: production (remote) - ✓ online

containers — List Containers

# List containers on default endpoint (4)
./portainer.sh containers

# List containers on specific endpoint
./portainer.sh containers 3

Output:

steinbergerraum-web-1    running    Up 2 days
cora-web-1               running    Up 6 weeks
minecraft                running    Up 6 weeks (healthy)

stacks — List All Stacks

./portainer.sh stacks

Output:

25: steinbergerraum - ✓ active
33: cora - ✓ active
35: minecraft - ✓ active
4: pulse-website - ✗ inactive

stack-info — Stack Details

./portainer.sh stack-info 25

Output:

{
  "Id": 25,
  "Name": "steinbergerraum",
  "Status": 1,
  "EndpointId": 4,
  "GitConfig": "https://github.com/user/repo",
  "UpdateDate": "2026-01-25T08:44:56Z"
}

redeploy — Pull & Redeploy Stack 🔄

./portainer.sh redeploy 25

Output:

✓ Stack 'steinbergerraum' redeployed successfully

This will:

  1. Pull latest code from git
  2. Rebuild containers if needed
  3. Restart the stack

start / stop / restart — Container Control

# Start a container
./portainer.sh start steinbergerraum-web-1

# Stop a container
./portainer.sh stop steinbergerraum-web-1

# Restart a container
./portainer.sh restart steinbergerraum-web-1

# Specify endpoint (default: 4)
./portainer.sh restart steinbergerraum-web-1 4

Output:

✓ Container 'steinbergerraum-web-1' restarted

logs — View Container Logs

# Last 100 lines (default)
./portainer.sh logs steinbergerraum-web-1

# Last 50 lines
./portainer.sh logs steinbergerraum-web-1 4 50

🎯 Example Workflows

🚀 "Deploy Website Update"

# After merging PR
./portainer.sh redeploy 25
./portainer.sh logs steinbergerraum-web-1 4 20

🔧 "Debug Container"

./portainer.sh containers
./portainer.sh logs cora-web-1
./portainer.sh restart cora-web-1

📊 "System Overview"

./portainer.sh status
./portainer.sh endpoints
./portainer.sh containers
./portainer.sh stacks

🔧 Troubleshooting

❌ "Authentication required / Repository not found"

Problem: Stack redeploy fails with git auth error

Solution: The stack needs repositoryGitCredentialID parameter. The script handles this automatically by reading from the existing stack config.


❌ "Container not found"

Problem: Container name doesn't match

Solution: Use exact name from ./portainer.sh containers:

  • Include the full name: steinbergerraum-web-1 not steinbergerraum
  • Names are case-sensitive

❌ "PORTAINER_URL and PORTAINER_API_KEY must be set"

Problem: Credentials not configured

Solution:

# Add to ~/.clawdbot/.env
echo "PORTAINER_URL=https://your-server:9443" >> ~/.clawdbot/.env
echo "PORTAINER_API_KEY=ptr_your_token" >> ~/.clawdbot/.env

🔗 Integration with Clawd

"Redeploy the website"
→ ./portainer.sh redeploy 25

"Show me running containers"
→ ./portainer.sh containers

"Restart the Minecraft server"
→ ./portainer.sh restart minecraft

"What stacks do we have?"
→ ./portainer.sh stacks

📜 Changelog

Version Date Changes
1.0.0 2026-01-25 Initial release

🐸 Credits

  @..@
 (----)
( >__\x3C )   "Containers are just fancy lily pads
 ^^  ^^     for your code to hop around!"

Author: Andy Steinberger (with help from his Clawdbot Owen the Frog 🐸)
Powered by: Portainer API
Part of: Clawdbot Skills Collection


\x3Cdiv align="center">

Made with 💚 for the Clawdbot Community

Ribbit! 🐸

\x3C/div>

Usage Guidance
What to check before installing: - Metadata mismatch: the manifest only lists PORTAINER_API_KEY but the script and SKILL.md also require PORTAINER_URL. Make sure you (or the platform) provide PORTAINER_URL in the environment; otherwise the script will fail. - Dotfile and token safety: the script will read PORTAINER_ variables from ~/.clawdbot/.env. Ensure that file is readable only by you and contains only intended PORTAINER_* values. - Binaries: the script uses curl and jq (declared) but also uses column and strings in output paths; ensure those are available on the host or the script may fail. (No remote installers are used.) - Default endpoint id: many commands default to endpoint id 4. Confirm that your Portainer setup uses that id or explicitly supply the endpoint id to avoid operating on an unexpected endpoint. - Least privilege: the skill will call Portainer with the provided API token. Use a token with the minimal necessary scope for the operations you plan to allow (avoid a full-administrator token if possible). - Source verification: the skill has no homepage and the owner id is opaque; if you need higher assurance, obtain the script from a trusted source or review / run it in an isolated test environment first. If you fix the manifest to declare PORTAINER_URL and confirm the above, the skill appears coherent with its described functionality.
Capability Analysis
Type: OpenClaw Skill Name: portainer Version: 1.0.0 The skill bundle is benign, providing legitimate functionality to control Docker containers and stacks via the Portainer API. The `SKILL.md` clearly outlines its purpose and commands, without any prompt injection attempts. The `portainer.sh` script uses `curl` and `jq` to interact with the Portainer API, handling `PORTAINER_URL` and `PORTAINER_API_KEY` securely from `~/.clawdbot/.env`. All API calls are directed to the configured Portainer instance, with no evidence of data exfiltration to unauthorized endpoints, malicious execution (e.g., `curl|bash`), persistence mechanisms, or obfuscation.
Capability Assessment
Purpose & Capability
The name/description match the included script: it calls the Portainer REST API to list endpoints, control containers, view logs, and redeploy stacks. However the registry metadata only declares PORTAINER_API_KEY as a required environment variable while the script also requires PORTAINER_URL (and the SKILL.md instructs users to set PORTAINER_URL). This metadata omission is an inconsistency that could lead to confusion or misconfiguration.
Instruction Scope
Runtime instructions and the shell script stay within the stated purpose: they call Portainer API endpoints, read stack config to redeploy, and present logs. The script loads PORTAINER_* variables from ~/.clawdbot/.env (as instructed). This is expected, but the script will read that dotfile for PORTAINER_ variables — ensure that file only contains the intended tokens. The script does not appear to transmit data to any external endpoint other than the configured Portainer server.
Install Mechanism
This is instruction-only with an included shell script; there is no installer that downloads or executes remote code. That reduces supply-chain risk compared with arbitrary remote installs.
Credentials
The declared required env vars (metadata) list only PORTAINER_API_KEY but the script also requires PORTAINER_URL; the manifest should include both. The skill does not request unrelated credentials, which is good. The script also reads ~/.clawdbot/.env for PORTAINER_ keys (grep '^PORTAINER_') — that is reasonably scoped but you should ensure that file is protected. The script references Portainer-managed Git credential IDs when redeploying stacks (it uses those IDs from the stack config), which is expected behavior for redeploy, not a request for external Git secrets.
Persistence & Privilege
The skill does not request always:true, does not modify other skills or system-wide configs, and contains no install-time persistence. It runs on demand and uses the provided API token to call the Portainer server.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install portainer
  3. After installation, invoke the skill by name or use /portainer
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Initial release - Docker container and stack management via Portainer API
Metadata
Slug portainer
Version 1.0.0
License
All-time Installs 10
Active Installs 10
Total Versions 1
Frequently Asked Questions

What is Portainer?

Control Docker containers and stacks via Portainer API. List containers, start/stop/restart, view logs, and redeploy stacks from git. It is an AI Agent Skill for Claude Code / OpenClaw, with 3373 downloads so far.

How do I install Portainer?

Run "/install portainer" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Portainer free?

Yes, Portainer is completely free (open-source). You can download, install and use it at no cost.

Which platforms does Portainer support?

Portainer is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Portainer?

It is built and maintained by Andy Steinberger (@asteinberger); the current version is v1.0.0.

💬 Comments