# -- Shared Identity -- export AGENT_DISPLAY_NAME=OpenTag # User-facing name in the agent persona and capability UI. # -- Runtime Variables -- export INTELLIGENCE_API_KEY=cpk-... # Runtime key from `copilotkit project select`, or https://intelligence.copilotkit.ai. export INTELLIGENCE_CHANNEL_NAME=open-tag # Must match .copilotkit/channels.json exactly. Forks: use your own name. export AGENT_URL=http://localhost:8123/ # AG-UI endpoint the runtime calls; the bundled Python agent serves this locally. # Slack and Teams credentials are NOT set here. Intelligence owns the adapters; # `copilotkit channels add` tells you where its credentials go. # -- Agent Variables -- export OPENAI_API_KEY=sk-... # Create a key at https://platform.openai.com/api-keys. # -- Runtime Overrides (Optional) -- # export LOG_LEVEL=debug # Defaults to "error"; Channel lifecycle breadcrumbs log at "warn". # export INTELLIGENCE_API_URL=https://api.intelligence.copilotkit.ai # export INTELLIGENCE_GATEWAY_WS_URL=wss://realtime.intelligence.copilotkit.ai # export INTELLIGENCE_LEARNING_CONTAINER_ID=support-quality # Existing container in the API key's project. # export MERMAID_URL=https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js # -- Agent Overrides (Optional) -- # Parallel is enabled by default (keyless free tier). # Tool objectives, queries and requested URLs are sent to Parallel. # export WEB_SEARCH_PROVIDER=parallel # parallel | tavily | none # export PARALLEL_API_KEY=... # Optional authenticated usage. # export TAVILY_API_KEY=tvly-... # Only used with WEB_SEARCH_PROVIDER=tavily. # export OPENAI_MODEL=gpt-5.5 # export OPENAI_REASONING_EFFORT=low # export OPENAI_VERBOSITY=low # export CORS_ALLOW_ORIGINS=* # export SERVER_HOST=0.0.0.0 # export SERVER_PORT=8123 # -- GitHub Search (Optional) -- # A fine-grained PAT with read access enables GitHub repo, code, PR, and CI search. # If coding reuses this token, it also needs permission to push branches and open PRs. # export GITHUB_PERSONAL_ACCESS_TOKEN=github_pat_... # export GITHUB_MCP_URL=https://api.githubcopilot.com/mcp/readonly # -- Coding Agent (Optional) -- # Requires Daytona and a GitHub credential: reuse the search PAT above, set a # dedicated coder PAT, or configure one GitHub App installation. # export DAYTONA_API_KEY=dtn_... # export DAYTONA_SNAPSHOT= # export DAYTONA_TTL_MINUTES=60 # Dedicated fine-grained PAT (preferred; classic PATs remain supported): # export GITHUB_CODER_TOKEN=github_pat_... # GitHub App (instead of GITHUB_CODER_TOKEN): # export GITHUB_APP_ID=12345 # export GITHUB_APP_INSTALLATION_ID=67890 # export GITHUB_APP_PRIVATE_KEY_BASE64=base64-encoded-pem # -- PostHog (Optional) -- # Create a personal API key with PostHog's "MCP Server" preset. # The bundled connection uses CLI mode and is read-only. # export POSTHOG_PERSONAL_API_KEY=phx_... # export POSTHOG_MCP_URL=https://mcp.posthog.com/mcp?mode=cli&readonly=true # -- Linear (Optional) -- # export LINEAR_API_KEY=lin_api_... # export LINEAR_MCP_URL=https://mcp.linear.app/mcp # -- Notion (Optional) -- # export NOTION_MCP_URL=https://your-notion-mcp.example.com/mcp # export NOTION_MCP_AUTH_TOKEN=your-remote-mcp-bearer-token # -- Composio (Optional) -- # Connect any Composio toolkit without writing an MCP block. Three steps per # app: add the toolkit at https://app.composio.dev, name its slug below, and # restart the agent. A shared toolkit is also connected once, see setup.md. # Slugs are Composio's own — lowercase, unspaced: `googlecalendar`, not `gcal`. # COMPOSIO_API_KEY is the master switch; without it nothing is constructed. # export COMPOSIO_API_KEY=ak_... # # One shared identity everyone in Slack reaches. Connect each of these once with # cd agent && uv run python -m composio_tools.connect_cli # Do not also configure the same app over MCP: `linear` here plus LINEAR_API_KEY # above gives the agent two sets of Linear tools and startup says so. # export COMPOSIO_TOOLKITS=jira,salesforce # # Each person's own account. They connect it themselves from a Slack thread: # the agent posts a Connect card, and whoever clicks gets their own private link. # Two requirements: a Slack-backed Channel (Teams has no private message, so the # link cannot be delivered there) and a non-empty AGENT_AUTH_HEADER below on both # services — empty reads as unconfigured and every mint is refused. # export COMPOSIO_USER_TOOLKITS=gmail,googlecalendar # # on (default) | off — whether a call that is not a read waits for a person. # `destructive` and `writes` are the old spellings; both still parse as `on`. # export COMPOSIO_APPROVALS=on # # The Composio user_id shared toolkits act as. Defaults to the agent's own # INTELLIGENCE_CHANNEL_NAME, and to "open-tag" when that is unset there. # export COMPOSIO_WORKSPACE_USER_ID=open-tag # # Pins which auth config a toolkit connects against when it has several. # Ids are case-sensitive. Unset, Composio picks one from the project. # export COMPOSIO_AUTH_CONFIGS=jira:ac_ExAmPle1 # -- Agent authentication (Optional; required to connect personal accounts) -- # One shared secret, the same non-empty value on both services: the runtime sends # it and the agent checks it. Unset or empty, the connect endpoint refuses to mint # a link, since that link is a bearer capability. Ordinary agent traffic is only # checked once this holds a value, so leaving it out changes nothing else. # Quote it — the value contains a space. # export AGENT_AUTH_HEADER="Bearer generate-a-long-random-string"