CrewAI projects usually fit the Function job shape: run crewai run, produce artifacts, and exit. Use this path when a crew should execute as a repeatable product workflow with logs, outputs, status, and backing machine debugging.

Deploy As A Job

function.py
import nullspace

function = nullspace.Function(
    "crewai-report-job",
    mode="job",
    template="base",
    workdir="/workspace/project",
    install="python -m pip install -e .",
    entrypoint="crewai run",
    env=nullspace.Env(required=["OPENAI_API_KEY"]),
    outputs=nullspace.Outputs(paths=["result.json", "reports"]),
)
Then deploy and run the project:
nullspace functions deploy
nullspace functions run crewai-report-job \
  --input-json '{"topic":"release risks"}' \
  --env OPENAI_API_KEY="$OPENAI_API_KEY" \
  --json

nullspace functions logs crewai-report-job --run fnrun_123
nullspace functions outputs crewai-report-job --run fnrun_123
Use nullspace.Outputs for files or directories the job should publish, such as reports, task summaries, or structured JSON. Keep provider credentials in env vars, not in project files. See the CrewAI job example for a complete project.

State And Memory

CrewAI flow state and memory remain app-owned. Store state in your application database, a mounted Nullspace volume, or another durable store when it must survive one disposable job machine. Nullspace run IDs identify Function runs; they are not CrewAI flow or conversation IDs.