This example uses examples/python/functions/crewai_job/function.py to package a CrewAI project, run crewai run as a finite job, and publish declared outputs.

Setup

python -m pip install "nullspace-sdk[cli]"
export NULLSPACE_API_KEY=ns_live_...
export NULLSPACE_API_URL=https://api.your-nullspace-domain
export OPENAI_API_KEY=sk-...
cd examples/python/functions/crewai_job

CLI

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
nullspace functions status crewai-report-job --run fnrun_123
Expected output includes output metadata for result.json and reports/report.md.

Function Definition

function.py
import nullspace

function = nullspace.Function(
    "crewai-report-job",
    mode="job",
    install="python -m pip install -e .",
    entrypoint="crewai run",
    env=nullspace.Env(required=["OPENAI_API_KEY"]),
    outputs=nullspace.Outputs(paths=["result.json", "reports"]),
)

Python

The companion run.py script uses the same function contract through the SDK:
from pathlib import Path

from nullspace import Function

project = Path(__file__).resolve().parent
function, version, manifest = Function.deploy(path=project)
call = function.spawn(
    input={"topic": "release risks"},
    envs={"OPENAI_API_KEY": "..."},
    retain_on_failure=True,
)
run = call.get(timeout=60)
outputs = call.outputs()
print(function.name, version.id, len(manifest.entries), len(outputs.outputs))
Run the complete script:
python run.py
Related: CrewAI and Functions.