Skip to main content

What Ships by Default

These capabilities are included in the default workspace when Wolffish creates ~/.wolffish/workspace/ on first launch. Each lives in its own folder under brain/cerebellum/.
No artificial guardrails. Wolffish is built for smarter, more capable models. We’ve removed hard-coded timeouts, result caps, and arbitrary limits from all capability plugins. The LLM decides when to set a timeout and how many results to request. Commands run until they finish naturally. The only limits that remain are OOM-protection caps (100MB for documents, 500MB for audio, 100KB output buffer) — these protect memory, not restrict functionality.

Self-Management

Wolffish can read, manage, and write its own capabilities at runtime — no code change, no restart. This is the heart of what makes it extensible: a workflow you do often can become a permanent tool just by asking.

skills — Manage and author its own capabilities

Type: PluginTriggers: skill, skills, capability, create a skill, new skill, teach yourself, add a tool, list skills, disable skill, enable skill, delete skill, what can you do, extend yourselfLets Wolffish manage — and write — its own capabilities at runtime. It can list and search what it has, read a skill’s source to learn the pattern, toggle skills on and off (built-ins included, e.g. “turn off the browser”), delete ones you created, and author brand-new skills from a request like “do this every time.”Tools:
  • skill_list — List every skill: name, description, enabled/official status, tool count
  • skill_search — Search skills by keyword across name, description, triggers, and tool names
  • skill_read_source — Read a skill’s SKILL.md and plugin code before amending it or learning from it
  • skill_enable / skill_disable — Toggle any skill on or off (reversible; only the skills capability itself can’t be disabled)
  • skill_delete — Permanently remove a skill you created (official/built-in skills are protected)
  • skill_create — Author a new pure skill or plugin capability from scratch
  • skill_reload — Re-scan the workspace so changes take effect
Changes persist and take effect on the next turn. This is how Wolffish extends itself without a code change — see Self-Authoring Skills for the full create → test → edit loop and a complete copy-paste example.
Type: PluginTriggers: automation, automations, automate, schedule, scheduled, heartbeat, cron, recurring, every morning, every day, daily, weekly, remind me, run automatically, from now onLets Wolffish manage its own heartbeat — the jobs that run autonomously on a schedule. Ask for something recurring (“every morning…”) or one-time (“in 2 days remind me…”) and it writes, edits, or removes the job for you, applied live without a restart. It picks one-time vs recurring from how you phrase it; one-time jobs (In (15m) / Once (2026-...)) fire once and delete themselves.Tools:
  • automation_list — List every automation: schedule, plain-English timing, instruction, and whether it’s valid/running
  • automation_create — Create a job (recurring or one-time) from a schedule + instruction
  • automation_edit — Change a job’s schedule and/or instruction
  • automation_delete — Permanently remove a job (asks you to confirm)
  • automation_check — Runtime status: what’s running now and how recent runs went
  • automation_run — Run a job immediately, to test it
Heartbeat jobs run with tool calls auto-approved, so it confirms anything recurring or consequential with you before scheduling it. Memory compaction is configured separately in Settings, not here.

Asking Wolffish to build a skill for itself

You don’t write any code — you describe the ability in plain language and Wolffish authors the capability for you. The clearest requests signal a recurring need:
  • “From now on, whenever I send you a CSV, clean it up and reply with a summary table.”
  • “Make yourself a skill that posts a daily standup to our Slack channel.”
  • “You keep doing this resize-and-watermark dance by hand — turn it into a reusable tool.”
  • “Teach yourself to look up parcel tracking from a tracking number.”
When you ask, Wolffish:
  1. Picks the kind of skill — a pure skill (a written procedure it follows with tools it already has), a plugin skill (a real new tool backed by JavaScript), or a plugin with npm dependencies — choosing the smallest that does the job.
  2. Writes the files via skill_create — the SKILL.md (name, description, triggers) plus plugin/index.mjs and a package.json only when a real new tool is needed.
  3. Loads and tests it live, then it’s available from your next message — triggered automatically whenever your wording matches what the skill is for.
Be specific about the trigger (“whenever I…”, “every time a…”) and the outcome you want. Wolffish builds reusable skills, not one-offs — for a single task it just does the work directly instead of creating a skill. You can always say “list your skills” to see what it has, or “delete that skill” to remove one it made.

Core System

shell — Execute shell commands

Type: PluginTriggers: run, execute, command, terminal, shell, bash, npm, npx, git, pip, docker, curlWraps Node.js child_process to execute shell commands. The workhorse tool that many other capabilities depend on.Tools:
  • shell_exec — Run a command with optional cwd and timeout. Commands run until they exit naturally. Pass timeout only when you want fast failure (e.g. 5000ms for a quick which check). Omit for installs, builds, or anything with unpredictable duration.
Safety:
  • Block: mkfs, dd if= (disk-level destruction)
  • Destructive: rm -rf, sudo (requires approval)
  • Confirm: package installs, docker operations
Background mode (background: true) detaches the process and returns its PID immediately — use for dev servers, watchers, and long-running processes.
Type: PluginTriggers: file, read, write, edit, create, save, open, patch, modify, folder, directoryWraps Node.js fs for precise file operations without needing shell access.Tools:
  • file_read — Read file contents with optional line range (startLine/endLine)
  • file_write — Create or overwrite a file (supports append mode)
  • file_patch — Find and replace a literal string in a file (all occurrences)
Prefer these over shell_exec for file operations — they’re faster, safer, and produce cleaner audit trails.
Type: PluginTriggers: install, package, brew, winget, apt, dependencyDetects and uses the system package manager: Homebrew (macOS), winget (Windows), apt (Debian/Ubuntu), dnf (Fedora/RHEL). Installs run until completion — no timeout.Tools:
  • pkg_check — Check which package manager is available
  • pkg_install_manager — Install Homebrew on macOS if missing (no-op elsewhere)
  • pkg_install — Install a package with platform-specific name resolution
Other capabilities declare their system dependencies via the packages field in SKILL.md — the package-manager resolves the correct name per platform.
Type: PluginTriggers: node, npm, npx, nvm, javascript, js, typescript, tsChecks for Node.js installation and installs it via package-manager if missing. Install runs until complete.Tools:
  • node_check — Verify Node.js is installed and get version
  • node_install — Install Node.js via system package manager
Once installed, use shell_exec for node, npm, and npx commands.
Type: PluginTriggers: search, google, look up, find online, web, browse, latest, news, documentationProvides web search and page fetching for current information.Tools:
  • web_search — Search the web, returns titles, snippets, and URLs. Defaults to 5 results, no upper limit enforced.
  • web_fetch — Fetch full text content of a web page. No length floor — the LLM decides how much content to request.
Use web_search for discovery, then web_fetch to read specific results in detail. If a Brave API key is configured in Variables, the agent prefers the Brave search tool instead.
Type: PluginTriggers: browser, web, website, navigate, login, scrape, screenshot, form, click, automateLaunches a headless Chromium instance for interactive web tasks — filling forms, clicking buttons, navigating SPAs, and scraping JS-rendered content. Navigation uses Playwright’s default timeout unless you explicitly pass timeout_ms.Tools:
  • browser_launch — Start a browser session (headed/headless, viewport size, locale)
  • browser_navigate — Go to a URL
  • browser_click — Click an element by CSS selector
  • browser_type — Type text into an input
  • browser_screenshot — Capture the current page
  • browser_evaluate — Execute JavaScript in the page context
  • browser_close — End the session
Use web_fetch for static pages — only use the browser when you need interaction.

Documents & Media

Type: PluginTriggers: document, word, docx, report, letter, memo, template, convert documentRead, create, modify, and convert documents (docx, html, markdown, plain text).Tools:
  • document_read — Extract content as text, HTML, or markdown from any document
  • document_create — Create .docx with headings, paragraphs, tables, images, lists, headers/footers
  • document_modify — Edit existing documents
  • document_convert — Convert between formats
  • document_merge — Combine multiple documents
Type: PluginTriggers: pdf, merge pdf, split pdf, watermark, form fill, encrypt pdf, compress pdfFull PDF toolkit with RTL/Arabic support.Tools:
  • pdf_read — Extract text, metadata, and structure (with optional page range)
  • pdf_create — Create PDFs with headings, paragraphs, images, tables (supports RTL with custom fonts)
  • pdf_merge — Combine multiple PDFs
  • pdf_split — Extract page ranges into separate files
  • pdf_secure — Encrypt/decrypt with passwords
  • pdf_compress — Reduce file size
  • pdf_watermark — Add text watermarks
Type: PluginTriggers: spreadsheet, excel, xlsx, csv, tsv, table, data, formula, chartRead, create, modify, and analyze spreadsheet files.Tools:
  • spreadsheet_read — Read xlsx/csv/tsv with optional sheet selection and cell range
  • spreadsheet_create — Create new spreadsheets with multiple sheets, columns, rows, and styles
  • spreadsheet_modify — Edit existing files (add rows, update cells, add sheets)
  • spreadsheet_analyze — Compute statistics, summaries, and derived columns
Type: PluginTriggers: ffmpeg, video, audio, convert, transcode, compressWraps the FFmpeg CLI for multimedia processing. Runs until completion — no timeout, regardless of file size or encoding complexity.Tools:
  • ffmpeg_check — Verify ffmpeg is installed
  • ffmpeg_install — Install via package-manager
  • ffmpeg_run — Run any ffmpeg command (pass args after ffmpeg)
The capability auto-checks for ffmpeg and offers to install it if missing.

Voice

Type: PluginTriggers: transcribe, speech to text, stt, whisper, audio to text, dictationLocal speech-to-text using faster-whisper (CTranslate2 + PyAV) — far lighter than reference Whisper (no PyTorch, no external ffmpeg). Supports 99+ languages with automatic detection and runs entirely on your machine — no API keys, no cloud, fully offline after setup. Transcription runs until it finishes regardless of file size.Tools:
  • stt_transcribe — Transcribe an audio file at a given path
  • stt_transcribe_upload — Transcribe a file uploaded in the current conversation
  • stt_transcribe_voice_memo — Transcribe a voice memo generated by text-to-speech
  • stt_detect_language — Detect the spoken language without a full transcription
Models available: tiny, base (default), small, medium, large — larger is more accurate but slower. The engine installs into a managed Python runtime automatically on first use (or on demand from Settings → Speech-to-Text); the chosen model downloads once and caches.
Type: PluginTriggers: voice, speak, say, audio, read aloud, voice memo, ttsFully local neural text-to-speech using Kokoro — no cloud, no API keys, no Microsoft. Synthesis runs entirely on-device and produces an MP3. Generation runs until complete — no timeout.Tools:
  • voice_generate — Convert text to MP3 (returns file path)
  • voice_respond — Respond entirely as a voice memo (the audio IS the response)
  • voice_list — List all voice memo files in the workspace
English voices only — American (af_/am_, e.g. the default af_bella) and British (bf_/bm_). The voice and speech rate are chosen in Settings → Text-to-Speech and applied automatically; the model installs into a managed Python runtime on first use (or on demand from Settings, with a live progress bar and a real in-app preview).

Version Control & Code

Type: Pure Skill (no plugin)Triggers: git, commit, branch, merge, push, pull, PR, diff, stash, rebaseTeaches the LLM how to use shell_exec for Git with the user’s conventions. Instructions include:
  • Always run git status before making changes
  • Use Conventional Commits format: type(scope): subject
  • Show diffs and proposed commit messages before executing
  • Branch naming: feature/, fix/, chore/ prefixes with kebab-case
Since this is a pure skill, it has no plugin — it relies on the shell capability.
Type: PluginTriggers: github, pull request, PR, issue, repo, CI, actions, workflow, release, gistFull GitHub API access via Octokit. Requires a personal access token (Settings > GitHub).Tools: list repos, create/read/update issues, create/list/merge PRs, list branches, trigger workflows, create releases, manage gists, manage labels/milestones, review PRs, list notifications, star/fork repos, compare branches.Pagination: GitHub hard-caps per_page at 100. For larger result sets, page through with multiple calls.See GitHub Integration for full setup and usage.

External Services

Type: PluginTriggers: google, gmail, email, inbox, drive, calendar, events, contacts, tasks, sheetsGmail, Drive, Calendar, Contacts, Tasks, and Sheets via OAuth. Multi-account support. All API calls run until completion — no artificial timeouts.Tools: gmail search/read/send/reply/archive, drive list/upload/download, calendar events CRUD, contacts, tasks, sheets read/write.See Google Workspace Integration for full setup.
Type: PluginTriggers: notion, workspace, wiki, knowledge base, database, page, kanban, boardRead, create, and manage Notion content via the Notion API.Tools: search, read pages, read blocks, create pages, update pages, append blocks, create/query databases, add comments.See Notion Integration for full setup.
Type: PluginTriggers: cloudflare, tunnel, cloudflared, expose, public urlCreate quick Cloudflare Tunnels to expose local ports to the internet. Install runs until complete.Tools:
  • cloudflared_check — Check if cloudflared is installed
  • cloudflared_install — Install via package-manager
  • cloudflared_tunnel — Create a tunnel for a local port (returns public URL)
Always requires user confirmation before exposing a local service.

Desktop Automation

Type: PluginTriggers: screenshot, click, screen, desktop, mouse, keyboard, computer use, automate, UIDesktop automation for visual tasks — screenshots, mouse clicks, keyboard typing, scrolling.Tools:
  • computer_screenshot — Capture the full screen (or specific display)
  • computer_mouse_move — Move cursor to x,y coordinates
  • computer_mouse_click — Click at position (left/right/double)
  • computer_keyboard_type — Type text
  • computer_keyboard_press — Press key combinations
  • computer_scroll — Scroll at position
Must be enabled in Settings > Computer Use. The agent sees screenshots and can interact with any application on screen.

Interaction

Type: PluginTriggers: ask the user, ask me, which option, let me choose, give me options, clarify, confirm with me, multiple choice, quiz meLets Wolffish put a decision back to you with concrete choices instead of guessing. It pauses the turn, renders an interactive question card — the question, 2–5 numbered options each with a short description, and (unless disabled) a free-text box to type your own instructions — then resumes the moment you answer.Tools:
  • ask_user — Pose a multiple-choice question and wait for the answer. Returns the option you picked or the custom instructions you typed.
Works on every channel: the desktop UI shows the card; on Telegram and WhatsApp you reply with the option number (or your own text). If the run is stopped without an answer, Wolffish falls back to a sensible default instead of re-asking in a loop.

Fun

Type: PluginTriggers: meme, funny, gif, laugh, humor, joke, celebrate, lolCreate captioned memes from popular templates or search for reaction GIFs. No result caps — request as many GIFs as needed.Tools:
  • meme_generate — Create a meme from a template (drake, fry, buzz, distracted-boyfriend, this-is-fine, etc.)
  • meme_templates — List available templates
  • gif_search — Search for reaction GIFs
  • gif_trending — Get trending GIFs
  • add_to_chat — Insert the generated meme/GIF into the conversation
Uses memegen (zero-config) or imgflip (with credentials) as the backend.
Type: PluginTriggers: status, health, performance, how are you, what do you know, uptime, statsLets Wolffish answer questions about its own state by reading its workspace files.Tools:
  • wolffish_status — Uptime, active provider, loaded capabilities, channel connectivity, and system health
  • channel_status — Whether each messaging channel (Telegram, WhatsApp, in-app) is connected, and the exact steps to reconnect one that isn’t
  • wolffish_performance — Task success rates, most used tools, error rates
  • wolffish_memory — Recent conversation topics and knowledge areas
Read-only — never modifies the workspace. Ask “how are you doing?” for real data, not pleasantries. Wolffish checks channel_status before sending you an out-of-band message — Telegram and WhatsApp are connected channels reached through their own tools, never desktop apps to launch.

Task Execution (Motor Runtime)

The motor cortex executes all tool calls with these defaults:
  • Output buffer: 100KB per tool result — the LLM sees substantial output without truncation
  • Retries: Up to 10 attempts for retryable errors (network, timeout). Non-retryable errors (permission, validation, not-found) bail immediately. Backoff scales up to 60s between attempts.
  • No global timeout: Tools run until they complete or the user stops them

Customizing Capabilities

Built-in capabilities are managed and updated by Wolffish — don’t edit them directly, as your changes will be overwritten on the next update. Instead:
  • Disable a built-in capability from Settings if you don’t need it
  • Fork it — copy the folder to a new name, then edit the copy however you like
  • Create your own from scratch following the same structure
Changes to custom capabilities take effect on the next message — no restart needed.
Custom capabilities are not backed up automatically. If you delete a capability you created, it’s gone — Wolffish has no copy of it. Use git or keep a manual backup of your brain/cerebellum/ folder. Built-in capabilities are always restored automatically on launch.
Start by reading the SKILL.md of any built-in capability to understand the pattern. Then create your own following the same structure. See Creating Capabilities for a step-by-step guide.