Key Concepts
Fellow is built around a few foundational ideas that shape how it works and how you interact with it. Understanding these concepts will help you customize and extend it effectively.
Task-Driven Execution
Everything in Fellow starts with a task, defined in a YAML file. This task is not just a goal — it’s the seed for a chain of reasoning. For example:
task: |
Generate a README for this project
This task is injected into a system prompt, which guides the AI in choosing and executing appropriate actions step-by-step.
Reasoning Loop
Fellow follows a simple but powerful loop:
- Generate a message based on the task and current context
- Optionally call a function (e.g.
edit_file
,get_code
) - Execute function.
- Log results and feed them back into the loop
- Repeat until the AI outputs
END
or a step limit is reached
This enables autonomous workflows without needing to script each step.
Plugin System: Commands
Commands are Python functions that the AI can call. Examples include:
You can define your own custom commands or override existing ones. The AI sees these as callable tools and chooses when to use them.
Learn more in the documentation:
Custom Commands
Plugin System: Clients
Fellow is not tied to a single AI provider. It uses clients that wrap LLM APIs.
Built-in clients:
You can implement your own by creating a new client class. Learn more in the documentation: Custom Clients
Memory
Fellow can persist a log of thoughts and actions between runs. This log (typically stored in memory.json
) allows the assistant to remember what it did in earlier steps and avoid redundant actions.