agent-policy-kit 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,75 @@
1
+ # Agent Policy Kit — AI operator guide
2
+
3
+ APK is configuration-only. Native files remain independent after npm package/source removal. There is no hook, proxy, launcher, plugin, daemon, runtime audit or background updater. Subagent preferences apply only if the main agent chooses to delegate; preserve ordinary direct work and disabled delegation features.
4
+
5
+ Perform authorized technical setup/removal yourself; do not hand the owner a shell checklist. Use JSON plans/results, preserve main models, credentials, permissions, unrelated settings and later edits. Never log in, collect credentials, accept terms, start model tasks, publish, weaken sandboxes or bypass trust to force installation success. Private backups can contain existing secrets; keep state private.
6
+
7
+ ## 1. Select the requested release
8
+
9
+ Package version is configuration-release version. Read that version's CHANGELOG.md or release output for what changed, why and migration limits. Check the installed tool versions, actual provisioned model aliases and current official model/effort documentation before applying. Preserve explicit user choices; a newer package/model is not an instruction to switch silently. See [model maintenance](docs/model-updates.md) and the dated [model catalog/presets](docs/model-catalog.md).
10
+
11
+ After publication, pinned invocation is supported:
12
+
13
+ ```sh
14
+ npx --yes --ignore-scripts --package agent-policy-kit@0.1.0 agent-policy release
15
+ npx --yes --ignore-scripts --package agent-policy-kit@0.1.0 agent-policy setup --release
16
+ ```
17
+
18
+ Before publication, replace the registry spec with the verified local .tgz. For several commands, install to a temporary or user-owned prefix with npm install --prefix PREFIX TARBALL --ignore-scripts --no-audit --no-fund, then invoke PREFIX/node_modules/.bin/agent-policy. No stable runtime prefix, sudo or shell-profile changes are needed.
19
+
20
+ ## 2. Choose the input
21
+
22
+ The page always prints explicit arguments, including when a preset filled the form:
23
+
24
+ ```sh
25
+ agent-policy setup \
26
+ --roles reviewer,explorer \
27
+ --max-concurrent 3 \
28
+ --codex 'reviewer=gpt-6.1-sol:high,explorer=gpt-6-luna:high' \
29
+ --avoid-codex 'gpt-6-astra' \
30
+ --claude 'reviewer=sonnet:high,explorer=haiku:high' \
31
+ --avoid-claude 'opus,fable' \
32
+ --apply
33
+ ```
34
+
35
+ Use --codex, --claude, --kimi and/or --antigravity to select tools. Each tool must list every selected role exactly once. --roles and --max-concurrent are required in this mode. :native means effort null. Antigravity accepts role=tier without an effort. Split the model/effort pair at its last colon. Keep the visible shell quotes and line continuations. The optional --avoid-TOOL lists preserve routing guidance. An omitted list is empty.
36
+
37
+ Explicit arguments are setup/install-only and cannot combine with --client, --release, --preset, --policy or --config. Duplicate flags and incomplete role maps fail before writes. Omit --apply to plan first. Explicit commands allow deliberate owned replacement and record custom source with no named preset provenance. The native files do not retain a dependency on the codec or package.
38
+
39
+ Other supported inputs remain available:
40
+
41
+ - setup --release --preset balanced explicitly applies this executable's named preset and templates (fast/quality are alternatives). It is the supported pinned-release upgrade/downgrade path.
42
+ - setup --config BASE64URL explicitly applies custom choices through this version's templates. This legacy encoded input remains supported. Decode/inspect the JSON; it must contain preferences only, never credentials or executable content.
43
+ - init --policy FILE creates editable defaults without overwriting. setup --policy FILE is a conservative advanced workflow; ordinary mismatching setup refuses replacement. To deliberately replace saved choices from a file, validate it, encode its JSON with Buffer.from(JSON.stringify(preferences)).toString('base64url'), and use --config.
44
+
45
+ Explicit arguments, --release/--preset, --config and --policy are alternative input modes. The --config JSON is canonical unpadded base64url, at most 64 KiB decoded. APK validates it before target mutation and removes its temporary input file afterward.
46
+
47
+ Optional top-level selectedRoles selects worker, reviewer, explorer, tester, writer and/or routine. It must be nonempty and contain no duplicates. Omit it to configure all six roles in that release. Optional client roles overrides the selected roles' code/light recommendations. A selected subset creates only those native files and routing instructions. Unselected aliases do not require provisioning or receive effort pins. The first selected role in catalog order supplies the native subagent default.
48
+
49
+ Use model-supported native effort levels. null means no explicit pin. A known catalog model rejects unsupported explicit effort. Keep at most one non-null pin per selected Kimi alias. Preset identity and custom source are reported separately. Tools omitted from clients are not selected.
50
+
51
+ Run detect and inspect the setup plan. Working executable identity is required; stale directories are not presence. Automatic targets use standard native roots. Nondefault CODEX_HOME/CLAUDE_CONFIG_DIR/KIMI_CODE_HOME returns a per-client zero-write prerequisite rather than configuring a dormant folder. Explicit --home selects the standard layout under that intended base; preserve exact --home/--state-dir for later inspection/removal. It does not remap arbitrary native roots.
52
+
53
+ ## 3. Apply the concrete reviewed plan
54
+
55
+ Already-authorized configuration needs no repeat confirmation. Add --apply to the same selected-release or custom-config command. APK updates existing owned files transactionally without an uninstall gap. It verifies old ownership, virtually restores the original user baseline, then commits the target files/receipt/requested snapshot. Drift or a native prerequisite leaves the existing release intact; a late failure rolls it back. Preserve unrelated edits.
56
+
57
+ Run doctor afterward. It reports each client's actual saved release/source independently of the current executable, bundle, external source or canonical preferences. A verified config is not model execution proof. Native clients may need a fresh session to load changes; do not terminate active user sessions automatically.
58
+
59
+ Per-client transactions are independent. A missing/blocked client can retain an older applied release while another advances. Read all results; never label a partial outcome fully updated. stateDir/policy.json is the latest requested snapshot, not the applied truth. Receipts are the applied truth. Canonical preferences may therefore differ from an older client's snapshot. Ordinary saved-file setup still detects unsafe mismatch. Explicit tool arguments and --release/--config are deliberate replacement operations.
60
+
61
+ Kimi needs provisioned aliases/provider metadata and supported effort; do not invent them. K3.1 Pro variants require thinking: explicit native thinking.enabled=false returns a prerequisite even if every requested effort is null. Do not change the main thinking setting to force helper installation. If a selected alias also serves the main model, a changed effort default without a valid explicit global override returns kimi-main-effort-conflict. Use a compatible separate native alias or deliberately prepare a native variant while preserving main behavior. Reserved primary cannot be a pool key. Claude force-model conflicts require an explicit native setting decision rather than a false per-role success.
62
+
63
+ The available role names are apk-worker/apk-reviewer/apk-explorer/apk-tester/apk-writer/apk-routine. APK creates only the selected names. Changing the selected role set through explicit arguments or --config safely replaces the earlier owned role set. APK preserves unowned files and refuses removal of edited owned roles. Only when delegation is chosen do model/effort/routing/parallelism preferences apply. Native files must not execute/import the package or depend on its executable/npm/source/state path. After verification you may remove the npm package. Keep private receipts for future owned undo.
64
+
65
+ ## 4. Native limits
66
+
67
+ Codex/Claude have native defaults/caps with higher-priority setting and execution-path exceptions. Kimi role-to-pool selection and concurrency are guidance. Antigravity uses native Pro/Flash/Flash Lite/inherit tiers, with no documented per-role effort or universal hard cap. avoidModels is guidance. A pinned configuration does not prove provider identity, entitlement, task quality or unchanged alias resolution. Never add a runtime gate to strengthen a missing native feature.
68
+
69
+ ## 5. Removal and incompatible formats
70
+
71
+ Run uninstall, review it, then uninstall --apply. Receipts verify ownership without canonical/source preferences or the native executable. Final removal restores original user settings, including after supported release changes, and keeps unrelated later edits. Do not restore stale whole-file backups or force-delete locks/pending journals.
72
+
73
+ Current native receipt v4 records selectedRoles and their bounded fixed filenames. It verifies that the owned file set matches the role selection. Historical v3 and v2 native receipts remain inspectable and removable. v2 has unknown release provenance. Older executables can reject v4. Use an executable that supports the receipt before an incompatible downgrade. Unknown formats/layouts fail safely and require a documented compatible migration. Experimental runtime v1 receipts need their original owned uninstall first. Never delete arbitrary hooks by matching text.
74
+
75
+ Return concise per-client detected/configured/applied-release/source results, prerequisites, new-session needs and unchecked model/provider evidence. No public release, deployment or live model task is part of configuration acceptance.
package/CHANGELOG.md ADDED
@@ -0,0 +1,61 @@
1
+ # Changelog
2
+
3
+ Each npm version is one configuration release: its presets, native role definitions, instructions and configuration page. Published versions are not rewritten. Applying another release is explicit; package installation alone changes no settings.
4
+
5
+ ## 0.1.0 — 2026-10-30
6
+
7
+ ### Why this release
8
+
9
+ Use a common approach to optional delegation across Codex, Claude Code, Kimi and Antigravity, without an extra process in normal agent operation. Configure once and remove the installer afterward.
10
+
11
+ ### What it configures
12
+
13
+ Six focused roles cover implementation, read-only review, code discovery, test creation, documentation and prescribed execution. Each preset assigns a model and supported effort to every role; the [preset matrix](docs/model-catalog.md#how-the-presets-are-designed) explains the choices.
14
+
15
+ These are starting preferences, not model-quality benchmarks. Native model formats and alias behavior were reviewed against the official sources linked in [support](docs/compatibility.md) and [model maintenance](docs/model-updates.md). Model availability must be checked before applying. Provider aliases and tiers may resolve differently over time.
16
+
17
+ ### Presets and model catalog
18
+
19
+ All three presets were rebuilt for public use. Personal Astra/Opus/Fable and other avoid lists were removed. Fast gives review and testing more reasoning than simple execution. Balanced separates implementation, verification, discovery, documentation and mechanics. Quality uses Astra/Fable for demanding work and regular K3.1 Pro at max for Kimi code/review/tests. Claude recommendations pin current versioned IDs; Kimi Balanced uses the quota-conscious K3 256K variant. These are editable recommendations, not benchmark results.
20
+
21
+ The release contains a dated model/effort catalog from official documentation and native selector observations, including native-default effort and account-dependent availability. Antigravity role choices are native tiers, with no invented per-role effort setting.
22
+
23
+ Catalog audit, 2026-10-30 UTC: Kimi now lists all six current models, including K3.1 Pro and Pro Highspeed. Quality first now uses regular K3.1 Pro at max effort for implementation/review/tests; other roles have separate choices described in the preset matrix. Highspeed remains optional because its faster output consumes about twice regular Pro's quota, according to Kimi. Setup requires provisioned access and does not silently fall back to another model.
24
+
25
+ Both Pro variants require compatible thinking settings. Even with unpinned effort, setup refuses an explicit thinking-disabled setting without modifying it.
26
+
27
+ Codex effort choices/defaults now follow CLI 0.166.0 rather than API defaults; API metadata remains separate, and Ultra stays separate from ordinary effort. Claude Opus 4.5 no longer advertises an API-only native effort override. Existing custom inputs using levels outside the current native catalog require review before reapplication; owned inspection/removal remains independent of current recommendations. Sonnet 4.5 remains selectable with its Anthropic deprecation status marked. Antigravity CLI's four tier choices are unchanged.
28
+
29
+ ### What changed
30
+
31
+ - Added Test writer and Docs writer; clarified Code explorer and Task runner. Old four-role native v2/v3 receipts remain supported, including explicit expansion to six, owned removal, drift refusal and late rollback. New v4 snapshots support six independently configured Kimi aliases.
32
+
33
+ - Readable type uses a compact 36/20/15/13 px scale with more spacing; narrow layouts stack model controls and command actions.
34
+ - A short collapsible explanation introduces role-specific models, native setup and optional delegation, using the same wording as the README.
35
+ - The builder now starts with no roles, tools or chosen modes. Green checks track completed selections and successful copy, and Reset form restores a blank state. URL fragments restore visible settings without a backend. Conditional section hints and changed step markers use a two-second highlight hold plus two-second fade, respecting reduced motion. Selection controls share a soft treatment; Copy remains the primary action.
36
+ - Page commands always list every selected role/model/effort under its tool, including presets. Explicit --roles, --max-concurrent and optional --avoid-TOOL preserve the existing selection, cap and guidance. :native represents unpinned effort; Antigravity remains tier-only. The shared codec validates complete role maps and rejects duplicate/mixed input before writes. Legacy release/config/policy inputs remain supported.
37
+ - The four-step page now selects subagent roles and coding tools before mode/model/effort configuration. It generates and copies a real pinned command. Tool additions preserve All or a manually selected view. Role help uses the same prompt definitions as native generation.
38
+ - Optional selectedRoles creates only the requested native roles. Receipt v4 binds that role set to owned files and supports safe expansion, reduction and removal. Earlier v2/v3 native receipts retain their historical four-role ownership boundary. Unselected Kimi aliases do not need provisioning or effort pins.
39
+ - Native role files and routing instructions apply only when the main agent chooses delegation. Main models and disabled delegation features are preserved.
40
+ - A static page lets each tool use its own mode and per-task models/effort. All shows mixed settings as Custom and can apply one preset to every tool. Scope warnings protect individual and global replacements; the page generates one pinned command.
41
+ - Explicit release application supports safe upgrade/downgrade of owned settings; per-client receipts record the actual applied version and custom choices.
42
+ - Ownership/drift checks, private backups and rollback preserve unrelated settings and earlier user values.
43
+ - No custom hooks, proxy, plugin, launcher, daemon or normal-operation runtime is installed.
44
+
45
+ ### Who should use it
46
+
47
+ People who want consistent subagent preferences across their installed coding tools. You can keep the recommendations or select different native models in the configuration page.
48
+
49
+ ### Applying this version
50
+
51
+ ```sh
52
+ npx --yes --ignore-scripts --package agent-policy-kit@0.1.0 agent-policy setup --release --apply
53
+ ```
54
+
55
+ Without --apply the same command previews the changes. The page-generated explicit tool arguments apply the visible choices using this release's native templates. See [release usage](docs/releases.md).
56
+
57
+ ### Migration and limits
58
+
59
+ This is the first public release. Synthetic versions in tests are not real releases. Experimental runtime receipts from older development commits require their original owned removal. Supported native snapshot formats can be updated safely; unknown future formats/layouts are refused.
60
+
61
+ Kimi/Antigravity concurrency guidance and native tier/precedence limits remain explicit. A pinned release reproduces declared configuration, not provider weights, entitlement or model quality.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Agent Policy Kit contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,53 @@
1
- # Temporary Holding Version
1
+ # Agent Policy Kit
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Coding agents can delegate specific tasks to temporary subagents. Those tasks vary in complexity and importance. A single model for every task is rarely the best balance of capability, speed and cost.
4
+
5
+ Agent Policy Kit lets you match subagent roles with models and effort. It configures your coding tools’ native environment, then exits. The main agent still decides when to delegate, and its model stays unchanged.
6
+
7
+ ```mermaid
8
+ flowchart LR
9
+ Roles("1. Choose subagent roles") --> Tools("2. Choose your coding tools")
10
+ Tools --> Models("3. Choose models and effort")
11
+ Models --> Command("4. Run one setup command")
12
+ Command --> Done("Native configs saved<br/>APK exits")
13
+ classDef default fill:#f5f7fb,stroke:#e0e5ed,color:#19283e
14
+ classDef action fill:#3158c3,stroke:#3158c3,color:#ffffff
15
+ class Command action
16
+ ```
17
+
18
+ ## Choose your setup
19
+
20
+ Open the [configuration page](https://agent-policy-kit.maksymenko-ml.workers.dev/v/0.1.0/) in your browser. Choose roles and coding tools, keep a preset or adjust each role, then copy the fully expanded setup command. The page address saves your visible choices for sharing. APK creates only the selected roles in installed, selected tools.
21
+
22
+ The [bundled page](site/index.html) also works offline. APK has no proxy, background process or runtime during your normal coding sessions. You can remove the npm package afterward.
23
+
24
+ ## Roles and work modes
25
+
26
+ Choose only the roles you need:
27
+
28
+ | Role | Result |
29
+ |---|---|
30
+ | Coder | Implementation and fixes |
31
+ | Reviewer | Read-only correctness, security and regression findings |
32
+ | Code explorer | Read-only code and documentation discovery |
33
+ | Test writer | Tests and targeted execution; product fixes return to Coder |
34
+ | Docs writer | Verified docs, examples and release notes |
35
+ | Task runner | Prescribed commands and mechanical edits; uncertain decisions return to the parent |
36
+
37
+ Fast & economical favors bounded work and lighter models. Balanced puts more capability into implementation and verification. Quality first uses frontier models for demanding work, with higher usage and latency possible. All choices remain editable. Claude Fable in Quality may use additional usage credits.
38
+
39
+ See the [exact preset choices and rationale](docs/model-catalog.md#how-the-presets-are-designed). Recommendations contain no personal model bans. They configure the environment; the main agent still chooses whether to delegate.
40
+
41
+ ## Use a specific release's defaults
42
+
43
+ ```sh
44
+ npx --yes --ignore-scripts --package agent-policy-kit@0.1.0 agent-policy setup --release --apply
45
+ ```
46
+
47
+ Omit --apply to preview. Each version includes its own presets, instructions and configuration page. [Release notes](CHANGELOG.md) explain what changed and why; [release usage](docs/releases.md) covers upgrade and downgrade.
48
+
49
+ Prefer your AI agent to handle installation or removal? Give it the [AI operator guide](AGENT_INSTALL.md).
50
+
51
+ [Model catalog](docs/model-catalog.md) · [Support](docs/compatibility.md) · [Model updates](docs/model-updates.md) · [Privacy](docs/privacy.md) · [Verification](docs/verification.md)
52
+
53
+ Node.js 22.x (22.13+) or 24+; macOS/Linux. Version 0.1.0. MIT licensed.
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import {fileURLToPath} from 'node:url';
6
+ import {parseArgs} from 'node:util';
7
+ import {CLIENTS,validatePolicy} from '../src/policy.mjs';
8
+ import {ROLE_IDS} from '../src/roles.mjs';
9
+ import {EXPLICIT_FIELDS,parseExplicitOptions} from '../src/explicit.mjs';
10
+ import {nativeHomeConflict} from '../src/native.mjs';
11
+ import {detectClients,resolveClient,summarizeDetection} from '../src/detect.mjs';
12
+ import {bundledReleaseInfo,presetPreferences} from '../src/release.mjs';
13
+ const root=path.dirname(path.dirname(fileURLToPath(import.meta.url)));
14
+ const version=JSON.parse(fs.readFileSync(path.join(root,'package.json'))).version;
15
+ const print=value=>process.stdout.write(JSON.stringify(value,null,2)+'\n');
16
+ const fail=code=>{throw Object.assign(new Error(code),{code});};
17
+ const safeCode=code=>typeof code==='string'&&/^[A-Z_]{1,64}$/.test(code)?code:'OPERATION_FAILED';
18
+ function loadPolicy(file) {
19
+ const stat=fs.lstatSync(file);
20
+ if(!stat.isFile()||stat.isSymbolicLink()||stat.size>65536) fail('INVALID_POLICY');
21
+ try{return validatePolicy(JSON.parse(fs.readFileSync(file,'utf8')));}catch{fail('INVALID_POLICY');}
22
+ }
23
+ function help(){console.log(`Agent Policy Kit ${version}
24
+
25
+ Usage: agent-policy <command> [options]
26
+
27
+ instructions Print the AI setup and removal guide
28
+ init Copy default preferences to --policy (never overwrite)
29
+ detect Detect installed coding tools from executable identity
30
+ release Show this package's configuration version and release notes
31
+ setup Plan native configuration; add --apply to write
32
+ install Plan one --client or all detected clients
33
+ uninstall Plan owned removals; add --apply to remove
34
+ doctor Check owned native configuration without model calls
35
+
36
+ Options: --client codex|claude|kimi|agy --home PATH --state-dir PATH
37
+ --policy FILE | --release [--preset fast|balanced|quality] | --config BASE64URL
38
+ --roles worker,reviewer,explorer,tester,writer,routine --max-concurrent 3
39
+ --codex ROLE=MODEL:EFFORT,... --claude ROLE=MODEL:EFFORT,...
40
+ --kimi ROLE=ALIAS:EFFORT,... --antigravity ROLE=TIER,...
41
+ --avoid-codex MODELS --avoid-claude MODELS --avoid-kimi MODELS --avoid-antigravity MODELS
42
+ --apply --help --version
43
+
44
+ Explicit tool input requires --roles and --max-concurrent. Use :native for unpinned effort.
45
+ Include every selected role for each selected tool. Avoid lists are comma-separated.
46
+ State defaults to AGENT_POLICY_HOME or ~/.agent-policy-kit.
47
+ This configurator exits after setup. Native files work without the package.`);}
48
+ async function main(){
49
+ const {values:opts,positionals,tokens}=parseArgs({allowPositionals:true,strict:true,tokens:true,options:{
50
+ client:{type:'string'},home:{type:'string'},'state-dir':{type:'string'},policy:{type:'string'},
51
+ apply:{type:'boolean',default:false},help:{type:'boolean'},version:{type:'boolean'},
52
+ release:{type:'boolean',default:false},config:{type:'string'},preset:{type:'string'},
53
+ ...Object.fromEntries(EXPLICIT_FIELDS.map(name=>[name,{type:'string'}])),
54
+ }});
55
+ if(opts.version){console.log(version);return;}
56
+ const command=positionals[0];
57
+ if(opts.help||!command||command==='help'){help();return;}
58
+ if(!['instructions','init','detect','release','setup','install','uninstall','doctor'].includes(command)) fail('UNKNOWN_COMMAND');
59
+ if(positionals.length!==1) fail('UNEXPECTED_ARGUMENT');
60
+ const seen=new Set();for(const token of tokens)if(token.kind==='option'&&EXPLICIT_FIELDS.includes(token.name)){if(seen.has(token.name))fail('DUPLICATE_OPTION');seen.add(token.name);}
61
+ const explicitValues=Object.fromEntries(EXPLICIT_FIELDS.filter(name=>opts[name]!==undefined).map(name=>[name,opts[name]])),explicit=Object.keys(explicitValues).length>0;
62
+ const bundled=Boolean(opts.release||opts.preset!==undefined);
63
+ if([opts.policy!==undefined,bundled,opts.config!==undefined,explicit].filter(Boolean).length>1)fail('CONFLICTING_OPTIONS');
64
+ if(explicit&&(!['setup','install'].includes(command)||opts.client!==undefined))fail('CONFLICTING_OPTIONS');
65
+ if((opts.release||opts.config!==undefined)&&!['setup','install'].includes(command))fail('CONFLICTING_OPTIONS');
66
+ if(opts.preset!==undefined&&!['release','setup','install'].includes(command))fail('CONFLICTING_OPTIONS');
67
+ const preset=opts.preset??'balanced';
68
+ if(bundled)presetPreferences(preset);
69
+ if(command==='instructions'){process.stdout.write(fs.readFileSync(path.join(root,'AGENT_INSTALL.md'),'utf8'));return;}
70
+ if(command==='release'){print(bundledReleaseInfo(preset));return;}
71
+ const client=opts.client;
72
+ if(client!==undefined&&!CLIENTS.includes(client)) fail('UNSUPPORTED_CLIENT');
73
+ const home=path.resolve(opts.home??os.homedir());
74
+ const selectedState=opts['state-dir']??process.env.AGENT_POLICY_HOME??path.join(home,'.agent-policy-kit');
75
+ if(!path.isAbsolute(selectedState)) fail('STATE_PATH_MUST_BE_ABSOLUTE');
76
+ const stateDir=path.resolve(selectedState);
77
+ const builtin=path.join(root,`policies/${preset}.json`);
78
+ let policyPath=bundled?builtin:opts.policy?path.resolve(opts.policy):fs.existsSync(path.join(stateDir,'policy.json'))?path.join(stateDir,'policy.json'):builtin;
79
+ if(command==='detect'){print(summarizeDetection(client?[await resolveClient(client)]:await detectClients()));return;}
80
+ if(command==='init'){
81
+ if(!opts.policy) fail('POLICY_PATH_REQUIRED');
82
+ fs.mkdirSync(path.dirname(policyPath),{recursive:true,mode:0o700});
83
+ fs.writeFileSync(policyPath,JSON.stringify(loadPolicy(path.join(root,'policies/balanced.json')),null,2)+'\n',{flag:'wx',mode:0o600});
84
+ print({status:'created',schemaVersion:1});return;
85
+ }
86
+ if(command==='uninstall'){
87
+ const {uninstall,summarizePlan}=await import('../src/install.mjs');
88
+ const clients=client?[client]:CLIENTS.filter(c=>fs.existsSync(path.join(stateDir,'installations',c+'.json')));
89
+ const results=[];
90
+ for(const selected of clients){
91
+ try{const result=await uninstall({client:selected,home,stateDir,apply:opts.apply});results.push(opts.apply?result:summarizePlan(result));}
92
+ catch(error){results.push({client:selected,status:'error',error:safeCode(error.code)});}
93
+ }
94
+ const failed=results.some(r=>r.status==='error');
95
+ print(client&&!failed?results[0]:{schemaVersion:1,status:failed?'partial':clients.length?'completed':'not_installed',results});
96
+ if(failed) process.exitCode=3;
97
+ return;
98
+ }
99
+ if(command==='setup'||command==='install'){
100
+ let temporary;
101
+ try{
102
+ if(opts.config!==undefined||explicit){
103
+ let preferences;
104
+ if(explicit){try{preferences=validatePolicy(parseExplicitOptions(explicitValues,ROLE_IDS));}catch{fail('INVALID_EXPLICIT_CONFIG');}}
105
+ else try{
106
+ if(opts.config.length>87384||!/^[-_A-Za-z0-9]+$/.test(opts.config))throw new Error();
107
+ const bytes=Buffer.from(opts.config,'base64url');
108
+ if(bytes.length>65536||bytes.toString('base64url')!==opts.config)throw new Error();
109
+ preferences=validatePolicy(JSON.parse(bytes.toString('utf8')));
110
+ }catch{fail('INVALID_CONFIG');}
111
+ temporary=fs.mkdtempSync(path.join(fs.realpathSync(os.tmpdir()),'agent-policy-config-'));
112
+ policyPath=path.join(temporary,'preferences.json');
113
+ fs.writeFileSync(policyPath,JSON.stringify(preferences),{flag:'wx',mode:0o600});
114
+ }
115
+ const preferences=loadPolicy(policyPath);
116
+ const {setupDetected}=await import('../src/setup.mjs');
117
+ const result=await setupDetected({client:client??null,home,stateDir,policyPath,apply:opts.apply,explicitHome:Boolean(opts.home),
118
+ releaseVersion:version,replace:bundled||opts.config!==undefined||explicit,
119
+ preset:explicit||opts.config!==undefined||opts.policy||policyPath!==builtin?null:preset,
120
+ source:explicit||opts.config!==undefined||opts.policy?'custom':policyPath===builtin?'release':'saved',
121
+ enabledClients:Object.keys(preferences.clients)});
122
+ print(result);process.exitCode=result.exitCode;return;
123
+ }finally{if(temporary)fs.rmSync(temporary,{recursive:true,force:true});}
124
+ }
125
+ const {inspectConfiguration}=await import('../src/install.mjs');
126
+ const report={schemaVersion:1,mode:'configuration_only',version,clients:{}};
127
+ for(const selected of client?[client]:CLIENTS){
128
+ const detection=summarizeDetection([await resolveClient(selected)])[0];
129
+ let configuration={status:'not_configured'};
130
+ if(!opts.home&&nativeHomeConflict(selected,home,process.env)){
131
+ configuration={status:'attention',reason:'NATIVE_HOME_OVERRIDE_UNSUPPORTED'};
132
+ } else if(fs.existsSync(path.join(stateDir,'installations',selected+'.json'))){
133
+ try{configuration=await inspectConfiguration({client:selected,home,stateDir});}
134
+ catch(error){configuration={status:'attention',reason:safeCode(error.code)};}
135
+ }
136
+ report.clients[selected]={detection,configuration,modelExecution:'not_checked',
137
+ concurrency:['codex','claude'].includes(selected)?'native_setting_with_client_exceptions':'instructions_only',
138
+ models:selected==='agy'?'native_tiers':selected==='kimi'?'native_pool_with_routing_guidance':'native_role_settings'};
139
+ }
140
+ print(report);
141
+ }
142
+ main().catch(error=>{print({error:safeCode(error.code)});process.exitCode=1;});
@@ -0,0 +1,17 @@
1
+ # Architecture
2
+
3
+ APK runs only for configuration commands. It detects installed CLIs, reads release/custom preferences, writes native files and exits. Native agent operation never imports or launches APK.
4
+
5
+ One npm version is one configuration release. src/release.mjs exposes its presets, catalog date and notes. policies contains Fast/Balanced/Quality data; models/catalog.json is the dated native model/effort snapshot. The self-contained page is generated from that same version and data. src/explicit.mjs supplies the pure command codec to Node and is embedded in the page at build time. Commands always expand selected role values, even for presets. The CLI converts complete maps to normal validated policy. Required code/light fallbacks copy the first explicit role and are unused by the complete per-role map. No browser/backend/provider request is needed to compose a command.
6
+
7
+ src/share.mjs validates and encodes the visible form state into the URL fragment. It never runs native operations or stores clipboard history. The page restores only release-compatible state, then applies normal command validation.
8
+
9
+ src/roles.mjs supplies the shared role descriptions/prompts for the page and native generation. src/policy.mjs validates code/light defaults, optional selectedRoles and per-client role overrides. Native generation uses selected roles only. The first selected role in catalog order supplies the native subagent default. Effort null means no explicit pin. Documented levels depend on model and client. Selected Kimi aliases merge explicit effort and resolve only to provisioned entries. Ambiguity fails without writes.
10
+
11
+ The fixed native role filenames remain apk-worker/reviewer/explorer/tester/writer/routine. Their presence does not require delegation. The main agent decides whether helpers are useful; main models and disabled features are preserved.
12
+
13
+ Receipt v4 stores the selected role set, bounded ownership snapshots and actual release/source/preset provenance. It verifies that the owned file set matches selectedRoles. Inspection/removal checks old hashes, blocks and typed operations without current templates or catalog validation. Historical v3 and v2 native snapshots remain supported. v2 has unknown release provenance. Unsupported layouts/runtime receipts are refused.
14
+
15
+ Explicit replacement virtually undoes owned changes to the original user baseline, renders the target, and commits final changes against actual current preimages. The existing transaction protects complete read dependencies, locks, staging, rollback and competing edits. Final uninstall restores original user values and keeps unrelated later edits. Receipts are applied truth; canonical policy is the latest requested snapshot. Per-client partial outcomes are explicit.
16
+
17
+ There is one TOML parser dependency and no CLI compilation. The static page's data injection is a deterministic release-preparation step. Generated native files have no package/source/state dependency; npm package removal does not remove saved native settings.
@@ -0,0 +1,21 @@
1
+ # Native configuration support
2
+
3
+ | Client | Written native configuration | Limits |
4
+ |---|---|---|
5
+ | Codex | User role TOMLs, native subagent defaults/concurrency, routing instructions | Higher-priority project/explicit settings still follow Codex rules |
6
+ | Claude Code | User role Markdown with model/effort, native default/concurrency env, routing instructions | Force settings and native execution-path exceptions can override the intended mapping |
7
+ | Kimi Code | User role Markdown, existing secondary-model pool, per-alias effort, routing instructions | Model-role selection and max concurrency are guidance; provisioned aliases/capabilities are required |
8
+ | Antigravity | User role Markdown with Pro/Flash/Flash Lite/inherit tiers and routing instructions | No concrete provider pin, documented per-role effort, or universal native max-three cap |
9
+
10
+ These are preferences implemented through native features. APK does not participate in later agent operation and does not enforce policy on every request. avoidModels is guidance. No hook, wrapper or proxy is installed to bypass native limits.
11
+
12
+ Global configuration can be superseded by a project's native settings, session flags, environment or plugins. A fresh client session may be needed. Configured files, native loading and actual provider model execution are separate evidence.
13
+
14
+ macOS is the local acceptance host. Linux has a source-isolation gate using bubblewrap and a hosted workflow prepared; hosted runs are pending. Windows application is explicitly unsupported.
15
+
16
+ Primary references checked for this design:
17
+
18
+ - [Codex native subagents](https://learn.chatgpt.com/docs/agent-configuration/subagents).
19
+ - [Claude native subagents](https://code.claude.com/docs/en/sub-agents).
20
+ - [Kimi configuration](https://github.com/MoonshotAI/kimi-code/blob/main/docs/en/configuration/config-files.md) and [agent definitions](https://github.com/MoonshotAI/kimi-code/blob/main/docs/en/customization/agents.md).
21
+ - [Antigravity native subagents](https://antigravity.google/docs/subagents?tab=cli).
@@ -0,0 +1,38 @@
1
+ # Configuration page
2
+
3
+ Open site/index.html in Google Chrome. The page is one self-contained HTML file. It has no backend, telemetry, asset requests or native account access. It embeds this release's model catalog, presets, role definitions, getacc.dev palette and licensed Public Sans font.
4
+
5
+ ## Four steps
6
+
7
+ 1. Add the subagent roles you need. A green check confirms a nonempty role selection. Each question-mark button explains its description and native prompt. Removing a role also removes its configuration rows. Readding it preserves its choices in the current page session.
8
+ 2. Add your coding tools. A green check confirms a nonempty tool selection. New tools append to the list. The first becomes active. From the second onward, All is active by default. A manually selected tool or All stays active during later additions. All configures the selected tools together. The CLI, not the browser, detects which selected tools are installed.
9
+ 3. Choose a work mode. No mode is selected initially. Each selected tool needs a chosen mode before the command becomes available. The first choice has no replacement warning. Individual tools always show every selected role's model and supported effort. All offers shared presets. Custom can be selected manually and is also set by model or effort edits. Each tool shows its own mode beneath its name. Individual presets warn before changing that tool. Replacing genuinely edited values, mixed per-tool bases or partially chosen modes from All warns before changing all selected tools. Selecting Custom alone without changing values does not create an overwrite warning. Cancel preserves the choices.
10
+ 4. Copy the setup command and run it in a terminal. Incomplete selections identify the missing steps with links. Invalid model settings disable copying and clear the previous command. Clipboard failure selects the full command for manual copying.
11
+
12
+ The page starts empty. A completed third step requires selected modes and valid model settings. A fourth green check means the current command was successfully copied, not installed. Configuration changes clear that check; opening another tool without changing values preserves it. Reset form clears selections, modes, copy status and the URL fragment without changing any installed native files. Parallelism follows the release recommendation. Effort buttons fill their section and show supported explicit levels. A dash means no native effort setting. Unpinned values remain unpinned until changed. Kimi roles sharing a model alias share its effort. Antigravity offers only native tiers. Other tools also accept custom native model IDs, subject to CLI and account support.
13
+
14
+ The command is pinned to this page's package version. It always expands every selected tool and role into visible model/effort arguments. Presets fill the form but do not shorten or hide the command. Tools follow their selected order. --roles carries the selected role IDs and --max-concurrent carries the existing cap. Nonempty --avoid-TOOL lists preserve existing model-avoidance guidance. Omitted tools are not configured.
15
+
16
+ Each tool uses role=model:effort entries. :native means no explicit effort pin. Antigravity uses role=tier without an effort suffix. The parser splits at the last colon, preserving model IDs that contain colons or @. Every selected role must be present exactly once for every selected tool. The generated command reports custom provenance because its values are explicit, even when a preset filled the form.
17
+
18
+ The complete command is visible in a read-only field that grows to fit its contents. Copy preserves the visible POSIX shell line continuations. Soft wrapping adds no additional newlines. [Native field sizing](https://developer.chrome.com/docs/css-ui/css-field-sizing) handles content and window-size changes without a JavaScript resize helper. The page never executes the command or grants model access.
19
+
20
+ Role/tool changes use native View Transitions with a reduced-motion setting and a synchronous fallback. Section hints are conditional: role guidance after selection, add-more guidance for one tool, individual-configuration guidance for two or more tools, mode guidance when available, and Copied in the fourth heading. Changed hints, step markers, editing-scope labels and per-tool mode captions hold a soft highlight for two seconds, then fade for two seconds. Tool-caption nodes are reused so switching the editing view does not interrupt a pulse. Identical state does not repeat the animation. Labels retain their size during layout changes. No animation dependency is installed.
21
+
22
+ ## Share a setup
23
+
24
+ Each form edit replaces the current URL fragment with its visible state. Copy the page address to share it. The fragment contains roles, tool order, mode/base, selected model/effort pairs, cap and editing scope. It excludes clipboard completion and unselected cached choices. Opening a link restores the form, including unfinished choices and model drafts. Command validation still blocks incomplete or invalid settings.
25
+
26
+ src/share.mjs is the pure browser/Node codec. It uses versioned base64url JSON with strict IDs, fields, duplicate-key, size, UTF-8 and release checks. The fragment stays in the browser and needs no database or config lookup service. Invalid or mismatched-release links show an error and cannot produce an applicable command. Missing-step links scroll/focus without overwriting the setup fragment.
27
+
28
+ Public friend links require this static page to be hosted, for example on getacc.dev. A local file URL is machine-local; localhost acceptance proves restoration behavior, not public deployment. Each published release should retain its versioned page so old links can use the matching release.
29
+
30
+ ## Build and host
31
+
32
+ Run npm run build:site after changing the template, shared CSS, role definitions, command codec, version, presets, catalog or changelog. npm run check rejects a stale generated page. Source assets are in site/template.html, site/base.css and site/fonts/. src/explicit.mjs supplies the same pure codec to the CLI and page. The generated HTML needs no server or build step to open.
33
+
34
+ Serve site/index.html from any static host. It can become part of getacc.dev without a service or proxy. Publish immutable pages at versioned release paths. A latest landing URL can point to the current one. Set repository/homepage URLs only after the owner creates them.
35
+
36
+ The current version is unreleased. Its page labels that status. Before npm publication, use the verified local tarball as described in the [AI operator guide](../AGENT_INSTALL.md). The checks do not publish or deploy anything.
37
+
38
+ The introduction includes a collapsed “How it works and why you need it” explanation aligned with the README. Native details/summary supports keyboard toggling; opening/closing takes 200 ms and honors reduced motion. The hosted versioned URL preserves release-specific shared links.
@@ -0,0 +1,21 @@
1
+ # Development
2
+
3
+ Use Node.js 22.x (22.13+) or 24+ and npm. No build step is required.
4
+
5
+ ```sh
6
+ npm ci --ignore-scripts --no-audit --no-fund
7
+ npm run test:cache
8
+ npm run check
9
+ npm run test:unit
10
+ npm run test:package
11
+ ```
12
+
13
+ npm run test:cache primes public dependency metadata on a fresh machine before the offline tarball consumers run. It installs only into a disposable directory and removes it afterward. npm ci alone may cache tarballs without the registry metadata required by a new offline consumer.
14
+
15
+ npm test includes both unit tests and the installed-tarball gate. The gate needs macOS sandbox-exec or Linux bubblewrap. It must actually deny checkout access; unavailable isolation fails rather than skipping. Use a normal approved host if a managed sandbox forbids nesting.
16
+
17
+ src/policy.mjs validates shared preferences. src/detect.mjs probes executable identity. Native generation and the installer write ordinary role/config/instruction files. src/setup.mjs coordinates detected clients; bin/agent-policy.mjs exposes JSON configuration commands.
18
+
19
+ Test with temporary homes. Preserve existing transaction, complete-read-set, rollback, ownership, symlink and privacy checks. The package gate must remove the npm package after setup and verify standalone native configuration consumers still read files with no dependency on package/source/state. Consumer fixtures are not actual native model execution.
20
+
21
+ Do not reintroduce hooks, wrappers, plugins, daemons, runtime audits or package paths in generated settings. Receipts/backups belong only to configuration operations. See [support](compatibility.md), [verification](verification.md) and [release preparation](npm-release.md).
@@ -0,0 +1,15 @@
1
+ # Configuration commands
2
+
3
+ Follow the [AI operator guide](../AGENT_INSTALL.md). npx, a temporary prefix or an installed tarball can run this one-shot configurator. Native files never depend on those locations afterward.
4
+
5
+ Use setup --release --preset balanced to preview a version's default choices; add --apply to configure. Fast and Quality are alternative named presets. The [page](../site/index.html) generates either an exact named-preset command or a --config command for edited choices. Commands are pinned to that page's APK version.
6
+
7
+ Only genuine detected and selected clients receive files. A standard native profile is required for automatic setup; nondefault native-home environment roots get a zero-write prerequisite. Explicit --home selects the standard layout under an intentional target. Preserve original --home/--state-dir for later removal.
8
+
9
+ Named APK roles and a managed global instruction block configure optional delegation. Main models, credentials, permissions, disabled agent features and unrelated hooks/plugins/settings are preserved. Native capabilities still differ; see [support](compatibility.md).
10
+
11
+ Kimi requires provisioned model entries. A missing preferred catalog alias may resolve once to one unambiguous existing alias for the documented upstream model. No aliases/providers/credentials are invented. Actual alias effort capability and main-session behavior are checked before writes. Native model access is not granted by a dropdown.
12
+
13
+ Explicit release/custom replacement has no physical uninstall gap. Old ownership is verified, desired files are rendered over the original user baseline, and rollback protects the installed release. Doctor inspects actual applied version/source/preset without needing current presets or canonical preferences.
14
+
15
+ After success the npm package can be removed. Native clients may need fresh sessions; no kit launcher is needed. Reinvoke a compatible APK for owned uninstall. Keep private receipts/backups if future removal is desired. [Recovery](recovery.md) handles drift or interrupted transactions without overwriting later user edits.
@@ -0,0 +1,94 @@
1
+ # Model catalog and presets
2
+
3
+ models/catalog.json is the release snapshot, checked on 2026-10-30 UTC (2026-10-29 in Toronto). It records native selector IDs, effort levels, defaults and primary sources. The same data drives the page and configuration validation. Normal agent work never fetches this catalog.
4
+
5
+ | Tool | Current selectable inventory | Evidence |
6
+ |---|---|---|
7
+ | Codex | 9 visible model IDs | CLI 0.166.0 bundled catalog and [official models](https://learn.chatgpt.com/docs/models) |
8
+ | Claude Code | 14 versioned IDs, 4 family aliases and inherit | [Native model configuration](https://code.claude.com/docs/en/model-config), CLI 2.1.312 |
9
+ | Kimi Code | 6 upstream models through preferred native aliases | [Current Kimi Code models](https://www.kimi.com/code/docs/en/kimi-code/models), CLI 2.4.0 provisioned metadata |
10
+ | Antigravity | Pro, Flash, Flash Lite and inherit tiers | CLI 1.4.10 parser and [subagent documentation](https://antigravity.google/docs/subagents?tab=cli) |
11
+
12
+ Hidden security/utility models, session modes and private deployments are separate from this native subagent inventory. Custom IDs remain available where the native format supports them.
13
+
14
+ ## Kimi's six models
15
+
16
+ | Upstream ID | Native effort levels | Default | Role in this release |
17
+ |---|---|---|---|
18
+ | k3.1-pro | low / high / max | high | Optional flagship; Quality uses explicit max for code/review/tests |
19
+ | k3.1-pro-highspeed | low / high / max | high | Optional faster-output variant |
20
+ | k3 | low / high / max | high | Quality exploration/documentation |
21
+ | k3-256k | low / high / max | high | Balanced implementation/review/tests |
22
+ | kimi-for-coding | low / high / max | max | K2.8 Preview; Fast and lighter Balanced work |
23
+ | kimi-for-coding-highspeed | Fixed thinking; no effort override | Unpinned | Optional K2.7 Code Highspeed |
24
+
25
+ Both K3.1 Pro variants require thinking. Kimi documents approximately twice the quota usage for Pro Highspeed versus regular Pro; account tier controls access and context limits. The old kimi.ai/help page still lists only four IDs, so it is not the current inventory source. Native aliases use the kimi-code/ prefix; setup still requires an existing provisioned alias or a unique matching upstream model. It never creates provider credentials.
26
+
27
+ Setup refuses an explicit native thinking-disabled setting for either Pro model, including unpinned-effort requests. It leaves that setting intact rather than relying on undocumented force-on behavior.
28
+
29
+ ## Native and API capabilities
30
+
31
+ The efforts/defaultEffort fields describe native choices. Separate apiEfforts/apiDefaultEffort fields retain API facts where they differ. Codex 0.166.0 does not advertise none in its picker; this does not prove manual TOML rejection. APK conservatively offers and validates the advertised native subset for known IDs. Ultra is recorded separately as a delegating execution mode, not offered as an ordinary effort level.
32
+
33
+ Claude Code's native effort matrix omits Opus 4.5 even though its API supports effort. Its page choices therefore omit that override. Alias and inherit rows list possible requested levels; the resolved provider model can clamp or ignore them. Use a versioned ID for predictable model-specific capabilities. Sonnet 4.5 is deprecated on Anthropic-operated platforms, with retirement scheduled for 2026-11-30; partner schedules differ. See [model lifecycle](https://platform.claude.com/docs/en/about-claude/model-deprecations).
34
+
35
+ Antigravity's shared documentation has a narrower App table, but the installed CLI 1.4.10 parser explicitly supports flash_lite too. Its wider session model inventory cannot be pinned through the role tier field. Per-role effort is unavailable.
36
+
37
+ Account/provider access varies. Custom model IDs remain available for supported native fields. Antigravity accepts only inherit/flash_lite/flash/pro for the native role model field; its broader session model inventory cannot be pinned through this field. Per-role effort is unavailable there. Claude aliases may resolve differently per provider. Unknown defaults are kept as null rather than invented.
38
+
39
+ ## How the presets are designed
40
+
41
+ These are starting recommendations for different priorities, reviewed on 2026-10-30. No comparative task benchmark was run. The four vendors' effort labels and subscription usage are not directly comparable.
42
+
43
+ - **Fast & economical:** bounded tasks on lighter models. Reviews and test creation receive extra reasoning because checking edge cases differs from executing known steps. Kimi uses one efficient alias at one coherent effort; Antigravity uses Flash for code and Flash Lite for lighter work.
44
+ - **Balanced:** stronger implementation, review and test creation, with lighter fact gathering and mechanical work. Kimi uses K3 256K for code to keep its quota footprint below the full-context K3 variant; larger-context choices remain editable.
45
+ - **Quality first:** demanding implementation, review and tests get frontier models and deeper supported reasoning. Exploration, documentation and mechanical steps use choices suited to those roles rather than automatically selecting the largest model everywhere. Kimi keeps one effort per shared alias; Pro max is reserved for code/review/tests, while K3 handles exploration and docs at high effort.
46
+
47
+ No preset bans any model. An unselected model remains available in Custom. Explicit personal avoid lists are still supported in user policy/CLI input. The shared concurrency ceiling of three is a modest operational default, not a claim that a particular parallelism level improves quality; native enforcement varies by client.
48
+
49
+ ### Fast & economical
50
+
51
+ | Role | Codex | Claude Code | Kimi Code | Antigravity |
52
+ |---|---|---|---|---|
53
+ | Coder | Luna · medium | Haiku 5.5 · medium | K2.8 Preview · low | Flash |
54
+ | Reviewer | Luna · high | Haiku 5.5 · high | K2.8 Preview · low | Flash |
55
+ | Code explorer | Luna · low | Haiku 5.5 · low | K2.8 Preview · low | Flash Lite |
56
+ | Test writer | Luna · high | Haiku 5.5 · high | K2.8 Preview · low | Flash |
57
+ | Docs writer | Luna · low | Haiku 5.5 · low | K2.8 Preview · low | Flash Lite |
58
+ | Task runner | Luna · low | Haiku 5.5 · low | K2.8 Preview · low | Flash Lite |
59
+
60
+ ### Balanced
61
+
62
+ | Role | Codex | Claude Code | Kimi Code | Antigravity |
63
+ |---|---|---|---|---|
64
+ | Coder | Sol · medium | Sonnet 5.5 · medium | K3 256K · high | Pro |
65
+ | Reviewer | Sol · high | Sonnet 5.5 · high | K3 256K · high | Pro |
66
+ | Code explorer | Luna · high | Haiku 5.5 · medium | K2.8 Preview · low | Flash |
67
+ | Test writer | Sol · high | Sonnet 5.5 · high | K3 256K · high | Pro |
68
+ | Docs writer | Sol · medium | Sonnet 5.5 · medium | K2.8 Preview · low | Flash |
69
+ | Task runner | Luna · low | Haiku 5.5 · low | K2.8 Preview · low | Flash Lite |
70
+
71
+ ### Quality first
72
+
73
+ | Role | Codex | Claude Code | Kimi Code | Antigravity |
74
+ |---|---|---|---|---|
75
+ | Coder | Astra · xhigh | Fable 5.1 · xhigh | K3.1 Pro · max | Pro |
76
+ | Reviewer | Astra · xhigh | Fable 5.1 · xhigh | K3.1 Pro · max | Pro |
77
+ | Code explorer | Sol · high | Opus 5.5 · high | K3 · high | Pro |
78
+ | Test writer | Astra · xhigh | Fable 5.1 · xhigh | K3.1 Pro · max | Pro |
79
+ | Docs writer | Sol · high | Opus 5.5 · high | K3 · high | Pro |
80
+ | Task runner | Sol · medium | Sonnet 5.5 · medium | K2.8 Preview · high | Flash |
81
+
82
+ ## Reasons and access requirements
83
+
84
+ OpenAI positions Astra for demanding work, Sol for a capability/usage balance and Luna for focused efficient work. Its [selection guidance](https://developers.openai.com/api/docs/guides/model-selection) treats these as starting points to evaluate on representative tasks. APK's Codex effort values still follow the native CLI catalog, not API-only options.
85
+
86
+ Anthropic's [model comparison](https://platform.claude.com/docs/en/models/overview) distinguishes Fable, Opus, Sonnet and Haiku by workload and latency. Versioned IDs freeze the recommendation more precisely than moving family aliases. [Claude Code](https://code.claude.com/docs/en/model-config) supports the selected levels and warns of diminishing returns at max. Fable 5.1 requires CLI 2.1.257+ and may consume usage credits depending on the plan. Some non-interactive native paths bill those credits without a consent prompt; APK does not change billing settings or promise a later confirmation. Use Custom to choose another available model.
87
+
88
+ [Kimi's model table](https://www.kimi.com/code/docs/en/kimi-code/models.html) describes K2.8 Preview's efficient thinking and the smaller quota footprint of K3 256K. Pro Highspeed has the same capabilities as regular Pro at a quota premium, so it is optional rather than a default for either economical or quality priorities. Selected aliases must be provisioned and Pro must have thinking enabled. Roles sharing one alias share its native effort setting.
89
+
90
+ Antigravity recommendations use only its native role tiers. The CLI's Pro/Flash/Flash Lite selectors do not freeze the underlying provider model, and there is no per-role effort field. Account access and native precedence still apply; see [support](compatibility.md).
91
+
92
+ Native default effort means no explicit override. Unsupported effort fields are omitted. Explicit levels are filtered by model and native client; Kimi additionally checks provisioned support_efforts. It never silently changes the main agent's effort to satisfy a helper's setting.
93
+
94
+ For the next release, review the native catalogs and current official docs, update sources/date/data, explain model/task/effort changes in CHANGELOG.md, regenerate the page and rerun configuration/release tests. A configuration test is not a model-quality benchmark. See [maintenance](model-updates.md) and [release preparation](npm-release.md).