Configuration
Every deployment-varying value is a validated Schemastery field, changeable from
cordis.yml without a code edit. There are no tunables hidden as constants.
[!WARNING]
A patch layer replaces a row's entire config value rather than merging
into it. That is why each row's configuration is small and local: overriding
one key never forces you to restate the rest.
cloudflare — the seam (@d4551/dsh-cloudflare-core)
| Field | Default | Meaning |
|---|
apiTokenRef | CLOUDFLARE_API_TOKEN | Credential reference — a POSIX env-var name, never a value |
accountId | '' | Account to operate on; discovered at first use when empty |
baseUrl | https://api.cloudflare.com/client/v4 | REST root; overridable for API-compatible proxies |
requestTimeoutMs | 30000 | Deadline for one attempt, aborting the request. A retry gets a fresh budget, so this caps an attempt rather than the whole retried operation; a tool with a longer budget of its own passes it per request |
maxRetries | 3 | Retry budget for transient failures |
retryBaseDelayMs | 250 | First backoff step |
retryMaxDelayMs | 10000 | Backoff ceiling, and the cap applied to a server Retry-After |
maxPages | 100 | Hard ceiling on pages walked by one list call |
cloudflare-llm — the model provider (cloudflare-dsh/ai)
| Field | Default | Meaning |
|---|
gatewayId | '' | Gateway to route through; required for the gateway route |
gatewayProvider | workers-ai | Provider slug the gateway forwards to |
chatCompletionsPath | /chat/completions | Path appended to the resolved base URL |
workersAiPath | /ai/v1/chat/completions | OpenAI-compatible Workers AI path, relative to the account scope |
cacheTtlSeconds | 0 | cf-aig-cache-ttl |
skipCache | false | cf-aig-skip-cache |
collectLog | true | cf-aig-collect-log — required for session cost attribution |
tags | {} | Static tags merged into cf-aig-metadata |
customCostPerTokenIn | 0 | Per-token input cost override recorded by the gateway; zero sends none |
customCostPerTokenOut | 0 | Per-token output cost override, paired with the input one |
gatewayRequestTimeoutMs | 0 | Gateway-side request timeout; zero leaves the gateway's own default |
streamIdleTimeoutMs | 300000 | How long a stream may go quiet before failing as a timeout |
models | [] | Advertised models; empty means query the catalogue |
cloudflare-tools-ai (cloudflare-dsh/tools/ai)
| Field | Default | Meaning |
|---|
pageSize | 50 | Default page size for the model catalogue and gateway listings |
searchMaxResults | 10 | Default number of chunks cloudflare_aisearch_search returns |
vectorTopK | 5 | Default number of matches cloudflare_vectorize_query returns |
inferenceTimeoutMs | 120000 | Budget for tools that wait on model inference: the tool's own, and its request deadline |
cloudflare-tools-data (cloudflare-dsh/tools/data)
| Field | Default | Meaning |
|---|
pageSize | 50 | Default page size for namespace, database and bucket listings |
keyListLimit | 1000 | Default number of keys cloudflare_kv_list_keys returns per page |
renderLimit | 4000 | Characters of a KV value shown to the model before truncation |
queueBatchSize | 10 | Default number of messages cloudflare_queue_pull takes |
queueVisibilityTimeoutMs | 30000 | Default time pulled messages stay invisible to other consumers |
cloudflare-tools-web (cloudflare-dsh/tools/web)
| Field | Default | Meaning |
|---|
renderLimit | 8000 | Characters of a rendered page or accessibility tree shown before truncation |
renderTimeoutMs | 120000 | Budget for a real browser render: the tool's own, and its request deadline |
screenshotType | png | Image encoding of a screenshot when the call does not choose one |
screenshotFullPage | false | Whether a screenshot captures the whole page when the call does not say |
cloudflare-tools-meta — the escape hatch (cloudflare-dsh/tools/meta)
| Field | Default | Meaning |
|---|
allowMutations | false | When false, cloudflare_api rejects anything but GET/HEAD |
denyPathPrefixes | [] | Path prefixes cloudflare_api refuses outright |
The shipped patch layer
- insert:
- id: cloudflare
name: '@d4551/dsh-cloudflare-core'
config:
apiTokenRef: CLOUDFLARE_API_TOKEN
- id: cloudflare-tools-ai
name: 'cloudflare-dsh/tools/ai'
- id: cloudflare-tools-data
name: 'cloudflare-dsh/tools/data'
- id: cloudflare-tools-web
name: 'cloudflare-dsh/tools/web'
- id: cloudflare-llm
name: 'cloudflare-dsh/ai'
- id: cloudflare-tools-meta
name: 'cloudflare-dsh/tools/meta'
config:
allowMutations: false
denyPathPrefixes: []