Counts tool calls beside the spinner, adds /tally, and refuses force pushes

Claude Code skills for AI-aware development and life organization.
These skills share the ad-conversion-hub contract. Use the platform skill for vendor setup and API details. Use ad-conversion-hub for canonical events, consent, hashing, deduplication, and failure isolation.
| Skill | Platform |
|---|---|
| ads-google | Google Ads + GA4 |
| ads-meta | Meta |
| ads-reddit | |
| brand | Suite of 22. Run a whole brand from one visual direction — voice, landing page, avatar, OG card, LinkedIn banner, Instagram carousels, YouTube thumbnails and edit style, podcast cover, decks. Start with brand-router: it surveys what you actually publish and recommends a kit of three registers rather than one style. |
| ads-microsoft | Microsoft Advertising |
| ads-amazon | Amazon Ads |
| ads-tiktok | TikTok |
| ads-linkedin | |
| ads-pinterest | |
| ads-snapchat | Snapchat |
| ads-x | X |
| ads-apple-search | Apple Search Ads |
| Skill | Platform |
|---|---|
| ads-taboola | Taboola |
| ads-outbrain | Outbrain Amplify |
| ads-criteo | Criteo |
| ads-trade-desk | The Trade Desk |
| ads-quora | Quora |
| ads-spotify | Spotify |
| ads-nextdoor | Nextdoor |
| ads-yelp | Yelp |
| ads-stackadapt | StackAdapt |
| Skill | Platform |
|---|---|
| ads-chatgpt | ChatGPT Ads |
| ads-perplexity | Perplexity Ads |
| ads-copilot | Microsoft Copilot Ads |
| ads-meta-ai | Meta AI Ads |
| Skill | Platform |
|---|---|
| ads-baidu | Baidu |
| ads-tencent | Tencent |
| ads-douyin | Douyin / Ocean Engine |
| ads-weibo | |
| ads-xiaohongshu | Xiaohongshu |
| ads-kuaishou | Kuaishou |
| ads-bilibili | Bilibili |
| ads-yandex-direct | Yandex Direct |
| ads-vk | VK |
| ads-naver | Naver |
| ads-kakao | Kakao Moment |
| ads-yahoo-japan | Yahoo Japan / LY Ads |
| ads-line | LINE Ads |
| ads-sharechat | ShareChat |
| ads-moj | Moj |
| ads-shopee | Shopee |
| ads-hotstar | Hotstar |
| ads-mercadolibre | Mercado Libre |
| ads-twitch | Twitch |
| ads-roku | Roku |
| ads-samsung | Samsung Ads |
| ads-lg | LG Ads |
| ads-strava | Strava |
| ads-discord | Discord |
| ads-waze | Waze |
organizer/)A coordinated suite for organizing across every digital surface — files, notes, mail, calendars, contacts, photos, social bookmarks, code. Run org-life-organizer first to survey preferences and get a recommended sequence. See organizer/README.md for the full catalog (21 sub-skills) and organizer/DESIGN.md for architecture.
One family, six questions. Start at ci-speed-diagnosis — it names the constraint and routes to the skill that holds the lever. The others assume you already know which job matters.
| Skill | Answers |
|---|---|
| ci-speed-diagnosis — the entry point | Find out why the CI optimisations you already have do nothing, before adding more. The measure-first order (latency vs machine seconds, then the critical path, then cache health), the checklist of defects that fail silently behind a green check (a secret holding an empty value, a task runner stripping TURBO_* from child processes, a .next/** output glob that sweeps the incremental cache into a 1.2 GB artifact whose upload fails, ref-scoped duplicate caches filling the quota, restore-keys with no lockfile-independent fallback, Prettier's mtime cache strategy that actions/checkout defeats, a buffering cache server that caps uploads), the bug shape that recurs most — one host's mitigation applied on every host — and the measurement discipline that keeps the numbers honest. |
| ci-build-speed | Make CI fast AND reliable for a Next.js + bun + Turborepo monorepo on GitHub Actions — profile to find the critical path (it's the build), cache everything, fix the build OOM (the memoryBasedWorkersCount-overrides-cpus gotcha + swap + free disk), build-once dedup, concurrency cancel, with the honest verdict on what moves wall-clock vs only CI minutes. |
| e2e-ci-economics | Place and gate a browser end-to-end suite so it earns its cost. Why a job with continue-on-error: true on every push is the worst of the three states — it was the longest job in two pipelines and gated nothing — plus gating on a minimal browser set and running the full matrix nightly, why you shard instead of raising workers (two workers share one dev server and one database), the fixed per-shard cost that sets the floor, why an E2E result must never enter a task-runner cache, the default-branch alert that catches the suite everyone stopped reading, how to report a retry-pass, and why you address a collection member by a stable key rather than by index — an indexed assertion silently retargets the first time anything is prepended. Ends with what a linter can enforce here and what it cannot. |
| high-volume-ci-optimization | Job placement and cost for CI on repos where agents open many PRs per hour. A warm Boat JIT pool for private Linux CI, collapsing job fan-out, host-local caches outside the workspace, parallelism caps, fixed-port services routing, duplicate-work filters, affected-only builds, a shared remote cache, cache-masking hazards, and cost comparison. Cross-references self-hosted-runner-fleet for host setup. |
| ci-cost-at-agent-scale | Fix CI cost and CI queueing on a repo where agents open most of the pull requests. Audits where the runs come from first, then fixes in cost order: delete workflows whose steps are all ref-gated (they install and exit green), add concurrency groups, path-filter the heavy suites, share the build cache, change runners last. Explains why the real ceiling is concurrent-job limits rather than minutes, why a review bot's fix commits multiply every other workflow, and why agent sandboxes cannot replace a CI runner. |
| self-hosted-runner-fleet | Use a warm Boat JIT runner pool for private Linux CI. Covers labels, the broker and agent split, caches, one job per Box, pool wall-time costs, and the retired desktop procedure for hosts that need special hardware. |
Drive the owner's iPhone with iphone-agent through esp32-iphone-agent, UxPlay name iPhone Agent, and an ESP32-S3 USB HID mouse on AssistiveTouch. A recipe step is written only after the phone shows it. Messages, Safari, Phone, Settings, Mail, T3 Code, Notification Centre, Facebook, Instagram, and TikTok are verified opens. TikTok leave is not verified.
npx skills add pooriaarab/skills/iphone-agent
| Skill | Description |
|---|---|
| eco-mode | Cut token/CO₂ usage ~65% without quality loss. Caveman-inspired. |
| eco-analyze | /eco-analyze — calculate your real carbon footprint from Claude Code history |
| multi-account-cli | One-command switching between work and personal accounts across gcloud, gws, Firebase, and Netlify. |
| personal-credentials | The personal credential fleet — four Claude Pro/Max subs on one macOS machine: the two token classes that decide who can be auto-routed (setup-token = inference-only vs fullscope OAuth), the keychain session scheme, OffRouter/CodexBar token stores and their 403-driven "no healthy account" drift, the claude-subs-resync repair loop, and Instinct vault seeding — including the allowlist of what an agent-facing vault should never hold. |
| chrome-profile-fleet | One Chrome profile per online identity — work, personal, per-subscription, per-domain — so sessions never mix. Covers the safe Local State recipe (browser fully quit, backup first, bundled automation Chromes share the process name), the Purpose (email) naming convention, the three mailbox shapes (hosted mailbox / routed alias / plus-alias), Gmail send-as through Google's own SMTP (app password + include:_spf.google.com — mandatory on p=reject DMARC domains), and Cloudflare Email Routing's one-rule-one-action-per-address constraint. |
| delegate-implementation | Orchestrator-implementer pattern for 10+ PR campaigns. Opus plans, Gemini Flash / Haiku / GPT-5 mini / Cursor Composer 2.5 implements. 50-80% cost savings vs all-Opus. |
| agent-avatar-system | Give every agent, user, or tenant a generated avatar derived from its name — deterministic, nothing stored, nothing chosen. Take a generator's body (blobatar/DiceBear) and draw your OWN face on it, so the roster gains silhouette variety without losing brand identity — most of those libraries are pose-only and structurally cannot draw a mouth. Pin colour to a fixed brand hue set: one locked hue collapses 60 entities to ~6 distinguishable colours, ten hues give 60 with zero collisions. Reach every surface by changing the shared display component and the mascot component, not the call sites (31 surfaces from 2 files). Covers containing the risk of parsing a library's internal output shape, compositor-only animation, and the verification that actually catches things. |
| cheap-model-triage | Decide when to route bulk search triage to a cheap fast model and when that is unsafe. Draws the line the usual framing gets wrong: grep is not the cost, reading its output is — so a cheap model compresses a result set, it never searches. Carries the two failure modes measured in practice (a cited file that was never in the input, and a missed full key on the line below a flagged partial one) and the rule that follows: delegate when a miss is cheap, never when a miss ends the task. |
| agent-context-economy | Make a vertical agent cheaper AND more accurate by treating its context as an L1/L2/L3 cache: cache the static tool-definition prefix (~45% end-to-end cost cut, lossless), compress large tool results at insertion, lint write outputs, right-size tool count — each shipped off-by-default and promoted only through a gated before/after A/B. |
| agent-guardrail-review | Review code that lets an AI agent act for a person. A checklist of the boundary bugs an independent review found in almost every one of 19 agent repos: approvals that do not bind the action that runs, data exfiltration after a private read, secret headers across redirects, container escapes, guards that fail open, and parsers that disagree. |
| design-context | Create or audit canonical .agents/brand.md and .agents/design.md files, plus verified /design.md and /brand routes for deployed products. |
| claude-code-mods | Build, test and publish a Claude Code mod: a plugin whose JavaScript or TypeScript hooks module runs inside Claude Code to draw panes, restyle the spinner, guard tool calls and add /commands with no model turn. Covers mod vs settings hook vs skill vs MCP, the static-analysis rules, claude plugin validate and claude plugin test, marketplace and directory publishing, and pitfalls reproduced on v2.1.300. Ships a tested sample mod. |
| claude-code-context-diet | Cut the hidden per-request bloat the Claude Code CLI adds to every call — tool definitions, skill catalog, feature clusters you pay for whether or not you use them. Measure with /context, then trim via settings.json: disable unused feature clusters, deny heavy tools by name, demote rarely-used skills to user-invocable-only. Reversible, measured before/after. Client-side hygiene, distinct from agent-context-economy. |
| canada-census | Complete the Government of Canada Census of Population online via agent-browser — asks you each question in chat, fills the StatCan form, stops for review before submit. Zero PII stored. |
| cloud-gpu-llm | Run local LLMs (llama.cpp, GGUF) on a rented spot GPU VM on Google Cloud with the gpu-vm script: IAP SSH, tunnel access, cost notes and the traps from a real run. |
| schengen-visa-application | Prep a short-stay Schengen visa from Canada — finds the destination country's actual handler (no single "EU visa company"; consulate vs VFS/BLS vs a representing state's centre), builds the doc set from your own local files, drafts the employer support-letter request, fills the EU form, stops before the in-person biometrics appointment. Zero PII stored. |
| bc-incorporation | Incorporate a B.C. for-profit limited company on bcregistry.gov.bc.ca via agent-browser — BCSC login (phone tap, no password), account creation, Name Request vs numbered fork, the full incorporation application, real fees and wait times, and the Vuetify gotchas. Zero PII stored; human approves every pay gate. |
| spec-issue | Turn a thin Linear issue into an implementation-ready spec — grounds every claim in real code, right-sizes detail, writes test cases. |
| backlog-triage | Act as PM for an open GitHub backlog: name the release blockers, give every issue one priority, fix its labels, and append a marker-bounded brief a cheap model can execute without asking (files and lines, ordered steps, decisions made, gotchas, research, skills and URLs, done means). Research fans out read-only; one calibration pass sets priorities across the whole backlog before anything is written. Catches stacked-PR merges that read as shipped but never reached the default branch. |
| deploy-app-self-host | Self-host a containerized app (Postgres + S3-compatible object store + Redis) with Docker Compose, and smoke-test it. |
| deploy-app-cloudflare | Deploy a containerized app to Cloudflare (Workers container + D1/R2/KV/Queues/Durable Objects) and smoke-test the live URL. |
| deploy-app-gcp | Deploy a containerized app to GCP (Cloud Run + Cloud SQL + Memorystore + GCS) with Terraform, verify, then tear down. |
| deploy-app-aws | Deploy a containerized app to AWS (ECS Fargate + RDS + ElastiCache + S3 + ALB) with Terraform, verify, then tear down. |
| deploy-app-azure | Deploy a containerized app to Azure (Container Apps + Postgres + Cache for Redis + Blob) with Bicep, verify, then tear down. |
| onboard-machine | Add a Windows/macOS/Linux/Android device to a personal tailnet and give it a role — controller, worker, or consumer — so it can host runners, hold checkouts, and serve dev servers the other machines can browse. The per-OS capability matrix (and why a phone is a consumer, never a worker), the ACL pattern that enforces "the controller drives the workers and nothing reaches back" in policy rather than by habit, and the five that cost real time: joining before renaming, node key expiry silently dropping a headless worker, an unscoped port-22 rule following a laptop onto hostile Wi-Fi, Windows MagicDNS failing in a way that reads as healthy, and a sleeping laptop taking a runner offline. Stops where self-hosted-runner-fleet begins. |
| release-notes | Draft user-facing release notes from a branch diff — filters to user-facing changes, writes in your product's voice. |
| pr-standards | The pull-request rule for a repo where agents write most of the PRs: one issue, one PR, one concern, under 500 lines, and proof of the work it did. The branch/title/body shapes a checker enforces, the proof-of-work table (before/after screenshots for anything visible, a command and its result for anything else), uploading media to GitHub user-attachments instead of committing it, the Proof: n/a escape hatch and why an agent cannot clear its own, VISION.md as the thing a scope review judges against, which enforcement layers actually gate on a private Free-plan repo, and the rollout command. |
| app-screenshots | Capture real web-app/extension UI headlessly and beautify it into store-ready framed screenshots + promo tiles — the mock-the-host-APIs capture recipe, the data:-URL compositor (why file:// breaks), exact Chrome/Apple/Play/AMO sizes, and AI hero art for marketing tiles only (never fake the product UI). |
| android-webview-kiosk | Build and operate a locked-down Android WebView kiosk on a dedicated touch panel — no Android Studio, no Play Store. The hot-update path that avoids APK reinstalls, the frozen device-owner keystore trap, the renderer bad-state that only a reboot clears, and wireless-debugging persistence. |
| browser-extension | Build a cross-browser (Firefox + Chrome) MV3 web extension and submit it per store — one-manifest-two-browsers layout, the CSP traps that break wasm/workers (+ the same-origin-worker fix), on-device AI (Firefox trial.ml / Chrome Prompt API), web-ext, and the full AMO (incl. mandatory 2FA) + Chrome Web Store flow. |
| bug-bash-setup | Plan a bug bash — balanced no-overlap test-area assignments + plan/findings-log doc, from a tester roster and time budget. |
| bug-bash-triage | Triage raw bug-bash findings — reconcile against the test suite, build a consolidated triage doc, then (after approval) create issues. |
| storybook-to-design-system | Turn co-located Storybook stories into a live in-app design-system gallery (you pick the route name) AND fan out parallel agents to reach ~100% coverage. Stories are the single source of truth; each renders in an isolated iframe so modals/loops/logs can't hijack the page. |
| high-fidelity-ui-image-gen | Render near-pixel-faithful UI mockups with an AI image model — the prompt recipe (~94-95/100 on isolated surfaces), grounding in real source, the multi-round eval loop, the honest fidelity ceiling, and when to screenshot real HTML instead. |
| saas-brand-system | Design a brand by fanning out many distinct, emotion-tagged directions in parallel — each a complete, 100%-tokenized, self-contained HTML design-system prototype under one shared contract — then review in-browser, pick one, and expand the winner into a full SaaS brand kit (logo suite, favicon/OG set, tokens, components, guidelines). Carries a 14-direction style catalog (palette/font/signature/emotion) and the gotchas (Artifact CSP blocks Google Fonts, file:// blocked → serve http, don't build depth before the pick). |
| verify-branding | Audit a web project for logo/brand-color consistency and fix the drift — one shared logo component used by BOTH header and footer, one accent hex shared by the in-app mark, favicon/icon.svg, apple-icon, OG image, and manifest, with no orphaned old colors after a rebrand. Catches the drift that hides in the asset files nobody re-opens (favicon/OG/apple-icon keep the old hex because a CSS-token rename never touches them). Pairs with saas-brand-system; fan out one PR per repo to standardize. |
| embed-snippet-generator | Build AND verify a third-party embed/snippet catalog for a website builder or CMS with a "custom code" field — the two embed surfaces (head vs sandboxed section) and their differing tag/char-limit rules, a drill-down generator UX, and the technique everyone skips: prove each snippet RENDERS by reproducing the host's real sandbox iframe headless. Includes the gotchas — placeholder-id artifacts vs real bugs, provider embed-format drift (re-check current docs), logos via build-time manifest not runtime onError guessing, protocol-relative // in a null-origin srcdoc, per-account host subdomains, and why a "verified" badge is an anti-pattern. |
| launch-video-generation | Plan and generate a short launch video — storyboard framework, wavespeed.ai API facts, the hard-won fix for scene transitions (image-to-video models anchor the scene to the input image, prompt only steers motion) and on-screen text/logos (composite real assets, don't generate them), and a $0-generation-spend path (HyperFrames) for whole-video native-app-mimicry concepts (a note, a chat thread, used as a self-aware ad). |
| launch-video-screenwriting | Write the script for a 20 to 30 second launch video — a beat sheet scaled to seconds, hook patterns, one value turn per shot, on-screen copy rules, and a call to action that reads as an afterthought. Ported from jtydhr88/screenwriting-skills; includes a worked 24 second npm-package screenplay. |
| claude-in-cloud-browser | Run browser jobs off the local machine: Claude on the Messages API drives a cloud browser (Ichabod: remote Firefox or Chromium), many sessions in parallel. Setup, the tool loop, the limits found in real runs (concurrency cap, bot walls, no localhost, no extension pages), and what not to use it for. |
| ci-browser-on-ichabod | Run a CI E2E job against a cloud browser (Ichabod: remote Firefox or Chromium) instead of a browser installed on the runner. The workflow YAML, secrets, the quick-tunnel pattern, installing an extension from base64, the moz-extension: page limit and its iframe workaround, the session cap and retries, and timings measured in real Actions runs. |
| ship-demo-video | Turn real footage of your own product into a 20 to 30 second social cut, repeatably: window-region capture from the test harness (privacy-safe crops, cut before the browser closes), a plain captioned cut, then a designed HyperFrames cut on a generated music bed with cuts on detected bars. Approval gates at storyboard, stills and render, plus the composition traps from a real run. |
| slides | Build a talk or pitch deck as one HTML page on a 1920×1080 stage: half the slides and half the text, huge type, a new layout on every slide, anatomy figures, verified quote cards, and designed light and dark themes. A pre-flight script renders every slide in both themes and checks words, font sizes, lay
hooks/register.js 43 lines1// Shared by every hook below. Resets to 0 on each hot reload.
2let calls = 0
3
4const FORCE_PUSH = /\bgit\s+push\b.*(--force\b|--force-with-lease\b|\s-f\b)/
5
6async function guard($, e, next) {
7 if (FORCE_PUSH.test(e.command)) {
8 return { deny: 'Force pushes are refused by tool-tally. Push to a new branch instead.' }
9 }
10 return next(e)
11}
12
13export function register(on) {
14 // One session.start hook per module: a second one without a matcher fails the load.
15 on('session.start', async ($, e, next) => {
16 await $.command.register({ name: 'tally', description: 'Show how many tool calls Claude made' })
17 return next(e)
18 })
19
20 // Count every tool call, then let it run.
21 on('tool.call', async ($, e, next) => {
22 calls += 1
23 $.ui.invalidate('ui.render')
24 return next(e)
25 })
26
27 // Guard Bash. The .catch makes the guard fail closed instead of open.
28 on('tool.call', { tool: 'Bash' }, guard).catch(async ($, e, next) => {
29 if (next.called) return next(e)
30 return { deny: 'The tool-tally guard failed, so this command did not run: ' + next.error.kind }
31 })
32
33 // Answer /tally with no Claude turn.
34 on('command.run', { command: 'tally' }, async () => {
35 return { text: 'Claude has made ' + calls + ' tool calls since this mod loaded' }
36 })
37
38 // Keep the spinner, add the count after its word.
39 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {
40 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })
41 })
42}
43