Building AI Agent On Cloudflare
CommandCodeAI/agent-skills
Builds AI agents on Cloudflare using the Agents SDK with state management, real-time WebSockets, scheduled tasks, tool integration, and chat capabilities.
Drive PenguinHarness itself from a shell — list and create agents and sessions, send and steer messages mid-flight, and query costs and scheduled tasks via the penguin CLI over the local server.
$ npx skills add Prism-Shadow/penguin-harness --skill penguin-orchestration -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Prism-Shadow/penguin-harness penguin-orchestration --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/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/agent-development/skills/penguin-orchestration .claude/skills/penguin-orchestration && 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 "penguin-orchestration" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/agent-development/skills/penguin-orchestration into .claude/skills/penguin-orchestration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "penguin-orchestration", 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/Prism-Shadow/penguin-harness/tree/main/plugins/agent-development/skills/penguin-orchestrationType 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 Prism-Shadow/penguin-harness --skill penguin-orchestration -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Prism-Shadow/penguin-harness penguin-orchestration --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/agent-development/skills/penguin-orchestration .agents/skills/penguin-orchestration && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "penguin-orchestration" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/agent-development/skills/penguin-orchestration into .agents/skills/penguin-orchestration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "penguin-orchestration", 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 Prism-Shadow/penguin-harness --skill penguin-orchestration -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Prism-Shadow/penguin-harness penguin-orchestration --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/agent-development/skills/penguin-orchestration .cursor/skills/penguin-orchestration && 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 "penguin-orchestration" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/agent-development/skills/penguin-orchestration into .cursor/skills/penguin-orchestration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "penguin-orchestration", 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/Prism-Shadow/penguin-harness.git --path plugins/agent-development/skills/penguin-orchestration--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 Prism-Shadow/penguin-harness --skill penguin-orchestration -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Prism-Shadow/penguin-harness penguin-orchestration --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/agent-development/skills/penguin-orchestration .gemini/skills/penguin-orchestration && 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 "penguin-orchestration" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/agent-development/skills/penguin-orchestration into .gemini/skills/penguin-orchestration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "penguin-orchestration", 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 Prism-Shadow/penguin-harness penguin-orchestrationInstalls 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 Prism-Shadow/penguin-harness --skill penguin-orchestration -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/agent-development/skills/penguin-orchestration .github/skills/penguin-orchestration && 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 "penguin-orchestration" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/agent-development/skills/penguin-orchestration into .github/skills/penguin-orchestration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "penguin-orchestration", 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 Prism-Shadow/penguin-harness --skill penguin-orchestration -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Prism-Shadow/penguin-harness penguin-orchestration --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Prism-Shadow/penguin-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/agent-development/skills/penguin-orchestration .opencode/skills/penguin-orchestration && 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 "penguin-orchestration" agent skill from https://github.com/Prism-Shadow/penguin-harness/tree/main/plugins/agent-development/skills/penguin-orchestration into .opencode/skills/penguin-orchestration/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "penguin-orchestration", 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.
penguin-orchestrationDrive PenguinHarness itself from a shell — list and create agents and sessions, send and steer messages mid-flight, and query costs and scheduled tasks via the penguin CLI over the local server.
Penguin Orchestration is an agent skill from Prism-Shadow/penguin-harness. Drive PenguinHarness itself from a shell — list and create agents and sessions, send and steer messages mid-flight, and query costs and scheduled tasks via the penguin CLI over the local server.
Its SKILL.md is about 4.2k 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 Productivity & Automation, covering Building AI agents and Scheduled and recurring tasks. The repository describes itself as: 🐧 Unified and Stable RSI Platform. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 2604c5d. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
PENGUIN_API_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Penguin Orchestration loads about 4.2k tokens when it runs. Until then it costs about 54 tokens; SKILL.md has 1,979 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 found no risky patterns in SKILL.md.
Automated 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 Prism-Shadow/penguin-harness at commit 2604c5d, republished under its Apache-2.0 licence (© Prism-Shadow). 1,979 words, ~4,239 tokens.
.claude/skills/penguin-orchestration/SKILL.md (or your agent's skills folder).The penguin CLI is a thin client of the PenguinHarness server. Inside a harness agent session it reaches the same server that is running you, so you can orchestrate the platform yourself: list and create agents, start conversations with them, steer those conversations while they run, and query costs and scheduled tasks.
If the user's message only invokes this skill (e.g. "use penguin-orchestration skill") without a concrete request, ask the user what they want to orchestrate. Read-only commands (project ls, agent ls, ls, logs, cost, schedule ls) are always safe; do not create agents, start sessions or send messages until the goal is clear.
PENGUIN_API_URL, PENGUIN_API_TOKEN, PENGUIN_PROJECT_ID, PENGUIN_AGENT_ID and PENGUIN_SESSION_ID injected, so penguin commands automatically reach your own server with your project and agent as the defaults — no login step.<data-root>/api-token file (0600) authenticates it.Before mutating anything, see what exists:
penguin project ls # projects on this server
penguin agent ls # agents in the current project
penguin ls --json # the project's sessions, with running state--json on any listing gives machine-parseable output.
penguin run -m <msg> [--project-id <id>] [--agent-id <id>] [--workspace <path>]
[--model-id <id> --provider <p>] [--approve <mode>] [--thinking <level>]
[--session <session_id>] [--background] [--timeout <duration>]
[--goal [budget]] [--json]
penguin ls [--project-id <id>] [--agent-id <id>] [--days <n>] [-a|--all] [--json]
penguin input [session_id] [-m <text>] [--timeout <duration>]
[--project-id <id>] [--agent-id <id>] [--json] [--server <url>]
penguin logs [session_id] [--project-id <id>] [--agent-id <id>] [--tail <n>]
[-f|--follow] [--timeout <duration>] [--json]
penguin agent ls [--project-id <id>] [--json]
penguin agent create --agent-id <id> [--name <s>] [--description <s>] [--skills <a,b>]
[--project-id <id>] [--json]
penguin project ls [--json]
penguin cost [--days <n>] [--from <d> --to <d>] [--by date|agent|model|session]
[--project-id <id>] [--agent-id <id>] [--json]
penguin schedule ls [--project-id <id>] [--agent-id <id>] [--json]
penguin schedule add <name> --prompt <s> --start-at <ISO|now> [--period <duration>]
[--end-at <ISO>] [--session-id <id> | --workspace <path>
[--model-id <id> --provider <p>]] [--disabled]
[--project-id <id>] [--agent-id <id>]
penguin schedule update <name> [<same field flags>] [--enable|--disable]
[--project-id <id>] [--agent-id <id>]
penguin schedule rm <name> [--project-id <id>] [--agent-id <id>]run starts a task and waits, rendering the conversation, unless --background — then it prints the new session id and exits while the server keeps running the task. --session <session_id> runs the task in an existing session instead of creating one; the model reference is the --provider + --model-id pair (both or neither); --goal [budget] runs in goal mode — the session loops until the agent declares the goal complete, with an optional spend budget.run fills every field you leave unspecified from your own live session, per field independently: --workspace, the --model-id/--provider pair, --approve and --thinking inherit the caller's values — the same convention as run_subagent parent inheritance. Precedence: explicit flag > caller value > plain fallback (cwd, the Project default model, allow-all, none — used wholesale if the caller lookup fails, with a dim stderr note). So inside an agent, penguin run -m "..." alone typically does the right thing; pass flags only to diverge.--timeout <duration> (30s, 5m, 2h, or bare seconds) bounds the wait of a foreground run, an input, or a logs -f. Expiry is a soft yield, not an error: the command exits 0 while the task keeps running server-side, printing a still-running note that names the follow-up commands (--json prints {sessionId, status: "running", text} with the text so far). --timeout 0 (also 0s) returns immediately after delivery — the same note without collected text (--json: {sessionId, status: "running"}); on a bare poll it snapshots a running session instantly. run --background stays the idiomatic fire-and-forget for new tasks and rejects --timeout; logs --timeout requires -f.input with -m steers a running session mid-turn (the agent absorbs it as a course correction within the current task) or starts a new turn on an idle one; it waits for the reply unless a --timeout bounds the wait (--timeout 0 = deliver and return at once). Bare input [session_id] (no -m) polls: it prints the session's most recent complete assistant text — an idempotent snapshot that skips user/thinking/tool output and never touches approvals, mirroring input_subagent's empty-prompt semantics. A running session is waited on first (bounded by --timeout, else indefinitely); a session with no reply yet prints (no assistant reply yet). --json reports {sessionId, status, text} — idle/running when polling, completed/aborted/running with -m.ls spans every agent of the project, newest first (by last active); archived sessions are left out unless -a/--all includes them, and --days <n> keeps only sessions last active since local midnight n−1 days ago — today counts as day 1, so --days 2 is yesterday and today, --days 7 this week. logs renders a session's transcript: --tail <n> for the last entries, -f to follow live.session-YYYY-MM-DD-HH-mm-ss-<8hex>. Every <session_id> argument takes any unique substring of an id; the 8-hex tail is the recommended short form, and an ambiguous fragment errors listing the candidates. On input and logs, --project-id scopes that fragment search (unnecessary with a full id).input and logs the id is optional altogether: omitted, it is the agent's most recent session, off the same newest-first listing chat --resume uses, with --agent-id picking whose. The chosen id is announced as a dim [latest] line on stderr, so the target is never ambiguous and --json on stdout stays parseable. Bare penguin logs is therefore "what just happened" and bare penguin input is "what did my agent last say"; an agent with no session at all gets one line pointing at penguin run and a non-zero exit.penguin ls --days 2 --json # yesterday + today (today counts as day 1)
penguin ls --days 7 --json # this week; add -a to include archived sessions
penguin input <session_id> # one session's latest complete assistant reply--days <n> keeps sessions last active since local midnight n−1 days ago. For strictly-yesterday, take --days 2 and drop today's entries client-side — ids embed the creation date and the JSON carries last-active.input prints the latest reply; add --timeout 0 to snapshot a running session instantly instead of waiting for its turn to finish.A fresh session gets a fresh context window for the summary; feed it through a file, not the prompt:
penguin ls --days 7 --json # pick the sessions
penguin logs <session_id> --tail 100 # gather each transcript (widen if cut short)
# write what you gathered into a workspace file with your file tools, then:
penguin run -m "Read ./weekly-material.md and write the weekly summary to ./weekly-summary.md"./weekly-material.md and have the new session read it there. Pages of transcript do not belong in -m../weekly-summary.md (the foreground run also renders the reply).penguin agent create --agent-id greeter --name "Greeter" --description "Welcomes people"
penguin run --agent-id greeter -m "Hello! Introduce yourself."^[a-z][a-z0-9_]{1,63}$: a lowercase letter first, then lowercase letters, digits and underscores — no hyphens.--skills a,b (library names) — include penguin-orchestration itself when the new agent must drive the harness too.--agent-id switches only the agent: workspace, model, approval and thinking still inherit from your own session (caller-context defaults) — add those flags to change them too. Each run without --session opens a fresh session; reuse a session id to continue a conversation.penguin cost --days 7 --by agent --json # who spent what this week
penguin run -m "Summarize this per-agent cost report and flag anomalies: <the JSON>"penguin cost card already carries today / last 7 days / total; --by date|model|session and --from <d> --to <d> give the other cuts, --project-id / --agent-id narrow the scope.--by agent report is small enough to inline in -m; for long breakdowns (--by session over a busy week), use the file-exchange pattern from the weekly-summary recipe.penguin schedule add build-watch --prompt "Check the build results and report the failures" \
--start-at now --period 12h --session-id "$PENGUIN_SESSION_ID" \
--end-at <ISO instant> # only when the request has a horizon
penguin schedule add daily-report --prompt "Summarize yesterday's conversations" \
--start-at now --period 1d # no target: a fresh session per firing
penguin schedule ls # verify
penguin schedule update daily-report --period 12h # adjust; --enable/--disable to toggle
penguin schedule rm daily-report # remove — no confirmation prompt--agent-id defaults to yourself from the caller env, so this schedules the current agent. --start-at takes ISO 8601 or now; --period is at least 5m (30m/12h/1d/7d), omit it for a one-shot; --end-at bounds recurrence. Target the session you are in — --session-id "$PENGUIN_SESSION_ID" — unless the user asked for somewhere else: the prompt then arrives in this conversation, with its context. Leave the target off when the user wants a separate session, or when the task is better off starting clean (a nightly report that should not inherit this conversation); each firing then opens a new session, which --workspace <path> and the --model-id + --provider pair configure.add creates the schedule enabled (--disabled stages it off) — deliberately diverging from the raw file, where enabled defaults to false. update is read-modify-write: unspecified fields keep their stored values, and switching the target form clears the other one.schedule ls, read: the AGENT column (without --agent-id the listing spans agents), enabled (a disabled entry never fires), startAt (first firing), period (absent means one-shot), the target — an existing session versus a new session per firing — and lastFiredAt.<app_data_dir>/agents/<agent_id>/agent_state/schedule/<name>.toml, fields mirroring the flags (prompt, enabled — false by default in the file, start_at, period, end_at, session_id / workspace+provider+model_id) — and remains editable with file tools; your system prompt's schedule roster lists yours. A hand edit is only validated by the periodic reconcile (roughly every 30s), with errors landing in error records rather than your terminal — prefer the CLI.Two patterns; both leave you free while the conversation runs.
(a) Background CLI process — you get a completion report. Run the CLI itself as a background command: exec_command with run_in_background: true and the command
penguin run --agent-id <agent_id> -m "<long task>"[background_task_done] report when the CLI exits — no polling needed for completion.penguin ls --json (it shows as running, with the newest id) and steer it: penguin input <session_id> -m "Focus on X; skip Y" --timeout 0 (deliver and return at once).penguin input <session_id> --timeout 30s — a bounded wait that exits 0 with a still-running note when the reply is not in yet — or read the raw transcript with penguin logs <session_id> --tail 20.(b) Server-side background — survives you. penguin run --background --agent-id <agent_id> -m "<long task>" prints the session id and exits; the server keeps running the task with no local process.
penguin input <session_id> --timeout 30s, watch live with penguin logs <session_id> -f, and check running state with penguin ls --json; steer with penguin input <session_id> -m ... the same way.Prefer (a) when you stay around for the result — the completion report comes to you. Prefer (b) when the work must survive your own session ending, or when fanning out many tasks without holding a process per task. A bounded foreground run is the middle ground: penguin run --timeout 5m -m "..." renders up to the bound, then soft-yields with the task still running — pick up the answer later with a bare penguin input <session_id>.
penguin input at a busy session steers the running task rather than starting a second one; a new task sent at a busy session waits its turn. For parallel work, start parallel sessions.allow-all when there is no caller to inherit from); if you yourself run under always-ask, pass --approve allow-all (trusted work) or --approve read-only explicitly — an unattended always-ask session hangs waiting for approval in the web UI.--end-at whenever the request has a natural horizon (or no --period at all, for a one-time reminder), and a prompt whose per-firing work stays small — that session's context grows with every firing. When the user wants it open-ended, leave --end-at off and tell them it runs until they remove it.penguin cost shows it); a fan-out of sessions multiplies spend.penguin agent api manages an agent's Agent API. Its status and keys ls only read. Never run enable, disable, set, keys create, keys rm or server yourself: the server refuses them to your token (403 human_required), and you must not sign in or mint a session to get past that. Ask the user to make the change on the agent's API tab, or in their own terminal after penguin auth login. To connect a program to an agent, use the penguin-sdk skill..project_config.toml or agent_state/.vault.toml — models and secrets go through penguin config (see the penguin-cli skill).© Prism-Shadow, Apache-2.0. 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 plugins/agent-development/skills/penguin-orchestration of Prism-Shadow/penguin-harness.
Open the folder on GitHubat commit 2604c5d
Penguin Orchestration 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 |
|---|---|---|---|---|---|---|
| Penguin Orchestration this skillPrism-Shadow/penguin-harness | 2.5k | — | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Building AI Agent On CloudflareCommandCodeAI/agent-skills | 133 | — | ~2.3k | Automated safety check: Pass | MIT | |
| ScheduleTinyAGI/tinyagi | 3.6k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Send User MessageTinyAGI/tinyagi | 3.6k | — | ~829 | Automated safety check: Pass | MIT | |
| Cron Opsczl9707/build-your-own-openclaw | 1.9k | — | ~593 | Automated safety check: Pass | MIT | |
| X Bookmarkssharbelxyz/x-bookmarks | 289 | — | ~2k | Automated safety check: Notes | None |
CommandCodeAI/agent-skills
Builds AI agents on Cloudflare using the Agents SDK with state management, real-time WebSockets, scheduled tasks, tool integration, and chat capabilities.
TinyAGI/tinyagi
Create, list, and delete scheduled tasks (recurring or one-time) that send messages to agents.
TinyAGI/tinyagi
Send a proactive message to a paired user via their channel (Discord, Telegram, or WhatsApp).
czl9707/build-your-own-openclaw
Create, list, and delete scheduled cron jobs. An agent skill from czl9707/build-your-own-openclaw.
sharbelxyz/x-bookmarks
Fetch, summarize, and manage X/Twitter bookmarks via bird CLI or X API v2.
Automattic/agent-skills
A skill your agent uses when working with WP-CLI (wp) for WordPress operations: safe search-replace, db export/import, plugin/theme/user/content management, cron, cache flushing, multisite, and…
Prism-Shadow/penguin-harness
Make a reply easier to read and act on with rich blocks inside ordinary Markdown — a choice the user picks from, a form that collects several answers, a procedure as steps with warnings in place, a…
Prism-Shadow/penguin-harness
A skill your agent uses when developing PenguinHarness itself — changing packages/{core,server,web,cli,desktop,landing,docs,skills}, the built-in model catalog, the installers or the release…
Prism-Shadow/penguin-harness
Create and edit Bento presentations — self-contained .bento.html decks whose document is JSON.
Prism-Shadow/penguin-harness
A skill your agent uses when standing PenguinHarness up to try a change by hand — launching the Web App, the desktop shell, the landing page, the docs site or the component gallery to click through…
Prism-Shadow/penguin-harness
A skill your agent uses when changing the PenguinHarness Web App (packages/web) or the shared UI package — adding or restyling any UI, picking a status colour, adding an icon, laying out a row or a…
Prism-Shadow/penguin-harness
Drive the PenguinHarness agent browser — the desktop app's built-in browser or the user's own Chrome — from the shell with penguin browser: open pages, read them as simplified HTML or text, act with…
Categories
Drive PenguinHarness itself from a shell — list and create agents and sessions, send and steer messages mid-flight, and query costs and scheduled tasks via the penguin CLI over the local server. Penguin Orchestration is an agent skill from Prism-Shadow/penguin-harness. Drive PenguinHarness itself from a shell — list and create agents and sessions, send and steer messages mid-flight, and query costs and scheduled tasks via the penguin CLI over the local server.
Penguin Orchestration fits situations like: tasks that involve Building AI agents; tasks that involve Scheduled and recurring tasks.
Run `npx skills add Prism-Shadow/penguin-harness --skill penguin-orchestration -a claude-code`. Or copy the skill folder (plugins/agent-development/skills/penguin-orchestration in Prism-Shadow/penguin-harness) into .claude/skills/penguin-orchestration in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Prism-Shadow/penguin-harness --skill penguin-orchestration -a codex`. Or copy the skill folder (plugins/agent-development/skills/penguin-orchestration in Prism-Shadow/penguin-harness) into .agents/skills/penguin-orchestration 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 Prism-Shadow/penguin-harness --skill penguin-orchestration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/penguin-orchestration, .gemini/skills/penguin-orchestration, .github/skills/penguin-orchestration and .opencode/skills/penguin-orchestration in your project.
Going by SKILL.md and its folder, Penguin Orchestration needs credentials named PENGUIN_API_TOKEN. Our summary lists: A credential in PENGUIN_API_TOKEN.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Penguin Orchestration is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k 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 Penguin Orchestration: Building AI Agent On Cloudflare (CommandCodeAI/agent-skills, 133 stars), Schedule (TinyAGI/tinyagi, 3.6k stars), Send User Message (TinyAGI/tinyagi, 3.6k stars) and Cron Ops (czl9707/build-your-own-openclaw, 1.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Prism-Shadow (a GitHub organization) maintains it in Prism-Shadow/penguin-harness, which has 2,469 GitHub stars. The repository holds 30 skills in this directory. The repository was last updated on October 10, 2026.
Source: Prism-Shadow/penguin-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.