Skills

Extend Foxl with installable skill packages, edit them in the app, or bring yours from Claude Code, Codex or Gemini CLI.

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:

  1. Only skill names and short descriptions are included in the system prompt
  2. When the agent decides a skill is relevant, it reads the full SKILL.md file
  3. 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

SkillDefaultDescription
githubonGitHub through the gh CLI: pull requests (view, diff, review, checks), issues, Actions runs and failed logs, releases, search
notiononSearch, read, create and update Notion pages and database rows through the Notion API
obsidianonFind, read, create and reorganize notes in a local Obsidian vault, on disk or with the official obsidian CLI
gwsonGoogle Workspace CLI - Gmail, Calendar, Drive, Sheets, Docs, Chat, Tasks, Meet
outlookonOutlook email, calendar, and Microsoft To-Do via Microsoft Graph API
outlook-webonRead Outlook mail and calendar in your own Chrome through the Foxl extension, when Microsoft 365 is not connected
quiponSearch, read, create and edit Quip documents and folders through the Quip Automation API. Not listed under Integrations
himalayaoffRead, search, send and file email over IMAP/SMTP with the himalaya v2 CLI, for an account not connected as Microsoft 365 or Google
docxonCreate, read, edit, or manipulate Word (.docx) documents
xlsxonRead, edit, or produce spreadsheets (.xlsx, .xlsm, .csv, .tsv)
pptxonCreate or edit PowerPoint (.pptx) presentations
pdfonRead, extract, merge, split, watermark, fill, or OCR PDF files

Media and audio

SkillDefaultDescription
spotifyoffControl Spotify with the spogo CLI (browser-cookie sign-in, no developer app): search, play, queue, devices, playlists
spotify-playeroffControl Spotify with the spotify_player CLI (official Spotify sign-in)
sonosoffControl Sonos speakers with sonoscli: rooms, playback, volume, grouping, favorites, queue
voice-calloffPlace a one-way phone call that speaks a message, through your Twilio account; asks before every call. For calls through your iPhone, see Phone calls
sherpa-onnx-ttsoffOffline text-to-speech with sherpa-onnx: text to a WAV file on this computer, no cloud
video-framesoffExtract frames, contact sheets or clips from a video with ffmpeg, then look at them

Agent tooling (built-ins as skills)

These ship as skills so you can toggle them off to reclaim system-prompt tokens on simpler conversations.

SkillDefaultDescription
browser-toolonHow to drive the browser tool (Foxl's own profile) and browser_extension (your Chrome, with your sign-ins), see Browser Automation
code-search-toolonSearch file contents with the code_search tool (ripgrep, or grep when rg is missing)
exec-toolonRun shell commands with exec and manage background jobs with process
git-toolonGit through the shell: status, diff, log, blame, branches, commits, stash, pull and push
web-fetch-toolonFetch a public URL with web_fetch (GET: HTML, text or JSON); the browser tool covers pages that need JavaScript

Coding assistants

SkillDefaultDescription
claude-codeoffHand coding tasks to Claude Code on this computer as background sessions, then ask how they are going, answer their questions or stop them, including from your phone
codex-clioffHand coding tasks to the Codex CLI on this computer as background runs, then follow up, check progress or stop them
gemini-clioffSet up and troubleshoot the Gemini CLI model provider (your own Gemini key or Google account)
geminioffAsk the Gemini CLI a one-shot question for a second opinion or a long-context read
coding-agentoffRun OpenCode, Pi or another terminal coding agent (Claude Code and Codex have their own skills)
electronoffAutomate an Electron app (Slack, VS Code, Discord, Figma and similar) through a DevTools port and the browser tool
skill-creatoronWrite a new Foxl skill or improve one: draft the SKILL.md, validate it, test it and tighten its description

Sync on the Skills tab brings an updated claude-code skill. A follow-up you send to a Claude Code session goes into that same session, even while it is busy, instead of stopping it and starting it again, and the same request is never sent twice. Before sending, the skill checks that your installed Claude Code can take the reply safely and refuses when it cannot. On Windows the skill does not send follow-ups: reply to a session from claude agents there.

Research and automation

SkillDefaultDescription
research-assistantonMulti-source research with cited findings: search, read primary sources, cross-check claims, write a sourced summary
autoresearchoffSet up and run karpathy/autoresearch, an agent loop that edits train.py, trains for 5 minutes and keeps what lowers val_bpb
tmuxoffDrive interactive programs in tmux sessions that outlive Foxl; the terminal tool covers everything else

Utility

SkillDefaultDescription
weatheronCurrent weather and forecasts from wttr.in and Open-Meteo, no API key
healthcheckoffRead-only security check of this computer (disk encryption, firewall, updates, remote access, open ports, backups), then a plan you approve step by step

Browsing and Installing Skills

Skills live under Settings > Tools > Skills. That row and its neighbours in Settings > Connect answer different questions:

WhereWhat is on it
Integrations rowThe third-party services worth connecting first, as cards - the sign-in integrations (Microsoft 365, Slack, and Gmail, which only sends) and the SaaS-shaped skills (github, notion, obsidian, gws, weather, outlook, outlook-web, himalaya, spotify, spotify-player, sonos, voice-call)
Skills rowThe full catalog - every skill shipped with Foxl plus anything you added locally
Messages rowThe inbound bots (Telegram, Slack, iMessage and the others) - see Messages

Settings > Tools > Skills: 19 of 35 enabled, a search field with All, Enabled and Disabled, Sync and New, and the Featured skills GitHub, Google Workspace, Notion, Obsidian and Weather.

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.

In a language other than English, a skill whose name says what it does (Browser, Voice Call, Weather, Email (IMAP/SMTP) and the like) is named in that language on Skills and Integrations, and so are the sample requests under Try in chat, which then sends the request in that language. Products keep their own names (GitHub, Spotify, Claude Code).

Some skills require external tools. For example, spotify-player needs the spotify_player binary on PATH, and sherpa-onnx-tts needs the sherpa-onnx-offline-tts program its setup step installs. 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 lists the skills that changed first, one row per skill with a checkbox, all ticked to start; tap a skill to see its files and their diff. Nothing is written until you confirm, and Update 3 of 5 (for example) updates only the ticked skills, so you can leave others for later. Applying snapshots each skill it updates first, so Undo reverts exactly those. Sync also says so when everything is already up to date. Skills you wrote yourself are never touched - sync only considers skills that exist in the repo.

A skill asks for its key in the chat

When a skill Foxl is using in a chat needs a key that is not set yet, Foxl shows the key card ((name) key) right in the chat, on your computer or your phone, instead of sending you to Integrations to paste it. The key is saved on your computer and given only to the commands Foxl runs in a chat that uses a skill needing it, and is hidden from what those commands print; Foxl's AI does not see what you type. A key you pasted on the Integrations page keeps working, and you can still change or clear it there.

Adding a skill: review it first

New on the Skills tab opens Review skill, where you see a skill before it is installed. Give it a Link or repository (a GitHub repository, folder or SKILL.md link, a skills.sh link, owner/repository, or a direct https link to a Markdown file), or use Paste or file to paste a SKILL.md or Open a SKILL.md file. When a repository holds several skills, you choose one.

The review shows the skill's instructions, its Declared requirements (programs, environment variables and integrations), its license and every included file, before Install. Reading a skill for review runs nothing from it: no installer, no script, no package, and only public https addresses are fetched. If a skill with the same name is already installed, choose Replace the existing skill (the review lists the files that replacing would remove) or Keep both under a new name. Cancelling leaves your skills as they were. A SKILL.md can be up to 256 KB, and a skill folder up to 8 MB with at most 100 files.

Making a skill from a chat

When a chat has worked out a workflow you will want again, ask Foxl to turn it into a skill ("make this a skill"). You can also point it at a SKILL.md or a skill's link. Foxl shows you the skill's full instructions and included files in the chat and saves it, with Undo on the card under its reply (a new skill is removed, a replaced one comes back). When its name already exists, it asks you to choose Replace or Keep both first. When the skill is enabled and its requirements are met, it appears in the same chat's / menu and can be used in new chats.

It is available in your own chats answered by your computer with a supported cloud model. With a Claude Pro/Max sign-in or the on-device model, use New on the Skills tab instead.

When Foxl saves a job as a skill

When a job took several steps - their order, where the numbers come from, the checks - and you will ask for it again, because you said so or it comes back every week, Foxl saves that method, done your way, as a skill on your computer, without asking. It does so even when the chat read a web page, a mail or a tool's output first, with two exceptions that keep text hidden in what Foxl read from leaving a standing instruction behind: a skill that names a web address, an email address or a phone number you did not write in the chat yourself waits for your tap on Apply under the reply, and in your own channel thread Foxl does not save it after such a read, it tells you what it would save. The reply ends with Saved as skill and the skill's name, with Undo:

  • Undo removes the skill at once. It is then listed under Recently deleted on the Skills page, and Redo on the same line, or Restore there, brings it back.
  • When a skill you already have covers the job, Foxl follows it, and when you correct it, Foxl updates that skill instead of saving a second one.
  • A job you say is a one-off is not saved. A preference or a fact you tell Foxl ("I'm vegetarian") is kept as a memory, not as a skill, and a fix to one answer ("it's Tuesday, not Monday") is not saved at all.
  • With Settings > Safety > Ask before Foxl changes its own instructions on, the skill waits for your tap on Apply under the reply instead.
  • The same correction is saved once. When a skill with that name already exists, the new one is saved beside it under a numbered name (Weekly report 2); nothing is replaced.
  • From your own Telegram, iMessage, Slack or Discord thread, the reply says it was saved in one line, and replying "undo" removes it.

Like any skill, it is a SKILL.md you can open, edit or delete on the Skills page, and new chats use it when the task comes up. It works in the same chats as making a skill from a chat, and not in a temporary chat, which keeps nothing.

Editing a skill in the app

Edit in a skill's details opens its SKILL.md in the same editor as Files, in the desktop app, and on app.foxl.ai or the phone app while they are connected to your desktop.

  • A line under the editor says whether the front matter is complete - the --- block at the top with a name: and a description: line - and Save stays off until it is.
  • A rename that would change the skill's id is refused, since its on/off setting and mentions use that id. Keep the name, or create a new skill with the content.
  • If SKILL.md changed on disk after you opened it, Save leaves the file as it is and says so; Save again replaces it with your version.
  • SKILL.md can be up to 256 KB.

Taking back an edit or a delete

Each time you save an edit to a skill, delete it, or choose Replace the existing skill for an import, Foxl first keeps what that change replaces, with the skill's on/off setting. History in a skill's details lists these versions, newest first, with when each was kept and its size, and Restore puts one back right away, on/off setting included:

  • An edit or a delete keeps the skill's SKILL.md, the only file it changes. Deleting a skill you did not import removes its SKILL.md and leaves its other files in its folder, so Restore puts the SKILL.md back beside them.
  • Deleting a skill you imported, or replacing a skill with an import, keeps its whole folder, and Restore brings that folder back as it was, other files included.

The version a Restore replaces is kept too, so you can take a Restore back the same way.

After Delete, the message that appears has Undo. Later, the skill is listed under Recently deleted at the end of the Skills page, where Restore brings it back.

Foxl keeps the newest 10 versions of each skill, and up to 64 MB of versions in all, removing the oldest first. They are stored on your computer in ~/.foxl/data/skill-versions/. On your phone and app.foxl.ai, History, Undo and Recently deleted appear once Foxl on your computer is up to date.

Bringing skills over from Claude Code, Codex or Gemini CLI

Settings > Advanced > Import and export brings your setup over from Claude Code, Codex or Gemini CLI on the same computer:

RowWhat it brings
Import from Claude CodeYour CLAUDE.md, your skills from ~/.claude/skills, your MCP servers from ~/.claude.json and your agents from ~/.claude/agents
Import from CodexYour AGENTS.md, MCP servers and agents from ~/.codex (its config.toml and agents folder), and your skills from ~/.agents/skills
Import from Gemini CLIYour GEMINI.md, your skills from ~/.gemini/skills, your MCP servers from ~/.gemini/settings.json and your agents from ~/.gemini/agents

Preview lists everything first, ticked, and marks what Foxl already has, which is left as it is, so nothing you have is replaced; untick anything you do not want. Instructions are added to the end of Foxl's AGENTS.md; Gemini CLI's GEMINI.md also holds what you asked Gemini CLI to remember, which comes along with it.

Each agent becomes one of Foxl's sub-agents, with its instructions, its model and the tools its file names, translated to Foxl's tools. A limit in the file stays a limit: an agent that may not write files, or may not use the shell, gets no tool that does. When Foxl already has a different agent of the same name, such as its own code-reviewer, yours comes along beside it as code-reviewer-claude-code (or -codex, -gemini). Anything that does not carry over, like a model Foxl does not offer, is named under the agent before you import it. First-run setup offers the same list, on a Bring your setup screen, when it finds a Claude Code, Codex or Gemini CLI setup with something Foxl does not have yet.

Creating Custom Skills

Create your own skill by adding a SKILL.md file:

~/.foxl/skills/my-skill/SKILL.md

The 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. When a variable's name says it is a key (it ends in _KEY, _TOKEN, _SECRET or _PASSWORD, for example), a chat that uses the skill asks for a missing one with the key card. 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.

On this page