Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.crewship.dev/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The crewship.toml file configures how your crew is built and deployed. Place it in your project root. Crewship supports two formats:
  • Single deployment — one [deployment] section (default, created by crewship init)
  • Multi-deployment — multiple [deployments.<name>] sections for monorepos with several agents
Run crewship init to auto-generate this file with detected settings from your project.

Single Deployment (default)

crewship.toml
[deployment]
framework = "crewai"
entrypoint = "src.my_crew.crew:MyCrew"
profile = "slim"
python = "3.11"

[build]
exclude = ["tests"]

Multi-Deployment

For monorepos with multiple agents sharing the same codebase, use named [deployments.<name>] sections:
crewship.toml
[build]
exclude = ["tests"]

[deployments.research-agent]
framework = "crewai"
entrypoint = "research_crew.crew:ResearchCrew"
profile = "slim"
python = "3.11"

[deployments.writer-agent]
framework = "crewai"
entrypoint = "writer_crew.crew:WriterCrew"
Each named deployment gets its own deployment on Crewship with the name as the project name (e.g. research-agent). [apis] and [chat] can be set at the top level as global defaults, and overridden per deployment:
crewship.toml
# Global defaults
[chat]
input_key = "query"

[deployments.support-agent]
framework = "crewai"
entrypoint = "support_crew.crew:SupportCrew"

[deployments.research-agent]
framework = "crewai"
entrypoint = "research_crew.crew:ResearchCrew"

# Override chat config for this deployment only
[deployments.research-agent.chat]
input_key = "topic"
[deployment] and [deployments.*] are mutually exclusive. Using both in the same file will produce an error.

Selecting a deployment

Use --name / -n on any command to target a specific deployment:
crewship deploy --name research-agent
crewship invoke --name writer-agent --input '{"topic": "AI"}'
crewship env set --name research-agent OPENAI_API_KEY=sk-...
If --name is omitted:
  • One named deployment — auto-selected
  • Multiple named deployments — interactive prompt (or error in CI)
  • Single [deployment] format — used directly (no --name needed)

Deployment IDs

After the first deploy, deployment_id is saved into each section automatically:
[deployments.research-agent]
framework = "crewai"
entrypoint = "research_crew.crew:ResearchCrew"
deployment_id = "dep_xxx1"   # auto-populated

[deployments.writer-agent]
framework = "crewai"
entrypoint = "writer_crew.crew:WriterCrew"
deployment_id = "dep_xxx2"   # auto-populated

Full Example

crewship.toml
[deployment]
framework = "crewai"
entrypoint = "src.research_crew.crew:ResearchCrew"
python = "3.11"
profile = "slim"

[build]
exclude = ["tests"]

[build.install]
packages = ["ffmpeg", "imagemagick"]

[apis]
enabled = ["thread", "run"]

[chat]
input_key = "topic"

[runtime]
timeout = 600
memory = 512

[metadata]
description = "A crew that researches topics and writes reports"
tags = ["research", "writing"]

Configuration Reference

[deployment] / [deployments.<name>]

FieldTypeRequiredDescription
frameworkstringFramework to use: crewai, langgraph, or langgraph-js
entrypointstringEntry point for your agent (format varies by framework)
pythonstring"3.11"Python version (3.10, 3.11, 3.12) — Python frameworks only
profilestring"slim"Base image profile
dockerfilestringCustom Dockerfile path
deployment_idstringAuto-populated after first deploy

Entrypoint Format

The entrypoint format depends on your framework: CrewAI and LangGraph (Python) — Python module path:
module.path:ClassName_or_variable
# CrewAI: points to a class decorated with @CrewBase
entrypoint = "src.my_crew.crew:MyCrew"

# LangGraph: points to a compiled graph variable
entrypoint = "src.my_agent.graph:graph"
LangGraph.js — file path relative to project root:
./path/to/file.ts:exportName
# LangGraph.js: points to an exported compiled graph
entrypoint = "./src/graph.ts:graph"
Run crewship init to auto-detect your framework and entrypoint. For LangGraph projects, place a langgraph.json in your project root to enable auto-detection.

Profile Options

ProfileDescriptionFrameworksUse case
slimMinimal base environmentAllMost agents
browserIncludes Playwright + Chromiumcrewai, langgraphWeb scraping, screenshots

[build]

Build configuration options.
FieldTypeDefaultDescription
excludearray of string[]Paths to exclude from build

[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.
FieldTypeDefaultDescription
timeoutinteger300Max execution time in seconds
memoryinteger256Memory limit in MB
[runtime]
timeout = 900    # 15 minutes
memory = 1024    # 1 GB

[apis]

Controls which APIs are enabled for the deployment. This affects both direct API access and which interaction modes are available in Slack.
FieldTypeDefaultDescription
enabledarray of stringWhich APIs to expose: "thread", "run"
When omitted (or null), all APIs are enabled by default.
[apis]
enabled = ["thread", "run"]   # Both APIs enabled (same as default)
[apis]
enabled = ["run"]   # Only stateless runs — no thread/conversation support
[apis]
enabled = ["thread"]   # Only threaded conversations — no standalone runs
In Slack, the enabled APIs determine which interaction modes work:
  • Thread API@mention conversations use threads for multi-turn context
  • Run API/crewship run slash commands use single stateless runs
  • If both are enabled, @mention defaults to thread mode
Not sure which to use? Read Runs vs Threads: When to Use Which.

[chat]

Configures how chat messages (from Slack or other integrations) map to your crew’s input and output.
FieldTypeDefaultDescription
input_keystring"input"The parameter name that receives the chat message
output_keystringField in the run output containing response messages
[chat]
input_key = "topic"
When a user sends a message in Slack (e.g. “Tell me about quantum computing”), it gets mapped to:
{ "topic": "Tell me about quantum computing" }
If output_key is set, the platform extracts that field from the run result to display as the response:
[chat]
input_key = "query"
output_key = "messages"
If your crew already accepts an input parameter, you can omit [chat] entirely — it defaults to input_key = "input".

[metadata]

Optional metadata for organization.
FieldTypeDescription
descriptionstringHuman-readable description
tagsarrayTags 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:
crewship deploy
Common validation errors:
❌ Error: Invalid crewship.toml
   - name: must be lowercase with hyphens only
   - deployment.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

[deployment]
framework = "crewai"
entrypoint = "src.simple_crew.crew:SimpleCrew"

Basic LangGraph

[deployment]
framework = "langgraph"
entrypoint = "src.my_agent.graph:graph"
python = "3.11"

Basic LangGraph.js

[deployment]
framework = "langgraph-js"
entrypoint = "./src/graph.ts:graph"

Web Scraping Crew

[deployment]
framework = "crewai"
entrypoint = "src.scraper.crew:ScraperCrew"
profile = "browser"
python = "3.11"

[runtime]
timeout = 600
memory = 1024

Document Processing

[deployment]
framework = "crewai"
entrypoint = "src.processor.crew:ProcessorCrew"
python = "3.11"

[build.install]
packages = ["poppler-utils", "tesseract-ocr"]

[runtime]
timeout = 900
memory = 2048

Slack Chatbot

[deployment]
framework = "crewai"
entrypoint = "src.support_bot.flows.chat_flow:ChatFlow"
python = "3.11"

[apis]
enabled = ["thread"]

[chat]
input_key = "query"
output_key = "messages"

Multi-Agent Monorepo (mixed frameworks)

[build]
exclude = ["tests", "notebooks"]

[deployments.research-agent]
framework = "crewai"
entrypoint = "agents.research.crew:ResearchCrew"
profile = "browser"
python = "3.11"

[deployments.writer-agent]
framework = "langgraph"
entrypoint = "agents.writer.graph:graph"
python = "3.11"

[deployments.frontend-agent]
framework = "langgraph-js"
entrypoint = "./agents/frontend/graph.ts:graph"
Deploy individual agents:
crewship deploy --name research-agent
crewship deploy --name writer-agent

Deploy

Deploy your configured crew

Slack Integration

Connect your crew to Slack

Environment Variables

Configure secrets

Threads

Multi-turn conversations