Reference
Configuration
Every knob Telar exposes, in two files: .tl-telar-thresholds.json (quality gates, autonomy, parallelism) and .tl-telar/external-tools.yaml (external AI adapters, cross-model review, and opt-in Claude Code native features). Both are created by /tl-telar:setup-orchestration; edit them by hand afterward.
Where these live. .tl-telar-thresholds.json sits at the project root and is committed. .tl-telar/external-tools.yaml lives under the git-ignored .tl-telar/ state directory. Missing files fall back to safe defaults — nothing hard-fails on absence.
Session model & cost. /tl-telar:orchestrate is a conductor that runs in your main session. Spawned agents carry their own model tier (frontmatter model:) and reviewers are pinned to Opus, but the orchestrator's own turns use whatever model /model is set to — agent frontmatter cannot override the session model. Running a long orchestrate on the most expensive model is where most of the cost comes from. Recommendation: run orchestrate on Sonnet or Opus, not the top-tier model.
.tl-telar-thresholds.json
The quality-gate contract. Framework-aware defaults are written at setup based on the detected stack (React Native / Expo / Flutter).
coverage
| Key | Default | Meaning |
lines | 80 | Minimum line-coverage %. |
branches | 75 | Minimum branch-coverage %. |
functions | 80 | Minimum function-coverage %. |
statements | 80 | Minimum statement-coverage %. |
performance
| Key | Default | Meaning |
min_fps | 60 | Minimum acceptable frame rate. |
max_cold_start_ms | 3000 | Maximum cold-start time in milliseconds. |
size
| Key | Default | Meaning |
max_apk_mb | 50 | Maximum Android APK size (MB). |
max_ipa_mb | 60 | Maximum iOS IPA size (MB). |
accessibility
| Key | Default | Meaning |
required_audit_pass | false | When true, an accessibility audit must pass before a task completes. |
autonomy
| Key | Default | Meaning |
cycle | "interactive" | interactive: the orchestrator may pause at checkpoint: true WUs and at self-reflect. unattended: a single human gate at plan-readiness — scope + approved UI drafts + all inputs collected up front — then the WU cycle runs to PR-ready with zero pauses. Unattended never skips a decision; it makes it earlier. |
execution
| Key | Default | Meaning |
max_parallel_wus | 3 | How many Work Units run concurrently. A WU is dispatched only when its deps are COMPLETE and its file_scope is free (or, under worktree isolation, in its own checkout). Parallel agent runs cost roughly 15× chat tokens — keep it modest. Absent/invalid → 3. |
enforcement
What blocks, and the commands the gates run. *_command pairs with a *_strict flag — advisory (log only) when false, blocking when true.
| Key | Default | Meaning |
coverage_command | framework-detected | e.g. npx jest --coverage, flutter test --coverage. |
coverage_strict | true when a runner is detected | Block on coverage below threshold. |
perf_command | bash scripts/perf-smoke.sh | Performance smoke command (advisory stub by default). |
perf_strict | false | Block on performance regression. |
size_command | bash scripts/size-check.sh | APK/IPA size check (advisory stub by default). |
size_strict | false | Block on size over budget. |
a11y_command | echo stub | Accessibility audit command. |
a11y_strict | false | Block on accessibility failures. |
blockPRCreation | true | Fail gates prevent PR creation. |
blockTaskCompletion | true | Fail gates prevent marking a task complete. |
self_reflect_per_wu | false | When true, fire /tl-telar:self-reflect after every WU (adds a user-approval step per WU) instead of once pre-PR. |
detected_framework | at setup | Recorded framework (react-native / expo / flutter / node). |
External AI adapters (Codex/GPT-5.6-sol, Gemini, Kimi K3 via a native kimi CLI or a generic Anthropic-compatible compat adapter), the config-driven model roster (routing.roles + models_registry), cross-model review, budget, and opt-in Claude Code native features. Git-ignored; created only by /tl-telar:setup-orchestration. Adapters are disabled by default. Onboarding a new model is a YAML edit — no code change; resolve any role with tl-telar-external-tools.sh resolve-role <role>.
Codex plugin vs Codex adapter. Installing tl-telar@telar with codex plugin marketplace add zekiyugnak/telar-framework --ref develop loads Telar into Codex. Enabling adapters.codex here is different: it lets Telar delegate selected orchestration work to the Codex CLI, and remains opt-in.
adapters
| Key | Type | Meaning |
enabled | bool | Activate the adapter. The CLI must be installed and auth_env_var set first. |
type | string | Omit for a bespoke <name>.sh adapter (codex/gemini/kimi). "compat" → the generic compat.sh that drives claude against any Anthropic-compatible endpoint. |
model | string | Blank = adapter's own default (Codex: ~/.codex/config.toml). e.g. "gpt-5.6-sol", "kimi-code/k3", "pro". |
reasoning_effort | string (codex) | gpt-5.6-sol ladder: low|medium|high|xhigh|max|ultra. Sol's default is low — set it explicitly. (gpt-5.6-sol needs codex-cli ≥ 0.144.) |
base_url / api_style | string (compat) | Compat adapter endpoint, e.g. https://api.kimi.com/coding/; only api_style: anthropic is supported. |
pricing | obj | {input_per_1m, output_per_1m} USD; model-agnostic per adapter. Omitting it is fail-closed (conservative per-task cap recorded, never a silent $0). Set 0 for a flat-subscription model. |
timeout_seconds | number | Adapter invocation timeout. |
auth_env_var | string | Env var the dispatcher reads for auth (e.g. OPENAI_API_KEY, GEMINI_API_KEY, KIMI_API_KEY). Native kimi/Codex use their own CLI login instead. |
sandbox | string | "none" — no sandbox isolation. |
routing & budget
| Key | Default | Meaning |
routing.roles | obj | Model per pipeline role (architect|moderator|developer|reviewer|tester); each role takes model/models, optional escalation, panel, options. Single source of truth for the roster; resolved via resolve-role. |
routing.models_registry | obj | How each model runs: exec: claude (native tier) or exec: adapter (tool), plus tier/effort. Onboard a model = one entry here + reference it from a role. |
routing.default_implementer | "cheapest-available" | Also round-robin, claude, or a specific tool name. |
routing.escalation_order | [codex, gemini, claude] | --tool auto tries adapters in this order (first enabled+healthy wins). |
routing.fallback_by_health | true | A role's model whose adapter is unhealthy falls to its escalation. |
routing.health_recheck_every_n_tasks | 10 | Re-run health checks periodically. |
budget.per_task_usd | 1.00 | Max USD per adapter invocation; over → fall back to Claude. |
budget.per_session_usd | 10.00 | Session-wide adapter spend cap. |
budget.ledger_file | JSONL path | Records every invocation for audit + budget-status. |
budget.circuit_breaker_message | string | Printed when the budget trips. |
cross_model_review (Phase γ)
An additive second review: Review 1 (the Claude roster) always runs; when enabled, Review 2 runs on top with a model distinct from both the writer and Claude. Both must PASS.
| Key | Default | Meaning |
enabled | false | true → Review 2 is required on every WU. |
on_unavailable | "block" | block: stop if no distinct second model is ready. warn_and_proceed: skip Review 2 on Review 1 alone, logged loudly. |
matrix | writer→reviewers | Which models may review each writer's diff. A model never reviews its own code. |
cc_features — Claude Code native capabilities
Enabled is intent, not capability. A feature activates only when enabled: true and a runtime probe confirms the capability is really present. Otherwise Telar falls back to the current-behavior path (fail-closed), logs one line, and never hard-fails. Defaults are true because absence degrades safely — older Claude Code runs unchanged.
The gating is one tested code path — scripts/tl-telar-cc-features.sh — that the plan-review gate and the orchestrator call, rather than re-deciding it in prose.
cc_features:
dynamic_workflows:
enabled: true
on_unavailable: "warn_and_proceed"
worktree_isolation:
enabled: true
on_unavailable: "warn_and_proceed"
| Key | Default | Meaning |
dynamic_workflows.enabled | true | Run the plan-review gate as a deterministic Workflow script (parallel() fan-out + schema-validated verdicts) when the Workflow tool is available. Both paths emit the identical aggregated verdict, so downstream is oblivious to which ran. |
worktree_isolation.enabled | true | Run each parallel WU in its own git worktree so WUs with overlapping file_scope run concurrently (relaxes the disjoint constraint). Fallback: disjoint-scope serialization — slower, never wrong. |
<feature>.on_unavailable | "warn_and_proceed" | When the capability isn't confirmed: warn_and_proceed runs the fallback (logged); block stops at preflight (use when the feature is a hard requirement). |
Capability probe signals. dynamic_workflows → the Workflow tool is present in the top-level session. worktree_isolation → isolation: worktree support is positively confirmed; because older Claude Code silently ignores that frontmatter, an unconfirmed probe keeps the disjoint constraint even when enabled: true — trusting the probe, never the flag.
Values you can't configure
Fixed in source, not tunable via either file:
| Aspect | Fixed value |
| Plan-review reviewers | 3 (parallel) |
| Design-review reviewers | 6 (PM, Architect, Designer, Security-Design, CTO, Mobile-Platform) |
| Per-WU adversarial reviewers (always-on) | 2 (Code + Mobile Security) |
| Per-WU adversarial reviewers (conditional) | +2 (A11y, Performance — by file_scope) |
| Max gate retries | 3, then human escalation |
| Commit & push | Never automatic — the orchestrator emits COMMIT-READY and leaves it to you |
Auto-managed state (don't hand-edit)
Written and maintained by the orchestrator under .tl-telar/; git-ignored working files, not durable artifacts:
| File | Role |
.tl-telar/plans/active-plan.md | Plan + WU list; the resume sentinel. |
.tl-telar/context/execution-state.md | Per-WU phase, retry count, validation results; doubles as the resume journal. |
.tl-telar/context/project-context.md | Cross-WU coherence context read by later WUs. |
.tl-telar/project-profile.json | Setup sentinel — framework + plugin version captured once at setup. |
.tl-telar/context/external-tools-budget.jsonl | External-adapter spend ledger. |
.worktreeinclude | Files copied into each WU worktree when isolation is active. |