Fellowship Fellowship Docs

Configuration

All configuration files, settings, and customization options.

Project Structure

Fellowship stores all configuration inside the .fellowship/ directory at your project root:

.fellowship/
  config.yaml          # Project settings, AI provider, review, hooks
  team.yaml            # Agent definitions (roles, skills, profiles)
  profiles/            # Agent profile files with coding guidelines
  skills/              # Project-level skill overrides (optional)
  architecture.md      # Project architecture reference
  learnings.md         # Raw lessons from each run
  learnings-distilled.md # Consolidated top learnings (max 30)
  gotchas.md           # Technical pitfalls and warnings
  fellowship.db        # SQLite database (runs, decisions, events)

config.yaml

The main configuration file. Generated by fellowship init or fellowship adopt.

.fellowship/config.yaml
name: my-api
created: '2026-03-11'

ai:
  provider: anthropic
  model: claude-sonnet-4-6
  envVar: ANTHROPIC_API_KEY

# Code review settings
review:
  enabled: true                    # Enable/disable Sentinel
  model: claude-haiku-4-5-20251001 # Cheaper model for reviews
  strictness: balanced             # strict | balanced | lenient
  maxCycles: 2                     # Max review-fix cycles

# Notifications & hooks
hooks:
  onComplete:
    -  sound: done 
    -  notify: desktop 
  onError:
    -  sound: error 
    -  notify: desktop 
  onReview:
    -  sound: review 
    -  notify: desktop 
  sounds: true
  desktop: true

# Documentation generation
scribe:
  enabled: false
  autoRun: false
  model: claude-haiku-4-5-20251001
  outputs: [changelog, readme]

# Learnings search
search:
  maxResults: 10
  minScore: 1.0
  autoIndex: true

# Security
security:
  sanitize: true
  strictMode: false
  logInjections: true

AI Settings

Key Description
ai.providerAI provider (anthropic or openai)
ai.modelModel to use for code generation
ai.envVarEnvironment variable name for the API key

Review Settings

Key Default Description
review.enabledtrueEnable/disable Sentinel AI review
review.modelclaude-haiku-4-5-20251001Model for reviews (use a cheaper model)
review.strictnessbalancedstrict, balanced, or lenient
review.maxCycles2Maximum review-fix cycles before accepting

Scribe Settings

Key Default Description
scribe.enabledfalseEnable documentation generation
scribe.autoRunfalseAuto-generate docs after each run
scribe.modelclaude-haiku-4-5-20251001Model for documentation generation
scribe.outputs[changelog, readme]Which documents to generate

Search Settings

Key Default Description
search.maxResults10Maximum number of search results
search.minScore1.0Minimum FTS5 relevance score
search.autoIndextrueAutomatically index new learnings

Security Settings

Key Default Description
security.sanitizetrueEnable prompt injection scanning
security.strictModefalseThrow error on injection detection
security.logInjectionstrueLog detected injection attempts

Hooks & Notifications

Configure notifications in the hooks: section of config.yaml.

.fellowship/config.yaml — hooks
hooks:
  onComplete:
    -  sound: done 
    -  notify: desktop 
    -  notify: telegram 
    - "echo '$FELLOWSHIP_TASK completed' >> ~/fellowship.log"
  onError:
    -  sound: error 
    -  notify: desktop 
  onReview:
    -  sound: review 
    -  notify: desktop 
  sounds: true
  desktop: true
  telegramBotToken: "..."   # or env FELLOWSHIP_TELEGRAM_BOT_TOKEN
  telegramChatId: "..."     # or env FELLOWSHIP_TELEGRAM_CHAT_ID

Hook Events

Event When it fires
onCompleteRun completed successfully
onErrorRun failed with an error
onReviewRun is ready for human review

Hook Actions

Each hook event accepts a list of actions. You can mix and match:

Action Syntax Description
Sound{ sound: done }Play a system sound (done, error, review)
Desktop{ notify: desktop }Native OS notification (zero config)
Telegram{ notify: telegram }Message to Telegram (requires bot token + chat ID)
Slack{ notify: slack }Message to Slack webhook (set FELLOWSHIP_SLACK_WEBHOOK env var)
Custom command"your shell command"Run any shell command with environment variables

Environment Variables in Custom Hooks

When using custom shell commands, these variables are available:

Variable Content Example
FELLOWSHIP_TASKTask descriptionadd user authentication
FELLOWSHIP_STATUSRun resultcompleted / failed / rejected
FELLOWSHIP_AGENTAgent nameforge
FELLOWSHIP_BRANCHBranch createdfeat/add-user-auth
FELLOWSHIP_DURATIONDuration in seconds180
FELLOWSHIP_TOKENSTokens consumed15420
FELLOWSHIP_COSTCost in USD0.04
FELLOWSHIP_PR_URLPull request URLhttps://github.com/.../pull/5

Custom hook examples

hooks:
  onComplete:
    # Log to a file
    - "echo '$FELLOWSHIP_TASK completed in $FELLOWSHIP_DURATION s' >> ~/fellowship.log"
    # Call a webhook
    - "curl -X POST https://your-api.com/webhook -d '...' "
    # Send a Discord notification
    - "curl -H 'Content-Type: application/json' -d '...' $DISCORD_WEBHOOK_URL"

Setting up Telegram notifications

Step-by-step guide to get Fellowship notifications in Telegram:

1. Create a bot

  • Open @BotFather in Telegram
  • Send /newbot
  • Choose a name (e.g. "Fellowship Notifications")
  • Choose a username (e.g. my_fellowship_bot)
  • BotFather will give you a token like 123456789:ABCdefGHIjklMNOpqrsTUVwxyz

2. Get your chat ID

  • Open @userinfobot in Telegram
  • Send /start — it will reply with your ID (a number like 1726726015)

3. Start your bot

  • Search for your bot in Telegram by its username
  • Press Start — this is required, otherwise the bot can't send you messages

4. Configure Fellowship

Add to your .fellowship/config.yaml:

hooks:
  telegramBotToken: "YOUR_BOT_TOKEN"
  telegramChatId: "YOUR_CHAT_ID"
  onComplete:
    -  notify: telegram 
  onError:
    -  notify: telegram 
  onReview:
    -  notify: telegram 

Or use environment variables instead:

export FELLOWSHIP_TELEGRAM_BOT_TOKEN="your-token"
export FELLOWSHIP_TELEGRAM_CHAT_ID="your-chat-id"

You'll now receive a Telegram message every time a run completes or fails, with the task name, agent, duration, and status.

team.yaml

Defines your agent team. Generated automatically during init or adopt, and extended with fellowship hire.

Each agent has:

  • Name — a human-friendly identifier
  • Role — what kind of tasks they handle
  • Profile — path to a profile file with coding guidelines, skills, and conventions
  • Icon — displayed in status and TUI
Sentinel is special: Every team includes Sentinel as the built-in reviewer. It has a specialized profile for code review and is used automatically for every run.

Skills

Skills are reusable instructions that can be referenced in agent profiles. Fellowship ships with built-in skills, and you can override them with project-level skills.

fellowship/skills/          ← Built-in (shipped with CLI)
  code-review.md            ← Sentinel's review guidelines

.fellowship/skills/         ← Project overrides (optional)
  code-review.md            ← Your custom review guidelines

Project skills override built-in skills with the same name. Profiles reference skills with {{skill:name}}.

Credentials

API keys are stored securely using your system’s credential store:

Platform Storage
macOSmacOS Keychain
Linuxlibsecret
WindowsWindows Credential Store

Use fellowship connect to configure your provider credentials.