Skip to Content
CLI & ConfigConfiguration (glubean.yaml)

Configuration (glubean.yaml)

glubean.yaml at the project root is the canonical config. It declares suites (where runnable files live) and profiles (named run plans you select with --profile), plus shared defaults. glubean init scaffolds one. Load an alternate file with --config ./path/to/glubean.yaml.

Secrets (a cloud token, the project’s tokenEnv value) never live in glubean.yaml — they come from .env.secrets, environment variables, or glubean login. See Tokens.

A complete example

version: 1 # Applied to every profile unless the profile overrides them. defaults: envFile: .env redaction: replacementFormat: simple # simple | labeled | partial sensitiveKeys: [x-internal-token] customPatterns: - { name: stripe-key, regex: "sk_live_[a-zA-Z0-9]{24,}" } execution: concurrency: 4 timeoutMs: 30000 thresholds: http_duration_ms: { p95: "<500" } # Where runnable files live. Reference these by name from a profile. suites: api: { target: ./tests/api, kinds: [test] } contracts: { target: ./tests/contracts, kinds: [contract, flow] } browser: { target: ./tests/browser, kinds: [test] } explore: { target: ./explore, kinds: [test] } # Named run plans. `glubean run --profile <name>`. profiles: # `glubean run` with no --profile uses `local`. local: suites: [api, contracts] # `glubean ci run` uses `ci`. ci: suites: [api, contracts] selection: excludeTags: [manual, destructive] tagMode: or # or | and execution: failFast: true failAfter: 5 concurrency: 2 timeoutMs: 60000 noSession: false capabilities: browser: true outOfBand: true optIn: true reporters: console: summary # summary | detailed junit: .glubean/results/junit.xml resultJson: .glubean/results/ci.result.json thresholds: http_duration_ms: { p95: "<500", avg: "<200" } upload: enabled: true projectId: prj_abc123 # project short ID (from Project Settings) tokenEnv: GLUBEAN_TOKEN_CI # env var NAME holding this profile's token explore: suites: [explore]

Top level

KeyMeaning
versionSchema version. Always 1.
defaultsSettings inherited by every profile (overridable per profile).
suitesMap of suite name → { target, kinds, data }.
profilesMap of profile name → run plan.
mcpMCP server options — mcp.trace.{keepRequestHeaders, keepResponseHeaders}.

suites

A suite points at a directory (or file/glob) of runnable files.

KeyMeaning
targetPath to the suite’s files, e.g. ./tests/api.
kindsWhich runnable kinds to include: any of test, contract, flow.
dataOptional data-driven inputs directory/config.

profiles

Each profile composes suites + selection + execution + capabilities + reporters + thresholds + upload. Every key except suites is optional and falls back to defaults.

KeyMeaning
suitesList of suite names this profile runs. Narrow to one at run time with --suite <name>.
selectionFilter which runnables execute (see below).
executionHow they run (see below).
capabilitiesOpt-in gates for runnables that need extra setup (see below).
reportersOutput formats (see below).
thresholdsPass/fail metric gates (see below).
uploadCloud upload directive (see below).

selection

KeyMeaning
tagsRun only runnables with one of these tags.
excludeTagsDrop runnables with any of these tags (always OR).
tagModeor (any tag matches) or and (all tags).
filterSubstring match on name/id.
pickSelect specific test.pick example key(s).

execution

KeyMeaning
failFastStop on first failure.
failAfterStop after N failures.
timeoutMsPer-test timeout.
concurrencyMax parallel runnables.
noSessionSkip session setup/teardown.

capabilities

Opt-in gates — runnables that require these are skipped unless the gate is on (equivalent to the --include-* flags).

KeyFlagMeaning
browser--include-browserCases that drive a real browser.
outOfBand--include-out-of-bandCases using email / SMS / webhooks.
optIn--include-opt-inExpensive / slow / side-effecting cases.

reporters

KeyMeaning
consolesummary or detailed.
junitWrite a JUnit XML report to this path.
resultJsonWrite a structured result JSON to this path.
emitFullTraceInclude full request/response headers + bodies in traces.
inferSchemaInfer JSON Schema from response bodies.
truncateArraysTruncate arrays in trace bodies (AI-friendly).

redaction (under defaults)

KeyMeaning
replacementFormatsimple, labeled, or partial.
sensitiveKeysExtra header/field names to redact.
customPatternsList of { name, regex } to redact by value.

thresholds

Per-metric pass/fail gates. Each metric maps to aggregation rules (p95, avg, min, max) with comparison strings, or a shorthand string:

thresholds: http_duration_ms: { p95: "<500", avg: "<200" } error_rate: "<0.05" # shorthand

upload

Cloud upload, per profile. Secrets stay out of this file.

KeyMeaning
enabledTurn on upload for this profile (no --upload flag needed).
projectIdDestination project’s short ID (e.g. prj_abc123). Overrides GLUBEAN_PROJECT_ID; shown in the printed plan.
tokenEnvName of the env var holding this profile’s token (value lives in .env.secrets). Lets different profiles upload to different projects.

upload.projectAlias is the deprecated former name for projectId — still accepted (with a warning), but use projectId.

See Upload to Cloud and Tokens for the project-ID / token resolution order.

Last updated on