← source on GitHub ↗

Migrating from Claude Code, GitHub Copilot, or OpenAI Codex

Fa reads your existing agent configuration in place — nothing is copied, converted, or moved. If a project (or your home directory) already has skills, commands, agents, or instruction files from another tool, Fa picks them up at startup — discovery is on by default, no setup needed.

The access setting (opt-out)

Third-party directories contain instructions and scripts written for other tools, so while Fa reads them by default, you stay in control:

Fa's own roots (.fah/skills, .agents/skills, .fah/agents, .agents/agents) are always read — the setting only covers other tools' directories. On Android/iOS the third-party roots don't exist, so the setting surface is hidden there (discovery itself is unaffected).

What is picked up

ToolSkillsAgents / subagentsInstruction files
Claude Code.claude/skills/*/SKILL.md, ~/.claude/skills, .claude/commands/*.md.claude/agents/*.md, ~/.claude/agentsCLAUDE.md
GitHub Copilot.github/skills, ~/.copilot/skills.github/agents/*.agent.md.github/copilot-instructions.md, .github/instructions/*.instructions.md
OpenAI Codex.codex/skills, ~/.codex/skills.codex/agents, ~/.codex/agentsAGENTS.md (native to Fa)
Gemini CLI——GEMINI.md

Project roots win name clashes over user roots, first name wins; Fa's own roots take precedence over third-party ones. (Note: Claude Code itself prefers user-level over project-level on clashes — Fa keeps its project-first rule.)

Skills: using them

Supported frontmatter

name, description, when_to_use, argument-hint, arguments, disable-model-invocation, user-invocable, allowed-tools, disallowed-tools, model, effort, context: fork, agent, background, paths, shell, license, compatibility, metadata, applyTo (Copilot), excludeAgent (ignored). Unknown keys produce a discovery note, never a crash.

Invocation semantics

Agents (subagent types)

<name>.md (Claude/Codex layout) and <name>.agent.md (Copilot) files define agent types for the task tool: frontmatter name, description, tools (list or comma string; * = full surface, [] = none), readOnly, modelRole (or Claude's model when it names a Fa role). The body becomes the subagent's system prompt. /agents types lists them; discovered names like Reviewer override the matching built-in.

Copilot specifics: target: vscode profiles are skipped (VS Code-only), mcp-servers is reported as unsupported, argument-hint/handoffs are ignored (IDE-only).

Instruction files

CLAUDE.md, GEMINI.md, .github/copilot-instructions.md and .github/instructions/*.instructions.md merge into the system prompt along the existing AGENTS.md walk (working directory → git root, farthest-first, 32 KiB leaf-first budget). Copilot applyTo globs are not evaluated — scoped files are included with an <!-- applies to: … --> marker instead.

Optional: taking ownership

/skills import (or the Import row in the TUI /skills menu) copies discovered third-party skills into .fah/skills/<name>/SKILL.md (name clashes with existing own skills are skipped). Only the manifest file is copied — auxiliary skill files stay with the original directory. After import the skills no longer depend on the access setting.