Borrowing it
Nothing to install: this file belongs to stefanhoelzl/codehydra. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/stefanhoelzl/codehydra/main/.claude/skills/appctrl/SKILL.mdgit clone --depth 1 https://github.com/stefanhoelzl/codehydraWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/stefanhoelzl/codehydra/appctrl)<a href="https://agentmods.dev/skills/stefanhoelzl/codehydra/appctrl"><img src="https://agentmods.dev/badge/skills/stefanhoelzl/codehydra/appctrl/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/stefanhoelzl/codehydra/appctrl"><img src="https://agentmods.dev/badge/skills/stefanhoelzl/codehydra/appctrl.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00054 | $0.00913 |
| Opus 5.5 | $0.00022 | $0.00365 |
| Sonnet 5.5 | $0.00011 | $0.00183 |
| Haiku 4.5 | $0.00005 | $0.00091 |
Grade A, and why
appctrl scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 44 lines — stays where its author put it; the contents beside it link to each section on GitHub.
AppCtrl: drive the running app
pnpm -s appctrl <command> (scripts/appctrl.ts) launches and drives this worktree's app. start spawns a background daemon that owns the app and exits with it; every other command talks to it over HTTP on 127.0.0.1. One app per worktree.
Before a first session, run pnpm -s appctrl guide (views, selectors, shadow DOM, the sidebar, recipes). --help lists commands, <command> --help their flags.
Everything lands in ./app-data: logs/, screenshots/, appctrl-console.jsonl, appctrl-daemon.log.
Commands
| Command | Does |
|---|---|
start [--headed] [--packaged <exe>] [-- <flag>…] |
Launch (headless by default; needs pnpm build), return once the UI is up |
stop / status |
Quit through the app's shutdown path / is one running |
screenshot [-t <view>] |
Write a PNG to ./app-data/screenshots/, print the path: then Read it |
dom [selector] |
Accessibility tree as YAML: find selectors here first |
click <sel> / key <combo> |
Trusted input (key Control+Shift+p) |
type <text> [--selector <sel>] |
Type into the focused element (or fill a selector) |
wait-for <sel> [--state <s>] [--timeout <ms>] |
Wait until visible (or attached/detached/hidden); default 10000 ms |
eval <code | -> |
Evaluate an expression (- = stdin), result as JSON |
expand-sidebar |
Open the sidebar and wait until it is clickable |
dialog <path>… |
Make the folder picker return these paths |
resume |
Emit powerMonitor resume (the app:resume path) |
targets |
List the UI page and workspace iframes as JSON |
console [--level <l>] [--clear] |
Renderer console since start (last 500); works after the app is gone |
logs [--scope <s>] [--level <l>] [--limit <n>] |
App log, newest first; needs no running app |
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 44 lines · 54 tokens per session scan A 4d6b9a0288f4
appctrl is a skill published in the GitHub repository stefanhoelzl/codehydra (20 stars, last pushed today), licensed MIT. It adds 54 tokens to every session and 913 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-26.
Other skills, from other repositories
browser-edge-cases
SOP for debugging browser automation failures on complex websites. Use when browser tools fail on specific sites like LinkedIn, Twitter/X, SPAs, or sites with Shadow DOM.
browserwing-admin
Manage and operate BrowserWing — an intelligent browser automation platform. Install dependencies, configure LLM, create/manage/execute automation scripts, use AI-driven exploration to generate scripts, browse the script marketplace, and troubleshoot issues.
playwright-interactive
Persistent browser and Electron interaction through jsrepl for fast iterative UI debugging.
javascript-sandbox
Best practices for using the stagewise built-in JavaScript sandbox. Explains how to access APIs for browser debugging/interaction, use external dependencies, file system access, running mini-apps, etc.
ahk-triage
Triage a bug or unexpected behavior. Deep diagnostic analysis with structured report. No tasks created, no harness tracking.
ahk-ask
Ask a question about this codebase — where is X, does Y exist, how does Z work. Read-only. No tasks created, no harness tracking.