Skills
Extend Foxl with installable skill packages for productivity, communication, media, and dev tooling
Skills are installable capability packages that extend what Foxl can do. Each skill is a SKILL.md file containing instructions, tool requirements, and domain expertise that the agent loads on demand.
How Skills Work
Skills use a lazy-loading pattern for efficiency:
- Only skill names and short descriptions are included in the system prompt
- When the agent decides a skill is relevant, it reads the full
SKILL.mdfile - The skill's instructions guide the agent through the task
This keeps the agent fast while providing deep expertise when needed.
The skill library is versioned in the foxl-ai/skills repo. A fresh install is seeded into ~/.foxl/skills/ from the copy bundled with the app; after that, launching Foxl only adds skills you do not have yet and never rewrites one you already have. Updates come from the Sync button on the Skills tab (below), which shows you the diff first. You can enable, disable, or customize any skill from that tab, and add your own local skills by dropping a SKILL.md file in the skills directory.
Skill Categories
Document processors, communication skills, and coding helpers all live in one flat directory. The groupings below describe intent, not filesystem layout.
Productivity and documents
| Skill | Default | Description |
|---|---|---|
| github | on | Interact with GitHub using the gh CLI for issues, PRs, and CI runs |
| notion | on | Create and manage Notion pages, databases, and blocks via API |
| obsidian | on | Work with Obsidian vaults and notes using obsidian-cli |
| gws | on | Google Workspace CLI - Gmail, Calendar, Drive, Sheets, Docs, Chat, Tasks, Meet |
| outlook | on | Outlook email, calendar, and Microsoft To-Do via Microsoft Graph API |
| outlook-web | on | Legacy browser-extension Outlook skill (fallback when Graph is unavailable) |
| quip | on | Manage Amazon Quip documents via REST API |
| himalaya | off | CLI email client via IMAP/SMTP - list, read, write, reply, search |
| docx | on | Create, read, edit, or manipulate Word (.docx) documents |
| xlsx | on | Read, edit, or produce spreadsheets (.xlsx, .xlsm, .csv, .tsv) |
| pptx | on | Create or edit PowerPoint (.pptx) presentations |
| on | Read, extract, merge, split, watermark, fill, or OCR PDF files |
Media and audio
| Skill | Default | Description |
|---|---|---|
| spotify | off | Control Spotify playback and search via terminal |
| spotify-player | off | Terminal Spotify playback via spogo or spotify_player |
| sonos | off | Control Sonos speakers - discover, play, volume, group |
| voice-call | off | Start voice calls via Twilio, Telnyx, or Plivo |
| sherpa-onnx-tts | off | Local text-to-speech via sherpa-onnx (offline, no cloud) |
| video-frames | off | Extract frames or clips from videos using ffmpeg |
Agent tooling (built-ins as skills)
These ship as skills so you can toggle them off to reclaim system-prompt tokens on simpler conversations.
| Skill | Default | Description |
|---|---|---|
| browser-tool | on | Browser automation - provides both the browser (agent-browser) and browser_extension tools, see Browser Automation |
| code-search-tool | on | Search code with grep / ripgrep for patterns, symbols, and functions |
| exec-tool | on | Execute shell commands and manage background processes |
| git-tool | on | Git subcommand shortcuts - status, diff, log, branch, checkout, commit, push, pull |
| web-fetch-tool | on | Fetch content from URLs - web pages, APIs, online resources |
Coding assistants
| Skill | Default | Description |
|---|---|---|
| claude-code | off | Use the Claude Code CLI with your Claude Pro/Max subscription |
| codex-cli | off | Use the OpenAI Codex CLI with your ChatGPT subscription |
| gemini-cli | off | Use the Gemini CLI with your Google AI subscription or API key |
| gemini | off | Gemini CLI for one-shot Q&A and generation |
| coding-agent | off | Run Codex CLI, Claude Code, or other coding agents as a background process |
| electron | off | Automate Electron desktop apps (VS Code, Slack, Discord, Figma, etc.) via CDP |
| skill-creator | on | Create, edit, optimize, or benchmark skills with eval runs and variance analysis |
Research and automation
| Skill | Default | Description |
|---|---|---|
| research-assistant | on | Help with research tasks and information gathering |
| autoresearch | off | Autonomous ML research loop that edits train.py, runs experiments, keeps improvements |
| tmux | off | Remote-control tmux sessions for interactive CLIs |
Utility
| Skill | Default | Description |
|---|---|---|
| weather | on | Get current weather and forecasts (no API key required) |
| healthcheck | off | Host security hardening and risk-tolerance configuration |
Browsing and Installing Skills
Skills live under Settings > Connect > Integrations, on the Skills tab. That page has four tabs and they answer different questions:
| Tab | What is on it |
|---|---|
| Integrations | The third-party services worth connecting first, as cards - the two sign-in integrations (Microsoft 365, Slack) and the SaaS-shaped skills (github, notion, obsidian, gws, weather, outlook, outlook-web, quip, himalaya, spotify, spotify-player, sonos, voice-call) |
| Skills | The full catalog - every skill shipped with Foxl plus anything you added locally |
| Shared | Skills a workspace you belong to publishes |
| Channels | The inbound bots (Telegram, Slack, Signal) - see Channels |
Each skill row on the Skills tab shows:
- Name and description
- Enable / disable toggle (flips the default above). Your choice is kept in
~/.foxl/data/skills-settings.json, not written into the skill file, so syncing a newer version of the skill never undoes it - Required tools, binaries, or credentials
- Stored environment variables (API keys), editable in place
/skills, /shared and /channels remain real URLs, so an existing link or bookmark still opens the right tab.
Some skills require external tools. For example, spotify-player needs the spogo or spotify_player binary on PATH, and sherpa-onnx-tts needs the sherpa-onnx runtime. The Skills tab shows compatibility status per skill and flags missing dependencies inline.
A missing binary or API key does not hide the skill - it is still offered to the agent, with the install step in its own body. So a skill can be available and not yet runnable, which is why the requirement is shown on the row.
Updating skills is a two-step, reversible operation. Syncing from foxl-ai/skills shows you a per-file diff first and writes nothing until you confirm; applying it snapshots every affected skill first, so it can be reverted. Skills you wrote yourself are never touched - sync only considers skills that exist in the repo.
Creating Custom Skills
Create your own skill by adding a SKILL.md file:
~/.foxl/skills/my-skill/SKILL.mdThe file uses YAML frontmatter for metadata and markdown for instructions:
---
name: my-skill
description: Short description of what this skill does
enabled: true
requires:
env: [MY_SERVICE_API_KEY]
bins: [my-cli]
---
## Instructions
Tell the agent how to use this skill...requires.env entries become editable in the UI, so API keys are managed there rather than in shell profiles - and a value you store that way satisfies the requirement even if the variable is not in your shell. requires.bins get a PATH check at load time, with inline setup hints when a binary is missing. The agent will discover your skill automatically on next conversation.
The enabled line is only the starting value - switching the skill on or off in the app is recorded in skills-settings.json and outranks it.