Skill Parameters
Every skill's parameters with their defaults, typed and validated: the same names in ace.yaml (a tenant's skills) and in the hosted skills API (skill_params).
One schema, two places. Each skill's parameters are a typed model in the gateway (ace.skill_params), the single source of their defaults. On-prem they sit beside mode under tenants.<t>.skills.<skill> in ace.yaml; hosted they are skill_params.<skill> on POST /api/v1/dev_key/skills (enterprise tier for any parameter but the router allowlist). GET /api/v1/config/schema serves the same models, and the on-prem export writes each listed skill's defaults as comments.
Validated where they are written. An unknown parameter, a wrong type or an out-of-range value is refused: by ace config validate / plan / apply / test (with file and line), and by the hosted save (422 skill_params_invalid, nothing stored). A skill not listed below takes no parameters. A hosted save names only the parameters it changes; they are merged into what is stored, and an explicit null removes one so its default applies again. A parameter stored before the parameters were typed is ignored on the request path (logged once), never an error on a request.
Inheritance. A tenants level inherits its parent's parameters and lists only what differs, one parameter at a time; a list value (rules, disabled_procedure_ids) replaces the parent's list whole.
tenants:
acme:
skills:
prompt_compaction:
mode: prod
default: lossless
rules:
- {part: user, position: opening, compact: "off"}
- {part: tool_result, content: code, compact: "off"}
acme:prod:
skills:
prompt_compaction:
rules: [] # replaces acme's list: no rules in prod
output_budget:
mode: prod
max_output_tokens: 8192
prompt_compaction's rules and default decide, per part of a request, whether it is sent as received (off), rewritten losslessly or word-pruned: see skill:prompt_compaction for the selectors and their semantics. A bare off is read as the action (YAML loads it as false); a bare on is refused.
Defaults are what a tenant that sets nothing gets. A parameter the deployment supplies at boot (epoch_size, token_watermark, tool_result_ratio, ...) is shown at the value it resolves to on a default deployment; a tenant that leaves it unset follows its deployment. Only parameters whose default is a rule rather than a value are null (compress_prefix, default, scorer, keep_recent_turns, payback_turns).
prompt_compaction
| Parameter | Default | Meaning |
|---|---|---|
prune_words |
false |
False: rewrite LOSSLESSLY only -- compact JSON, reference link triples collapsed, exact repeated lines, whitespace and markdown decoration; no word is deleted. True: run the keep-score word pruner after it, at the ratios below. |
drop_empty_fields |
false |
True: the lossless pass also drops null, "", [] and {} members of JSON regions of 200+ characters. Off by default: an empty field (unassigned) says something an absent one does not. |
protect_cached_history |
false |
True: conversation spans inside the provider's cached span are priced and held with the system prefix. For a key whose sessions also reach the vendor directly, so a rewritten history is one another route's cache never saw. |
compress_prefix |
null |
The system prefix (system prompt). null: compacted when not cached, else when the break-even gate says the rewrite pays back; true: always; false: never. |
prefix_ratio |
0.8 |
Words kept in the system prefix (word pruner). |
compress_tool_results |
true |
False: tool results are never compacted. |
tool_result_ratio |
0.5 |
Words kept in tool results (word pruner). null: the deployment's compression_ratio, the same the user turns get. |
instruction_ratio |
1.0 |
Words kept in text typed as instructions (an operator's ask). 1.0: sent byte-identical. |
pasted_ratio |
0.35 |
Words kept in pasted material (a quoted ticket, a log excerpt). |
payback_turns |
null |
Pins the break-even gate's payback horizon, in requests. null: max(one epoch, turns so far), capped by expected_task_steps. |
expected_task_steps |
12 |
Caps the payback horizon at what is left of the task. null: the skill default (12). |
max_span_tokens |
200000 |
The largest span the word pruner scores, in tokens (len/4). A larger span goes as received (x-ace-compaction-partial: span_too_large). 0 or null lifts the bound. Default 200000, or ACE_COMPACTION_MAX_SPAN_TOKENS. |
background_span_tokens |
16000 |
A span to be pruned that is larger than this (tokens, len/4) and not memoised goes upstream as its lossless rewrite while its prune runs off the request; later requests read the memoised prune. Applies to the system prompt, and to other spans only when the request declares no prompt-cache breakpoint (under one, a span already sent keeps its bytes). 0 or null scores every span on the request, under the skill ceiling. |
tool_yield_memo |
true |
Skip scoring a tool whose last tool_yield_window results pruned nothing, except every tool_yield_resample-th request. |
tool_yield_window |
8 |
Results remembered per tool. |
tool_yield_resample |
20 |
Every Nth request of a skipped tool is scored anyway. |
scorer |
null |
The scorer for prune spans no rule sets one for: heuristic or learned. null: the deployment's -- learned when a model is loaded, else heuristic. |
default |
null |
The action for a span no rule matches. null: prune when prune_words is true, else lossless (what the skill has always done). |
rules |
[] |
Ordered; the first rule whose every field matches a span decides it. Tried before compress_prefix: false and compress_tool_results: false, which are rules too. The task statement and a serialised object are never word-pruned: a prune rule on them is applied as lossless. |
semantic_cache
| Parameter | Default | Meaning |
|---|---|---|
lookup_on_tool_results |
false |
Run the approximate (embedding) tier on an agent step whose live turn is a tool result. Off: such a step is served from the exact-prompt table only. |
agent_trajectory_compaction
| Parameter | Default | Meaning |
|---|---|---|
epoch_size |
5 |
Turns per fold epoch. null: 5. |
keep_recent_turns |
null |
Most recent turns never folded. null: the epoch rule. |
keep_recent_images |
1 |
Most recent images kept. null: 1. |
token_watermark |
20000 |
Fold once the trajectory passes this. 0: off. null: 20000. |
max_tool_repeats |
0 |
Identical tool calls in a row before the fold refuses (tool loop). 0: off. null: the deployment's ACE_AGENT_MAX_TOOL_REPEATS, 0 (off) by default. |
payback_turns |
null |
Pins the break-even gate's payback horizon. |
expected_task_steps |
12 |
Caps the payback horizon at what is left of the task. |
output_budget
| Parameter | Default | Meaning |
|---|---|---|
max_output_tokens |
16384 |
The ceiling on a declared completion budget. 0: no ceiling. |
min_output_tokens |
1024 |
Never cap below this. |
default_max_output_tokens |
0 |
The budget given to a caller who declared none. 0: leave them alone. |
reasoning_effort
| Parameter | Default | Meaning |
|---|---|---|
max_effort |
medium |
The ceiling on an OpenAI reasoning level. |
max_budget_tokens |
8192 |
The ceiling on an Anthropic / Bedrock / Gemini thinking budget. |
min_budget_tokens |
1024 |
Never cap below this (Anthropic refuses under 1024). |
skill_knowledge_graph
| Parameter | Default | Meaning |
|---|---|---|
disabled_procedure_ids |
[] |
Procedures never recalled for this tenant (kill switch). |
llm_router
| Parameter | Default | Meaning |
|---|---|---|
allowlist |
null |
Hosted: the model ids the router may route to. null or []: the router routes nothing. |