Home
About
Blog
Products
Forum
Support
Contact
Sunbelt Computer Software
PL/B Language Development and Support
Home
About
Blog
Products
Forum
Support
Contact
OpenTag/.env.example at main · CopilotKit/OpenTag · GitHub
Skip to content
Navigation Menu
Sign in
Appearance settings
Platform
AI CODE CREATION
GitHub Copilot
Write better code with AI
GitHub Copilot app
Direct agents from issue to merge
MCP Registry
Integrate external tools
DEVELOPER WORKFLOWS
Actions
Automate any workflow
Codespaces
Instant dev environments
Issues
Plan and track work
Code Review
Manage code changes
Code Quality
Enforce quality at merge
APPLICATION SECURITY
GitHub Advanced Security
Find and fix vulnerabilities
Code security
Secure your code as you build
Secret protection
Stop leaks before they start
EXPLORE
Why GitHub
Documentation
Blog
Changelog
Marketplace
View all features
Solutions
BY COMPANY SIZE
Enterprises
Small and medium teams
Startups
Nonprofits
BY USE CASE
App Modernization
DevSecOps
DevOps
CI/CD
View all use cases
BY INDUSTRY
Healthcare
Financial services
Manufacturing
Government
See all industries
View all solutions
Resources
EXPLORE BY TOPIC
AI
Software Development
DevOps
Security
View all topics
EXPLORE BY TYPE
Customer stories
Events & webinars
Ebooks & reports
Business insights
GitHub Skills
SUPPORT & SERVICES
Documentation
Customer support
Community forum
Trust center
Partners
View all resources
Open Source
COMMUNITY
GitHub Sponsors
Fund open source developers
PROGRAMS
Security Lab
Maintainer Community
GitHub Stars
Archive Program
REPOSITORIES
Topics
Trending
Collections
Enterprise
ENTERPRISE SOLUTIONS
Enterprise platform
AI-powered developer platform
AVAILABLE ADD-ONS
GitHub Advanced Security
Enterprise-grade security features
Copilot for Business
Enterprise-grade AI features
Premium Support
Enterprise-grade 24/7 support
Pricing
Search
/
Sign in
Sign up
Appearance settings
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
CopilotKit
OpenTag
Repository navigation
Code
Issues
7
(7)
Pull requests
16
(16)
Actions
Security and quality
Insights
More
items
Files
Expand file tree
main
Breadcrumbs
OpenTag
/
.env.example
Copy path
Blame
More file actions
Blame
More file actions
Latest commit
History
History
History
148 lines (134 loc) · 7.71 KB
main
Breadcrumbs
OpenTag
/
.env.example
Copy path
Top
File metadata and controls
Code
Blame
148 lines (134 loc) · 7.71 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#
-- 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 <toolkit>
#
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
#
-- Arcade (Optional; an alternative to Composio, never alongside it) --
#
Setting both ARCADE_API_KEY and COMPOSIO_API_KEY stops the agent at boot, on
#
purpose: switching providers strands every personal account connected to the
#
old one, so it is never done silently. See setup.md for the full setup.
#
ARCADE_API_KEY is the switch; without it nothing Arcade-shaped is constructed.
#
export ARCADE_API_KEY=arc_...
#
#
Toolkit names are Arcade's own and keep their case: `Github`, `GoogleCalendar`.
#
Prefer curated toolkits (`Github`) over generated wrappers (`GithubApi`): the
#
wrappers publish nothing about what their tools do, so every call to them —
#
reads included — waits for approval. Startup says so when that happens.
#
#
One shared identity everyone reaches, connected once by an operator.
#
export ARCADE_TOOLKITS=Github,Asana
#
#
Each person's own account, connected from a Slack thread. Needs three things
#
the shared list does not: ARCADE_IDENTITY_NAMESPACE below, a non-empty
#
AGENT_AUTH_HEADER on both services, and a public address for the runtime
#
(PUBLIC_URL below) — Arcade sends the browser back there to learn who it is.
#
export ARCADE_USER_TOOLKITS=Gmail,GoogleCalendar
#
#
Required whenever ARCADE_USER_TOOLKITS is set. Arcade identities are global to
#
an Arcade project, so without a namespace two deployments sharing a project
#
would share each other's connected accounts. Must not contain "/". Changing it
#
later means everyone connects again.
#
export ARCADE_IDENTITY_NAMESPACE=acme-production
#
#
on (default) | off — whether a call that is not a read waits for a person.
#
export ARCADE_APPROVALS=on
#
#
The Arcade user_id shared toolkits act as. Defaults to INTELLIGENCE_CHANNEL_NAME,
#
then "open-tag". Never namespaced: it may already exist in your Arcade project.
#
export ARCADE_WORKSPACE_USER_ID=open-tag
#
-- Public address (Optional; required for per-person Arcade only) --
#
Where a browser can reach the runtime. Read by the runtime, not the agent,
#
which keeps no public entry point of its own. On Railway, generating a domain
#
for the runtime service is enough: RAILWAY_PUBLIC_DOMAIN is read when this is
#
unset. Composio deployments, and Arcade with shared toolkits only, need none.
#
export PUBLIC_URL=https://opentag.example.com
#
-- 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"
You can’t perform that action at this time.