Start here
Environments
Development, Staging and Production: separate agents, credentials, configuration and hubs.
Every project has three environments. They share the project's identity, commands and team, but nothing secret: each has its own agents, tokens, OAuth client, API keys, signing keys, event subscriptions and delivery endpoints.
| Environment | Typical use | Where its agents run |
|---|---|---|
| Development | Local work, breaking changes | Test hubs you manage (and your sandbox hub) |
| Staging | Pre-release checks with real-looking data | Test hubs you manage |
| Production | What your users install | Every hub that installed the project (App Market / install link) |
Development and Staging are off until you enable them in Environments. A hub runs exactly one environment of a project: installing Staging into a hub that already has Production is refused.
Test hubs
From Agents → Install in a test hub, put the Development or Staging agents into a hub where you have Manage Hub. Commands used there are answered by that environment's agent, never by Production. The quickest way to get one is a sandbox hub.
Configuration
Each environment stores plain key/value configuration (up to 50 entries, values up to 1000 characters) — feature switches, log levels, URLs. It is not for secrets. Agents read their own environment's values:
// Read the configuration of the agent's own environment (Environments → Configuration).const { data } = await fetch("https://api.voznest.com/api/v1/developer/agent/config", { headers: { Authorization: `Bot ${token}` } }).then((r) => r.json());// → { environment: "development", config: { LOG_LEVEL: "debug", FEATURE_X: "on" } }OAuth client ids
Production uses the project id as client_id; the others append the environment: <project id>.development, <project id>.staging. Redirect URLs, scopes and PKCE are configured per environment. Development additionally accepts http://localhost redirects.
API restrictions
Per environment you can restrict API keys to an IP allowlist (up to 20 entries), choose which OAuth scopes may be requested, and require PKCE.