Overview
The crewship.toml file configures how your crew is built and deployed. Place it in your project root.
Minimal Example
name = "my-crew"
framework = "crewai"
[build]
entrypoint = "src.my_crew.main:kickoff"
Full Example
name = "research-crew"
framework = "crewai"
[build]
entrypoint = "src.research_crew.main:kickoff"
python = "3.11"
profile = "slim"
[build.install]
# Additional system packages
packages = ["ffmpeg", "imagemagick"]
[runtime]
timeout = 600
memory = 512
[metadata]
description = "A crew that researches topics and writes reports"
tags = ["research", "writing"]
Configuration Reference
Top-level
| Field | Type | Required | Description |
|---|
name | string | ✅ | Project name (lowercase, hyphens allowed) |
framework | string | ✅ | Framework to use (crewai) |
[build]
Build configuration options.
| Field | Type | Default | Description |
|---|
entrypoint | string | required | Module path to kickoff function |
python | string | "3.11" | Python version (3.10, 3.11, 3.12) |
profile | string | "slim" | Base image profile |
dockerfile | string | — | Custom Dockerfile path |
Entrypoint Format
The entrypoint follows Python’s module path format:
module.path:function_name
Examples:
# Function in src/my_crew/main.py
entrypoint = "src.my_crew.main:kickoff"
# Function in crew.py at root
entrypoint = "crew:run"
# Nested module
entrypoint = "src.crews.research.main:kickoff"
Profile Options
| Profile | Description | Use case |
|---|
slim | Minimal Python environment | Most crews |
browser | Includes Playwright + Chromium | Web scraping, screenshots |
[build.install]
Additional system packages to install.
[build.install]
packages = ["ffmpeg", "poppler-utils", "tesseract-ocr"]
Only packages available in the base image’s package manager (apt) are supported.
[runtime]
Runtime configuration.
| Field | Type | Default | Description |
|---|
timeout | integer | 300 | Max execution time in seconds |
memory | integer | 256 | Memory limit in MB |
[runtime]
timeout = 900 # 15 minutes
memory = 1024 # 1 GB
Optional metadata for organization.
| Field | Type | Description |
|---|
description | string | Human-readable description |
tags | array | Tags for filtering in Console |
[metadata]
description = "Researches topics and generates blog posts"
tags = ["content", "blog", "research"]
Validation
The CLI validates your crewship.toml on deploy:
Common validation errors:
❌ Error: Invalid crewship.toml
- name: must be lowercase with hyphens only
- build.entrypoint: required field missing
Environment-specific Config
For different environments, use separate projects:
# Production
crewship deploy --project my-crew
# Staging
crewship deploy --project my-crew-staging
Set different environment variables per project:
crewship env set OPENAI_API_KEY=sk-prod-... --project my-crew
crewship env set OPENAI_API_KEY=sk-test-... --project my-crew-staging
Example Configurations
Basic CrewAI
name = "simple-crew"
framework = "crewai"
[build]
entrypoint = "src.simple_crew.main:kickoff"
Web Scraping Crew
name = "scraper-crew"
framework = "crewai"
[build]
entrypoint = "src.scraper.main:kickoff"
profile = "browser"
python = "3.11"
[runtime]
timeout = 600
memory = 1024
Document Processing
name = "doc-processor"
framework = "crewai"
[build]
entrypoint = "src.processor.main:kickoff"
python = "3.11"
[build.install]
packages = ["poppler-utils", "tesseract-ocr"]
[runtime]
timeout = 900
memory = 2048