| title | Init Command |
|---|---|
| description | Create skill-project.toml for skill authors and project configuration. |
fastskill project init creates a single file: skill-project.toml in the current directory. If a SKILL.md is present, it extracts metadata (version, description, author) from its frontmatter; anything missing is either taken from CLI flags or prompted for interactively.
- Checks for an existing file: refuses to overwrite
skill-project.tomlunless--forceis given. - Reads
SKILL.md(if present): pullsversion,description, andauthorfrom the frontmatter. - Resolves missing fields: from CLI flags, or by prompting (unless
--yes). - Writes
skill-project.toml: with[metadata],[dependencies], and — when a skills directory is set —[tool.fastskill]. - Validates: the skill ID (derived from the directory name) and the version (must be valid semver).
fastskill project initPrompts for each missing field. For example, at a project root:
FastSkill Skill Initialization
Description (optional, press Enter to skip): My project skills
Author (optional, press Enter to skip): Jane Doe
Download URL (optional, press Enter to skip):
Skills directory (default: .claude/skills): .claude/skills
Created skill-project.toml with version: 1.0.0
Skills directory: .claude/skills
# Skill-level: skip all prompts, take metadata from SKILL.md
fastskill project init --yes
# Project-level with --yes: a skills directory is required
fastskill project init --yes --skills-dir .claude/skills
# Provide metadata directly
fastskill project init --yes --set-version 1.2.0 --description "Team skills" --author "Jane Doe"| Option | Description | Default |
|---|---|---|
--yes |
Skip interactive prompts and use defaults | false |
--force |
Overwrite an existing skill-project.toml |
false |
--set-version <VER> |
Set the skill version (validated as semver) | from SKILL.md, else 1.0.0 |
--description <TEXT> |
Set the description | from SKILL.md, else empty |
--author <NAME> |
Set the author | from SKILL.md, else empty |
--download-url <URL> |
Set the download URL | empty |
--skills-dir <DIR> |
Skills directory (global flag) | .claude/skills |
At a project root, project init produces a skill-project.toml like:
[metadata]
id = "my-project"
version = "1.0.0"
description = "Team skills"
author = "Jane Doe"
[dependencies]
[tool.fastskill]
skills_directory = ".claude/skills"
# Additional configuration options for [tool.fastskill]:
#
# [tool.fastskill.embedding]
# openai_base_url = "https://api.openai.com/v1"
# embedding_model = "text-embedding-3-small"
#
# [tool.fastskill.manifests]
# platform = "../platform-team/skill-project.toml"
#
# [[tool.fastskill.repositories]]
# name = "default"
# type = "http-registry"
# index_url = "https://registry.fastskill.dev"
# priority = 0The commented block is written verbatim so you can uncomment and fill in embedding settings or repositories later.
- Default:
.claude/skills - Custom: any path you pass via
--skills-diror the prompt - Resolution at runtime:
--skills-dirflag >--global(~/.config/fastskill/skills) >skills_directoryunder[tool.fastskill]> walk up to an existing.claude/skills/> default.claude/skills/
project init writes the current manifest schema. Use the generated file as the
starting point and keep project configuration in version control.
Semantic search uses OpenAI-compatible embeddings, configured under [tool.fastskill.embedding] in skill-project.toml (not created by project init — add it when you need it):
[tool.fastskill.embedding]
openai_base_url = "https://api.openai.com/v1"
embedding_model = "text-embedding-3-small"
# index_path = ".fastskill/index"Set the API key via the environment; if it is unset, semantic search is silently skipped:
export OPENAI_API_KEY="your-key-here"skill-project.toml is committed and shared by everyone on the project, so it is
the wrong place to record that your machine — or one CI job — talks to a
different embedding endpoint. Both non-secret fields can be overridden from the
environment, and the environment wins:
| Variable | Overrides | Example |
|---|---|---|
OPENAI_BASE_URL |
openai_base_url |
https://gateway.internal/v1 |
FASTSKILL_EMBEDDING_MODEL |
embedding_model |
my-embed-model |
export OPENAI_BASE_URL="https://gateway.internal/v1"
export FASTSKILL_EMBEDDING_MODEL="my-embed-model"
export OPENAI_API_KEY="your-gateway-key"An empty or whitespace-only value counts as unset, so a blank variable in a shell profile or CI matrix will not silently blank out a working manifest setting.
Run fastskill cli doctor to see which endpoint and model are actually in effect:
[PASS] embedding_config: Embedding configuration found
(endpoint: https://gateway.internal/v1, model: my-embed-model).
The API key stays environment-only on purpose: a committed manifest is the wrong home for a secret.
Cause: a skill-project.toml is already present.
Solution: pass --force to overwrite it, or remove the file first.
Cause: --yes was used at a project root without a skills directory.
Solution: add --skills-dir <path>, or drop --yes to be prompted.
Cause: the version (from --set-version or SKILL.md) is not valid semver.
Solution: use a semver string such as 1.0.0.
Cause: the current directory is not writable. Solution: fix permissions or run in a directory where you have write access.
# .github/workflows/setup-fastskill.yml
name: Setup FastSkill
on: [push]
jobs:
setup:
runs-on: ubuntu-latest
steps:
- name: Install FastSkill
run: |
curl -fsSL https://github.com/gofastskill/fastskill/releases/latest/download/install.sh | FASTSKILL_UNMANAGED=1 sh
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Initialize FastSkill
run: fastskill project init --yes --skills-dir .claude/skills
- name: Install skills from the manifest
run: fastskill project install
- name: Index skills (needs OPENAI_API_KEY for semantic search)
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: fastskill index rebuild- Add skills:
fastskill skill add <skill-id>(registry, Git, or local path). - Install from the manifest:
fastskill project install. - Index for search:
fastskill index rebuild(requiresOPENAI_API_KEY). - Search:
fastskill skill search "your query".