# {{project_name}} — environment
LEAFMESH_LICENSE_KEY=
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
# n8n workflow in front of your PSA / HRIS (Kantata, Workday,
# SuccessFactors…) — serves forecast / utilisation / skills modes
PSA_WEBHOOK_URL=
PSA_WEBHOOK_TOKEN=
# n8n workflow in front of your PSA / BI weekly bench report
BENCH_REPORT_WEBHOOK_URL=
BENCH_REPORT_WEBHOOK_TOKEN=
PAGER_WEBHOOK=
# SLACK_BOT_TOKEN / SLACK_SIGNING_SECRET belong to a `channels: {slack: {...}}`
# block (ChannelConfig). This template has no channels block, so they are
# NOT auto-consumed by the escalation `channel` target below — that target
# only reads its own channel_id (SLACK_STAFFING_CHANNEL) + message_template.
# Add a channels block if you want the mesh to post to Slack as a bot.
SLACK_BOT_TOKEN=
SLACK_SIGNING_SECRET=
SLACK_STAFFING_CHANNEL=
# Local SQLite ledger that mints + stores the per-survey ESAT salt
# (consumed by agency/esat_survey_agent.py). Optional — defaults to
# ./logs/esat_anonymisation.db. The salt never enters mesh state.
ESAT_LEDGER_DB=
LEAFMESH_ENV_TOKEN=development
