@tangle-network/agent-interface 2.17.0 → 2.19.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.
- package/README.md +41 -4
- package/dist/agent-profile-measurements.d.ts +57 -0
- package/dist/agent-profile-measurements.js +80 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/profile-kb/entry.d.ts +12 -0
- package/dist/profile-kb/entry.js +20 -0
- package/dist/profile-kb/harnesses.d.ts +1 -7
- package/dist/profile-kb/harnesses.js +66 -105
- package/dist/profile-kb/index.d.ts +2 -2
- package/dist/profile-kb/index.js +4 -4
- package/dist/profile-kb/models.d.ts +1 -7
- package/dist/profile-kb/models.js +161 -311
- package/dist/profile-kb/records.d.ts +2 -2
- package/dist/profile-kb/records.js +12 -10
- package/dist/profile-kb/types.d.ts +18 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,6 +5,20 @@ agents, the sidecar, and provider adapters: capabilities, agent profiles,
|
|
|
5
5
|
message parts, and harness descriptors. This is the canonical home for those
|
|
6
6
|
shapes; higher-level packages import from here rather than redefining them.
|
|
7
7
|
|
|
8
|
+
## Profile measurements
|
|
9
|
+
|
|
10
|
+
`measureAgentProfile(profile)` returns the canonical profile digest and JSON byte size,
|
|
11
|
+
per-prompt and inline resource UTF-8 bytes and logical lines, enabled/disabled tool and
|
|
12
|
+
MCP declarations, and declared subagent counts. Resource rows use JSON Pointers;
|
|
13
|
+
GitHub resource content has `bytes: null` and `lines: null` until independently resolved.
|
|
14
|
+
The summary contains no prompt text, resource text, or server configuration.
|
|
15
|
+
|
|
16
|
+
Store it with the existing profile record and cache by `profileDigest`. Measure authored
|
|
17
|
+
and effective profiles separately, joined through their execution preparation or
|
|
18
|
+
materialization receipts. The function does not load resources or estimate tokens.
|
|
19
|
+
Its coverage explicitly leaves tokenization, materialization, and observed use unassessed.
|
|
20
|
+
A capability declaration is not evidence that it was delivered, opened, or applied.
|
|
21
|
+
|
|
8
22
|
## Agent instances
|
|
9
23
|
|
|
10
24
|
`AgentProfile` describes behavior. `AgentInstanceSpec` describes one optional managed Agent inside an existing execution environment. The environment remains the computer and security boundary, so it may host zero, one, or many Agent instances.
|
|
@@ -180,9 +194,15 @@ These checks do not apply to a replacement environment owned by caller code.
|
|
|
180
194
|
|
|
181
195
|
## Profile knowledge base
|
|
182
196
|
|
|
183
|
-
`@tangle-network/agent-interface/profile-kb` holds
|
|
184
|
-
|
|
185
|
-
|
|
197
|
+
`@tangle-network/agent-interface/profile-kb` holds dated harness and model facts, conditional guidance, and reproduced platform learnings.
|
|
198
|
+
Sources guide investigation; they do not prove that a technique improves this platform's behavior.
|
|
199
|
+
|
|
200
|
+
Entries can expose optional `claims`, each with `text`, `basis` (`documented`, `vendor-guidance`, `local-observation`, or `hypothesis`), `audience` (`agent` or `operator`), and supporting `sources`.
|
|
201
|
+
A source has a URL and check date, with optional `authority` (`primary`, `secondary`, or `local`) and `locator` for the supporting section or artifact.
|
|
202
|
+
Authority describes the source, independently of the claim's basis.
|
|
203
|
+
The maintained entries derive the legacy `prompt`, `operator`, and `sources` arrays from these claims; hypotheses stay inspectable but contribute no prompt or operator text.
|
|
204
|
+
Only agent guidance enters the profile prompt. An empty `prompt` is legitimate when no supported instruction is needed; do not pad it with generic advice.
|
|
205
|
+
Keep applicability conditions in the claim's text so composition preserves them.
|
|
186
206
|
|
|
187
207
|
`withProfileKb(profile)` composes harness guidance, then model guidance, then the profile's own text into the profile's prompt:
|
|
188
208
|
|
|
@@ -203,7 +223,24 @@ The knowledge base owns the block sources `harness`, `model`, and `learning` (`P
|
|
|
203
223
|
Give each layer its own source name and pass it as `replaceSources`: the composition then replaces only those sources and keeps every other block in place. Without `replaceSources`, it replaces every block.
|
|
204
224
|
The block marker is reserved for composers: a hand-written `<profile-guidance source="model" ...>` block counts as a knowledge-base block and is replaced.
|
|
205
225
|
|
|
206
|
-
The module also exports the data (`profileKbHarnesses`, `profileKbModels`), operator notes
|
|
226
|
+
The module also exports the data (`profileKbHarnesses`, `profileKbModels`), operator notes, platform learnings (admitted only after an agent-eval check reproduced them), and `profileKbDiscrepancies`, which preserves dated naming and availability checks.
|
|
227
|
+
The source audit is retained in [Anthropic and OpenAI](src/profile-kb/research/anthropic-openai.md), [open harnesses and model APIs](src/profile-kb/research/open-harnesses.md), and the [distillation and consumer review](src/profile-kb/research/distillation-review.md).
|
|
228
|
+
|
|
229
|
+
### Applicability and evidence
|
|
230
|
+
|
|
231
|
+
Read vendor guidance within its documented, dated scope. Papers and social posts propose hypotheses to evaluate; they do not establish universal agent constraints. A measured conclusion applies to the configuration, tasks, environment, and evidence that supported it.
|
|
232
|
+
|
|
233
|
+
Keep that scope with the existing evaluation record and link it from the learning's evidence source:
|
|
234
|
+
|
|
235
|
+
- Requested model and observed served identity, provider route and adapter revision, harness and CLI version, and the authored and effective `AgentProfile` revisions or digests.
|
|
236
|
+
- Reasoning settings, tool, MCP server and hook versions or definitions, permissions, and the loaded skill and instruction revisions. Distinguish declared configuration from observed delivery and use.
|
|
237
|
+
- Task and acceptance-check revisions, environment and relevant resource limits, sampling and budget, measured outcome, errors and counterexamples, and source traces or artifacts.
|
|
238
|
+
|
|
239
|
+
Unknown identity, usage, or cost stays unknown. A requested model name does not prove which model served the run; partial accounting supports a floor, not a complete total or zero spend.
|
|
240
|
+
|
|
241
|
+
Before reusing a conclusion after a material change to any of these conditions, review its applicability against the retained evidence. State what still transfers and what needs a new check; use the existing registration and resource authorization for any experiment. Preserve the original record and append the changed scope or new evidence.
|
|
242
|
+
|
|
243
|
+
The current [learning selector](src/profile-kb/index.ts) matches only harness and model; it does not validate the other conditions above. Keep narrower limits explicit in the learning text, or retain the finding in its evaluation record until it is suitable for composed guidance. The [learning records](src/profile-kb/records.ts) remain the single admission surface. Claim provenance does not automatically revalidate a run or authorize an experiment.
|
|
207
244
|
|
|
208
245
|
## Failed execution accounting
|
|
209
246
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Sha256Digest } from "./agent-candidate.js";
|
|
2
|
+
import type { AgentProfile } from "./agent-profile.js";
|
|
3
|
+
/** UTF-8 source bytes and logical lines, without normalizing the supplied text. */
|
|
4
|
+
export interface AgentProfileTextMeasurement {
|
|
5
|
+
/** RFC 6901 pointer into the measured profile. */
|
|
6
|
+
readonly path: string;
|
|
7
|
+
readonly bytes: number;
|
|
8
|
+
/** Empty text has zero lines; a final line terminator adds no empty line. */
|
|
9
|
+
readonly lines: number;
|
|
10
|
+
}
|
|
11
|
+
/** A resource declaration; external content has no measured size until resolved. */
|
|
12
|
+
export interface AgentProfileResourceMeasurement {
|
|
13
|
+
/** RFC 6901 pointer to the resource or string instruction declaration. */
|
|
14
|
+
readonly path: string;
|
|
15
|
+
readonly kind: "inline" | "github";
|
|
16
|
+
readonly name?: string;
|
|
17
|
+
readonly bytes: number | null;
|
|
18
|
+
readonly lines: number | null;
|
|
19
|
+
}
|
|
20
|
+
/** Explicit capability declarations, independent of what a harness actually serves. */
|
|
21
|
+
export interface AgentProfileCapabilityCounts {
|
|
22
|
+
readonly declared: number;
|
|
23
|
+
readonly enabled: number;
|
|
24
|
+
readonly disabled: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Content-free measurements of one exact AgentProfile value. Apply separately
|
|
28
|
+
* to authored and effective profiles, linked by their existing receipt digests.
|
|
29
|
+
* This declaration neither proves materialization nor observes capability use.
|
|
30
|
+
*/
|
|
31
|
+
export interface AgentProfileMeasurements {
|
|
32
|
+
readonly version: 1;
|
|
33
|
+
readonly basis: "profile-declaration";
|
|
34
|
+
readonly profileDigest: Sha256Digest;
|
|
35
|
+
/** Bytes of canonical profile JSON, not mounted context or billed input tokens. */
|
|
36
|
+
readonly canonicalBytes: number;
|
|
37
|
+
readonly prompt: readonly AgentProfileTextMeasurement[];
|
|
38
|
+
readonly tools: AgentProfileCapabilityCounts;
|
|
39
|
+
readonly mcp: AgentProfileCapabilityCounts;
|
|
40
|
+
readonly subagents: {
|
|
41
|
+
readonly declared: number;
|
|
42
|
+
};
|
|
43
|
+
readonly resources: readonly AgentProfileResourceMeasurement[];
|
|
44
|
+
readonly coverage: {
|
|
45
|
+
readonly tokens: "not-measured";
|
|
46
|
+
readonly materialization: "not-assessed";
|
|
47
|
+
readonly usage: "not-assessed";
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Measure a canonical profile without resolving resources, reading files, or
|
|
52
|
+
* estimating tokens. Validates the same public profile contract used for
|
|
53
|
+
* identity. Cache by profileDigest; requesting another summary needs no scan.
|
|
54
|
+
* Results preserve declaration order and contain no prompt/resource content,
|
|
55
|
+
* server configuration, permission values, or secret references.
|
|
56
|
+
*/
|
|
57
|
+
export declare function measureAgentProfile(profile: AgentProfile): AgentProfileMeasurements;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { canonicalAgentProfileDigest } from "./agent-execution-preparation.js";
|
|
2
|
+
import { canonicalAgentProfileJson } from "./agent-profile-canonical.js";
|
|
3
|
+
import { agentProfileSchema } from "./profile-schema.js";
|
|
4
|
+
const utf8 = new TextEncoder();
|
|
5
|
+
function textMeasurement(path, text) {
|
|
6
|
+
const breaks = text.match(/\r\n|\r|\n/g)?.length ?? 0;
|
|
7
|
+
return {
|
|
8
|
+
path,
|
|
9
|
+
bytes: utf8.encode(text).byteLength,
|
|
10
|
+
lines: text.length === 0 ? 0 : breaks + (/[\r\n]$/.test(text) ? 0 : 1),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function resourceMeasurement(path, resource) {
|
|
14
|
+
const text = resource.kind === "inline"
|
|
15
|
+
? textMeasurement(path, resource.content)
|
|
16
|
+
: undefined;
|
|
17
|
+
return {
|
|
18
|
+
path,
|
|
19
|
+
kind: resource.kind,
|
|
20
|
+
...(resource.name === undefined ? {} : { name: resource.name }),
|
|
21
|
+
bytes: text?.bytes ?? null,
|
|
22
|
+
lines: text?.lines ?? null,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function capabilityCounts(enabled) {
|
|
26
|
+
const count = enabled.filter(Boolean).length;
|
|
27
|
+
return { declared: enabled.length, enabled: count, disabled: enabled.length - count };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Measure a canonical profile without resolving resources, reading files, or
|
|
31
|
+
* estimating tokens. Validates the same public profile contract used for
|
|
32
|
+
* identity. Cache by profileDigest; requesting another summary needs no scan.
|
|
33
|
+
* Results preserve declaration order and contain no prompt/resource content,
|
|
34
|
+
* server configuration, permission values, or secret references.
|
|
35
|
+
*/
|
|
36
|
+
export function measureAgentProfile(profile) {
|
|
37
|
+
const value = agentProfileSchema.parse(profile);
|
|
38
|
+
const profileDigest = canonicalAgentProfileDigest(value);
|
|
39
|
+
const canonical = canonicalAgentProfileJson(value);
|
|
40
|
+
const prompt = [];
|
|
41
|
+
for (const key of ["systemPrompt", "appendSystemPrompt"]) {
|
|
42
|
+
const text = value.prompt?.[key];
|
|
43
|
+
if (text !== undefined)
|
|
44
|
+
prompt.push(textMeasurement(`/prompt/${key}`, text));
|
|
45
|
+
}
|
|
46
|
+
value.prompt?.instructions?.forEach((text, index) => {
|
|
47
|
+
prompt.push(textMeasurement(`/prompt/instructions/${index}`, text));
|
|
48
|
+
});
|
|
49
|
+
const resources = [];
|
|
50
|
+
value.resources?.files?.forEach((file, index) => {
|
|
51
|
+
resources.push(resourceMeasurement(`/resources/files/${index}/resource`, file.resource));
|
|
52
|
+
});
|
|
53
|
+
for (const group of ["tools", "skills", "agents", "commands"]) {
|
|
54
|
+
value.resources?.[group]?.forEach((resource, index) => {
|
|
55
|
+
resources.push(resourceMeasurement(`/resources/${group}/${index}`, resource));
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
const instructions = value.resources?.instructions;
|
|
59
|
+
if (instructions !== undefined) {
|
|
60
|
+
resources.push(typeof instructions === "string"
|
|
61
|
+
? { kind: "inline", ...textMeasurement("/resources/instructions", instructions) }
|
|
62
|
+
: resourceMeasurement("/resources/instructions", instructions));
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
version: 1,
|
|
66
|
+
basis: "profile-declaration",
|
|
67
|
+
profileDigest,
|
|
68
|
+
canonicalBytes: utf8.encode(canonical).byteLength,
|
|
69
|
+
prompt,
|
|
70
|
+
tools: capabilityCounts(Object.values(value.tools ?? {})),
|
|
71
|
+
mcp: capabilityCounts(Object.values(value.mcp ?? {}).map((server) => server.enabled !== false)),
|
|
72
|
+
subagents: { declared: Object.keys(value.subagents ?? {}).length },
|
|
73
|
+
resources,
|
|
74
|
+
coverage: {
|
|
75
|
+
tokens: "not-measured",
|
|
76
|
+
materialization: "not-assessed",
|
|
77
|
+
usage: "not-assessed",
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export * from "./agent-instance.js";
|
|
|
31
31
|
export * from "./agent-profile-snapshot.js";
|
|
32
32
|
export * from "./agent-profile-activation.js";
|
|
33
33
|
export * from "./agent-profile-materialization.js";
|
|
34
|
+
export * from "./agent-profile-measurements.js";
|
|
34
35
|
export * from "./agent-execution-preparation.js";
|
|
35
36
|
export * from "./agent-workspace-lease.js";
|
|
36
37
|
export * from "./certified-context.js";
|
package/dist/index.js
CHANGED
|
@@ -29,6 +29,7 @@ export * from "./agent-instance.js";
|
|
|
29
29
|
export * from "./agent-profile-snapshot.js";
|
|
30
30
|
export * from "./agent-profile-activation.js";
|
|
31
31
|
export * from "./agent-profile-materialization.js";
|
|
32
|
+
export * from "./agent-profile-measurements.js";
|
|
32
33
|
export * from "./agent-execution-preparation.js";
|
|
33
34
|
export * from "./agent-workspace-lease.js";
|
|
34
35
|
export * from "./certified-context.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ProfileKbClaim, ProfileKbSource, ProfileKbSurface } from "./types.js";
|
|
2
|
+
export declare function claim(text: string, source: ProfileKbSource, basis?: ProfileKbClaim["basis"], audience?: ProfileKbClaim["audience"]): ProfileKbClaim;
|
|
3
|
+
/** Keep public string arrays and entry citations derived from the same claim records. */
|
|
4
|
+
export declare function kbEntry<const T extends {
|
|
5
|
+
claims: ProfileKbClaim[];
|
|
6
|
+
surfaces?: ProfileKbSurface[];
|
|
7
|
+
aliases?: string[];
|
|
8
|
+
}>(entry: T): T & {
|
|
9
|
+
sources: ProfileKbSource[];
|
|
10
|
+
prompt: string[];
|
|
11
|
+
operator: string[];
|
|
12
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export function claim(text, source, basis = "documented", audience = "operator") {
|
|
2
|
+
return { text, basis, audience, sources: [source] };
|
|
3
|
+
}
|
|
4
|
+
/** Keep public string arrays and entry citations derived from the same claim records. */
|
|
5
|
+
export function kbEntry(entry) {
|
|
6
|
+
const sources = new Map();
|
|
7
|
+
for (const claim of entry.claims) {
|
|
8
|
+
for (const source of claim.sources)
|
|
9
|
+
sources.set(JSON.stringify(source), source);
|
|
10
|
+
}
|
|
11
|
+
const textFor = (audience) => entry.claims
|
|
12
|
+
.filter((claim) => claim.audience === audience && claim.basis !== "hypothesis")
|
|
13
|
+
.map((claim) => claim.text);
|
|
14
|
+
return {
|
|
15
|
+
...entry,
|
|
16
|
+
sources: [...sources.values()],
|
|
17
|
+
prompt: textFor("agent"),
|
|
18
|
+
operator: textFor("operator"),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
1
|
import type { ProfileKbHarness } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* The frontier coding harnesses this platform runs, checked against the
|
|
4
|
-
* installed CLI on 2026-09-22.
|
|
5
|
-
*
|
|
6
|
-
* `prompt` lines go into the agent's prompt; `operator` lines are launch
|
|
7
|
-
* facts. Each harness is described on its own terms.
|
|
8
|
-
*/
|
|
2
|
+
/** Source-qualified launch knowledge; versions describe checked sources, not every host's installation. */
|
|
9
3
|
export declare const profileKbHarnesses: readonly ProfileKbHarness[];
|
|
@@ -1,123 +1,84 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { claim, kbEntry } from "./entry.js";
|
|
2
|
+
const CHECKED = "2026-10-04";
|
|
3
|
+
const source = (url, locator) => ({
|
|
4
|
+
url,
|
|
5
|
+
locator,
|
|
6
|
+
checkedAt: CHECKED,
|
|
7
|
+
authority: "primary",
|
|
8
|
+
});
|
|
9
|
+
const claudeCli = source("https://code.claude.com/docs/en/cli-reference", "CLI flags: --print, --bg, --bare, system prompt flags");
|
|
10
|
+
const claudeAgents = source("https://code.claude.com/docs/en/sub-agents", "How subagents work; forked subagents");
|
|
11
|
+
const codexConfig = source("https://learn.chatgpt.com/docs/config-file/config-reference", "model_instructions_file; model_reasoning_effort");
|
|
12
|
+
const codexAgents = source("https://learn.chatgpt.com/docs/agent-configuration/subagents", "Availability; approvals and sandbox controls");
|
|
13
|
+
const codexCommands = source("https://learn.chatgpt.com/docs/developer-commands", "Set or view a task goal with /goal");
|
|
14
|
+
const piBase = "https://github.com/earendil-works/pi/blob/200387122ca450d6387f033949423114a270b96c/packages/coding-agent/";
|
|
15
|
+
const piCli = source(`${piBase}docs/cli.md`, "Invocation and output; models; prompts and process");
|
|
16
|
+
const piRpc = source(`${piBase}docs/rpc.md#run-lifecycle`, "Run lifecycle");
|
|
17
|
+
const piCommands = source(`${piBase}docs/rpc-commands.md`, "steer; follow_up; get_available_thinking_levels");
|
|
18
|
+
const opencodeCli = source("https://opencode.ai/docs/cli/", "run; serve; acp");
|
|
19
|
+
const opencodePrompt = source("https://github.com/anomalyco/opencode/blob/907b3bc518fa48e90e8ec24dd327d13eee71c36c/packages/opencode/src/session/llm/request.ts#L51-L70", "LLMRequestPrep.prepare");
|
|
20
|
+
const kimiCli = source("https://moonshotai.github.io/kimi-code/en/reference/kimi-command.html", "Flag conflict rules; non-interactive execution");
|
|
21
|
+
const kimiConfig = source("https://moonshotai.github.io/kimi-code/en/configuration/config-files.html", "Config file location; thinking; complete example");
|
|
22
|
+
/** Source-qualified launch knowledge; versions describe checked sources, not every host's installation. */
|
|
9
23
|
export const profileKbHarnesses = [
|
|
10
|
-
{
|
|
24
|
+
kbEntry({
|
|
11
25
|
id: "claude-code",
|
|
12
26
|
name: "Claude Code",
|
|
13
|
-
version: "2.1.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
],
|
|
21
|
-
prompt: [
|
|
22
|
-
"Delegate independent slices to subagents, several in one turn so they run in parallel, then synthesize their results.",
|
|
23
|
-
"Use the skills listed in your session for procedures they cover.",
|
|
24
|
-
"Run long commands in the background and keep working while they finish.",
|
|
27
|
+
version: "2.1.289",
|
|
28
|
+
claims: [
|
|
29
|
+
claim("For a non-forked subagent, supply the context needed for its task; forked subagents inherit the parent conversation.", claudeAgents, "documented", "agent"),
|
|
30
|
+
claim("Headless: claude -p <prompt> --model <id> --effort <level> --output-format stream-json --verbose. --bg is a separate background-session mode and cannot combine with -p.", claudeCli),
|
|
31
|
+
claim("--append-system-prompt adds to the default; --system-prompt replaces it. On resume, prompt changes may wait for compaction.", claudeCli),
|
|
32
|
+
claim("--bare skips automatic discovery; explicitly supplied context can still load. It is not an established speed improvement for this workload.", claudeCli),
|
|
33
|
+
claim("--max-budget-usd caps the print invocation's spend, excluding restored prior spend; --json-schema constrains output structure, not correctness.", claudeCli),
|
|
25
34
|
],
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"`--append-system-prompt` adds to the built-in prompt; `--system-prompt` replaces it.",
|
|
29
|
-
"`--max-budget-usd` caps spend; `--json-schema` validates structured output; `--mcp-config` loads MCP servers.",
|
|
30
|
-
"`--bg` starts a background session; `--bare` skips hooks, plugins, memory, and CLAUDE.md discovery.",
|
|
31
|
-
],
|
|
32
|
-
},
|
|
33
|
-
{
|
|
35
|
+
}),
|
|
36
|
+
kbEntry({
|
|
34
37
|
id: "codex",
|
|
35
38
|
name: "Codex CLI",
|
|
36
|
-
version: "0.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
url: "cli:codex exec --help; codex features list",
|
|
39
|
+
version: "0.160.0",
|
|
40
|
+
claims: [
|
|
41
|
+
claim("Observed on the Mac: codex exec <prompt> -m <model> -c model_reasoning_effort=<level> --json -o <file>; --output-schema, review, resume and fork are available.", {
|
|
42
|
+
url: "cli:codex --version; codex exec --help",
|
|
41
43
|
checkedAt: CHECKED,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"Carry the task end to end in this turn: gather context, implement, run the checks, and report the evidence.",
|
|
44
|
+
authority: "local",
|
|
45
|
+
locator: "Codex 0.160.0, Mac; research/anthropic-openai.md#local-codex-catalog-evidence",
|
|
46
|
+
}, "local-observation"),
|
|
47
|
+
claim("model_instructions_file replaces model instructions. Reasoning support is model/client-specific; a requested effort does not establish the effective effort.", codexConfig),
|
|
48
|
+
claim("Current local Codex spawns subagents after a direct request or applicable project/skill instruction. Enabled features do not establish tool exposure in another integration.", codexAgents),
|
|
49
|
+
claim("/goal tracks an interactive objective; it does not establish recovery across host or process restarts.", codexCommands),
|
|
49
50
|
],
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"`--output-schema <file>` enforces structured output. `codex review` runs a non-interactive review.",
|
|
53
|
-
"Reasoning levels are per model; read them from `$CODEX_HOME/models_cache.json`.",
|
|
54
|
-
"System-prompt replacement uses the `model_instructions_file` config key; standing instructions go in AGENTS.md.",
|
|
55
|
-
"`/goal` runs long unattended work; `resume` and `fork` continue a session.",
|
|
56
|
-
],
|
|
57
|
-
},
|
|
58
|
-
{
|
|
51
|
+
}),
|
|
52
|
+
kbEntry({
|
|
59
53
|
id: "opencode",
|
|
60
54
|
name: "OpenCode",
|
|
61
|
-
version: "1.18.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
prompt: [
|
|
67
|
-
"Delegate a focused subtask to a named agent when its persona or model fits the subtask.",
|
|
68
|
-
"Use the mounted MCP tools for external actions.",
|
|
69
|
-
],
|
|
70
|
-
operator: [
|
|
71
|
-
"Headless: `opencode run <message> -m <provider/model> --agent <name> --variant <effort> --format json`.",
|
|
72
|
-
"Standing text goes through `instructions` files or appended system text; the built-in prompt stays in place.",
|
|
73
|
-
"`opencode serve` with `run --attach <url>`, or `opencode acp`, gives a parent live control.",
|
|
55
|
+
version: "1.18.34",
|
|
56
|
+
claims: [
|
|
57
|
+
claim("Headless: opencode run <message> -m <provider/model> --agent <name> --variant <variant> --format json. Variants are provider-specific.", opencodeCli),
|
|
58
|
+
claim("A configured agent.prompt replaces the provider prompt before system/user additions; plugins can transform it further. Do not assume the provider prompt is retained.", opencodePrompt),
|
|
59
|
+
claim("serve exposes an HTTP API, run --attach reuses that server, and acp exposes an IDE protocol; these capabilities do not establish a particular parent adapter's support.", opencodeCli),
|
|
74
60
|
],
|
|
75
|
-
},
|
|
76
|
-
{
|
|
61
|
+
}),
|
|
62
|
+
kbEntry({
|
|
77
63
|
id: "pi",
|
|
78
64
|
name: "Pi",
|
|
79
|
-
version: "0.
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
{
|
|
86
|
-
url: "https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/rpc.md",
|
|
87
|
-
checkedAt: CHECKED,
|
|
88
|
-
},
|
|
89
|
-
{ url: "cli:pi --help", checkedAt: CHECKED, note: "0.87.1" },
|
|
90
|
-
],
|
|
91
|
-
prompt: [
|
|
92
|
-
"Expect steering messages mid-run and fold each one into the current plan.",
|
|
93
|
-
"Fan out independent work by running `pi -p <task> --mode json` from bash, several at once, and read the results back.",
|
|
94
|
-
],
|
|
95
|
-
operator: [
|
|
96
|
-
"Headless: `pi -p <prompt> --model <provider/id[:thinking]> --mode json`.",
|
|
97
|
-
"`--mode rpc` takes JSONL commands on stdin (steer, follow-up, set model, compact, fork) for live control.",
|
|
98
|
-
"`--thinking` takes off, minimal, low, medium, high, xhigh, or max.",
|
|
99
|
-
"`--system-prompt` replaces the default; `--append-system-prompt` adds to it.",
|
|
65
|
+
version: "1.0.2",
|
|
66
|
+
claims: [
|
|
67
|
+
claim("Headless: pi -p <prompt> --model <provider/id[:thinking]> --mode json. Model arguments can fuzzy-match; inspect the selected identity. --thinking clamps to model capability.", piCli),
|
|
68
|
+
claim("--system-prompt replaces the default; --append-system-prompt adds to it. JSON mode exits after supplied prompts; RPC stays alive on stdin/stdout.", piCli),
|
|
69
|
+
claim("In Pi 1.0.2 RPC, prompt acceptance and agent_end do not prove settlement: wait for agent_settled, except a handled prompt that began no run.", piRpc),
|
|
70
|
+
claim("RPC steering arrives after current tool calls, before the next model call; follow-ups wait for tool calls and steering to drain. Query get_available_thinking_levels for the selected model.", piCommands),
|
|
100
71
|
],
|
|
101
|
-
},
|
|
102
|
-
{
|
|
72
|
+
}),
|
|
73
|
+
kbEntry({
|
|
103
74
|
id: "kimi-code",
|
|
104
75
|
name: "Kimi Code CLI",
|
|
105
|
-
version: "2.
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
note: "2.0.2",
|
|
112
|
-
},
|
|
113
|
-
],
|
|
114
|
-
prompt: [
|
|
115
|
-
"Plan the change first, then edit and verify each step against tests and runtime output.",
|
|
116
|
-
],
|
|
117
|
-
operator: [
|
|
118
|
-
"Headless: `kimi -p <prompt> -m kimi-code/k3 --output-format stream-json`.",
|
|
119
|
-
"`--auto` runs fully autonomous; `--agent-file <path>` loads an agent definition; `--plan` starts in plan mode.",
|
|
120
|
-
"Effort is the `[thinking] effort` key in `~/.kimi-code/config.toml`: low, high, or max.",
|
|
76
|
+
version: "2.1.1",
|
|
77
|
+
claims: [
|
|
78
|
+
claim("Headless: kimi -p <prompt> -m <configured-alias> --output-format stream-json. Print mode already uses auto policy with static deny rules; it rejects --auto, --yolo and --plan.", kimiCli),
|
|
79
|
+
claim("--agent-file selects a new session's custom agent and cannot combine with resume/continue.", kimiCli),
|
|
80
|
+
claim("kimi-code/k3 is a configured coding-provider alias, not Moonshot's public API ID kimi-k3. Configuration lives under KIMI_CODE_HOME or ~/.kimi-code.", kimiConfig),
|
|
81
|
+
claim("[thinking].effort is model-dependent; unsupported settings fall back to the model default. The documented K3 configuration supports low, high and max.", kimiConfig),
|
|
121
82
|
],
|
|
122
|
-
},
|
|
83
|
+
}),
|
|
123
84
|
];
|
|
@@ -20,8 +20,8 @@ export { composeAgentProfileGuidance, profileKbDiscrepancies, profileKbHarnesses
|
|
|
20
20
|
* replaces blocks from these sources and keeps blocks any other layer added.
|
|
21
21
|
*/
|
|
22
22
|
export declare const PROFILE_KB_SOURCES: readonly ["harness", "model", "learning"];
|
|
23
|
-
/** Date the
|
|
24
|
-
export declare const PROFILE_KB_CHECKED_AT = "2026-
|
|
23
|
+
/** Date of the latest source audit; individual historical observations retain their own dates. */
|
|
24
|
+
export declare const PROFILE_KB_CHECKED_AT = "2026-10-04";
|
|
25
25
|
/** Find a harness entry by its {@link HarnessType}. */
|
|
26
26
|
export declare function findProfileKbHarness(harness: HarnessType | string | undefined): ProfileKbHarness | undefined;
|
|
27
27
|
/**
|
package/dist/profile-kb/index.js
CHANGED
|
@@ -18,8 +18,8 @@ export { composeAgentProfileGuidance, profileKbDiscrepancies, profileKbHarnesses
|
|
|
18
18
|
* replaces blocks from these sources and keeps blocks any other layer added.
|
|
19
19
|
*/
|
|
20
20
|
export const PROFILE_KB_SOURCES = ["harness", "model", "learning"];
|
|
21
|
-
/** Date the
|
|
22
|
-
export const PROFILE_KB_CHECKED_AT = "2026-
|
|
21
|
+
/** Date of the latest source audit; individual historical observations retain their own dates. */
|
|
22
|
+
export const PROFILE_KB_CHECKED_AT = "2026-10-04";
|
|
23
23
|
/** Find a harness entry by its {@link HarnessType}. */
|
|
24
24
|
export function findProfileKbHarness(harness) {
|
|
25
25
|
if (!harness)
|
|
@@ -118,14 +118,14 @@ export function profileKbGuidance(selection) {
|
|
|
118
118
|
blocks.push({
|
|
119
119
|
source: "harness",
|
|
120
120
|
id: harness.id,
|
|
121
|
-
text: `
|
|
121
|
+
text: `Harness guidance: ${harness.name}.\n${bullets(harness.prompt)}`,
|
|
122
122
|
});
|
|
123
123
|
}
|
|
124
124
|
if (model && model.prompt.length > 0) {
|
|
125
125
|
blocks.push({
|
|
126
126
|
source: "model",
|
|
127
127
|
id: model.id,
|
|
128
|
-
text: `
|
|
128
|
+
text: `Model guidance: ${model.name}.\n${bullets(model.prompt)}`,
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
131
|
const learnings = learningsFor(harness, model);
|
|
@@ -1,9 +1,3 @@
|
|
|
1
1
|
import type { ProfileKbModel } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Current frontier models, from vendor sources read on 2026-09-22.
|
|
4
|
-
*
|
|
5
|
-
* `prompt` lines go into the model's prompt; `operator` lines configure the
|
|
6
|
-
* run. Vendor facts carry their source. Nothing here compares one model with
|
|
7
|
-
* another.
|
|
8
|
-
*/
|
|
2
|
+
/** Source-backed facts and conditional advice. API controls never become agent instructions. */
|
|
9
3
|
export declare const profileKbModels: readonly ProfileKbModel[];
|
|
@@ -1,118 +1,106 @@
|
|
|
1
|
-
|
|
1
|
+
import { claim, kbEntry } from "./entry.js";
|
|
2
|
+
const CHECKED = "2026-10-04";
|
|
3
|
+
const source = (url, locator) => ({
|
|
4
|
+
url,
|
|
5
|
+
locator,
|
|
6
|
+
checkedAt: CHECKED,
|
|
7
|
+
authority: "primary",
|
|
8
|
+
});
|
|
2
9
|
const claudeDocs = "https://platform.claude.com/docs/en";
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
10
|
+
const opusGuide = source(`${claudeDocs}/build-with-claude/prompt-engineering/prompting-claude-opus-5-5`, "Tools for complex visual inputs; unattended agentic runs; time signals for multiagent harnesses");
|
|
11
|
+
const fableGuide = source(`${claudeDocs}/build-with-claude/prompt-engineering/prompting-claude-fable-5-1`, "Finish the whole task; batch independent tool calls; keep the conversation history append-only");
|
|
12
|
+
const sonnetGuide = source(`${claudeDocs}/build-with-claude/prompt-engineering/prompting-claude-sonnet-5`, "Code review harnesses; tone and writing style");
|
|
13
|
+
const deepseekModel = source("https://api-docs.deepseek.com/quick_start/pricing/#model-details", "Model details; footnote 1");
|
|
14
|
+
const deepseekThinking = source("https://api-docs.deepseek.com/guides/thinking_mode/", "Thinking mode toggle and effort control; tool calls");
|
|
15
|
+
const glmModel = source("https://docs.z.ai/guides/llm/glm-5.3#feature-changes", "Feature changes");
|
|
16
|
+
const kimiModel = source("https://platform.kimi.ai/docs/guide/kimi-k3-quickstart", "Reasoning effort; vision input; important limits");
|
|
17
|
+
/** Historical acceptance records, not a current serving or quality check. */
|
|
18
|
+
function routerClaim(note) {
|
|
19
|
+
return claim(`The 2026-09-22 record reports ${note}; this audit recovered no attached trace and made no new router request.`, {
|
|
7
20
|
url: "https://router.tangle.tools/v1/chat/completions",
|
|
21
|
+
checkedAt: "2026-09-22",
|
|
22
|
+
authority: "local",
|
|
23
|
+
locator: "models.ts at d949682; historical routerCheck note",
|
|
24
|
+
}, "local-observation");
|
|
25
|
+
}
|
|
26
|
+
/** Each row refers to the dated catalog in the retained source audit. */
|
|
27
|
+
function codexCatalogClaim(id, defaultEffort, ultra) {
|
|
28
|
+
return claim(`Codex cache observed at 2026-10-04T05:31:58Z (client 0.160.0): 272000 context, default ${defaultEffort}, efforts low through max${ultra ? " plus ultra" : ""}. This account/client catalog is not a serving receipt; a later cache written by 0.155.0 lacked GPT-6.1 Sol.`, {
|
|
29
|
+
url: "file://~/.codex/models_cache.json",
|
|
8
30
|
checkedAt: CHECKED,
|
|
31
|
+
authority: "local",
|
|
32
|
+
locator: `research/anthropic-openai.md#local-codex-catalog-evidence; slug ${id}`,
|
|
33
|
+
}, "local-observation");
|
|
34
|
+
}
|
|
35
|
+
function historicalCodexClaim(id, catalogSource) {
|
|
36
|
+
const note = catalogSource
|
|
37
|
+
? `codex-cli 0.156.1 served list; \`codex exec -m ${id}\` returned OK`
|
|
38
|
+
: "codex-cli 0.156.1 on a ChatGPT account returned OK";
|
|
39
|
+
return claim(`The 2026-09-22 record reports ${note}; no attached trace was recovered in this audit.`, {
|
|
40
|
+
url: catalogSource
|
|
41
|
+
? "file://~/.codex/models_cache.json"
|
|
42
|
+
: `cli:codex exec -m ${id} 'Reply with exactly: OK'`,
|
|
43
|
+
checkedAt: "2026-09-22",
|
|
9
44
|
note,
|
|
10
|
-
|
|
45
|
+
authority: "local",
|
|
46
|
+
locator: "models.ts at d949682; historical CLI check",
|
|
47
|
+
}, "local-observation");
|
|
11
48
|
}
|
|
12
|
-
/**
|
|
13
|
-
* Current frontier models, from vendor sources read on 2026-09-22.
|
|
14
|
-
*
|
|
15
|
-
* `prompt` lines go into the model's prompt; `operator` lines configure the
|
|
16
|
-
* run. Vendor facts carry their source. Nothing here compares one model with
|
|
17
|
-
* another.
|
|
18
|
-
*/
|
|
49
|
+
/** Source-backed facts and conditional advice. API controls never become agent instructions. */
|
|
19
50
|
export const profileKbModels = [
|
|
20
|
-
{
|
|
51
|
+
kbEntry({
|
|
21
52
|
id: "claude-opus-5-5",
|
|
22
53
|
name: "Claude Opus 5.5",
|
|
23
54
|
vendor: "Anthropic",
|
|
24
55
|
surfaces: ["api"],
|
|
25
56
|
aliases: ["anthropic/claude-opus-5-5", "anthropic.claude-opus-5-5"],
|
|
26
57
|
defaultEffort: "medium",
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
checkedAt: CHECKED,
|
|
36
|
-
note: "system card, linked from the model overview",
|
|
37
|
-
},
|
|
38
|
-
],
|
|
39
|
-
prompt: [
|
|
40
|
-
"Keep the task's parts in a checklist you update, and keep working until every item is done or blocked.",
|
|
41
|
-
"Put status notes and recommendations in the same message as your next tool call; end the turn only when the work is complete or nothing can move without the user.",
|
|
42
|
-
"Before acting on a loosely specified task, explore the relevant files, records, and sources, including ones the task does not name, and use what you find.",
|
|
43
|
-
"When a lead agent can delegate, run independent slices in parallel subagents and pace the work to finish early.",
|
|
44
|
-
"For dense charts, diagrams, or screenshots, crop and zoom with the available image tools before reading values.",
|
|
45
|
-
],
|
|
46
|
-
operator: [
|
|
47
|
-
"Model id claude-opus-5-5; 1M context, 128K max output; released 2026-09-22.",
|
|
48
|
-
"Adaptive thinking is always on. Start at effort medium, measure low for cost, and reserve xhigh and max for measured gains.",
|
|
49
|
-
"Set max_tokens to 128000 for long agentic turns: thinking counts toward it.",
|
|
50
|
-
"Keep history append-only and pass thinking blocks back unchanged; change instructions with mid-conversation system messages.",
|
|
51
|
-
"Set thinking display to updates to receive progress notes between tool calls.",
|
|
52
|
-
"For unattended loops, treat a text-only end of turn as a report: name the open items in a short user message, at most two or three times.",
|
|
53
|
-
"For multi-agent runs, append elapsed time against a budget (for example `elapsed 340s / 1200s`) to each message.",
|
|
54
|
-
],
|
|
55
|
-
},
|
|
56
|
-
{
|
|
58
|
+
claims: [
|
|
59
|
+
claim("Claude API: 1M context, 128K ordinary output; adaptive thinking is always enabled, default effort medium. Preserve returned thinking and its conversation prefix.", source("https://platform.claude.com/docs/en/models/opus-5-5/overview", "Overview; capabilities; good to know")),
|
|
60
|
+
claim("For dense charts or screenshots, inspect small details using available crop or zoom tools.", opusGuide, "vendor-guidance", "agent"),
|
|
61
|
+
claim("For unattended runs that stop with unfinished work, explicit completion tracking and bounded continuation are vendor tuning candidates; interactive confirmations still apply.", opusGuide, "vendor-guidance"),
|
|
62
|
+
claim("For an already-authorized agent team, elapsed-time and budget signals are a tuning candidate; hard timeouts need enforcement outside the prompt, and time pressure can reduce verification.", opusGuide, "vendor-guidance"),
|
|
63
|
+
],
|
|
64
|
+
}),
|
|
65
|
+
kbEntry({
|
|
57
66
|
id: "claude-fable-5-1",
|
|
58
67
|
name: "Claude Fable 5.1",
|
|
59
68
|
vendor: "Anthropic",
|
|
60
69
|
surfaces: ["api"],
|
|
61
70
|
aliases: ["anthropic/claude-fable-5-1", "anthropic.claude-fable-5-1"],
|
|
62
71
|
defaultEffort: "high",
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
checkedAt: CHECKED,
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
prompt: [
|
|
71
|
-
"You are operating autonomously: for reversible actions that follow from the request, proceed without asking; stop only for destructive actions or scope changes the user must decide.",
|
|
72
|
-
"Before ending your turn, check your last paragraph: if it is a plan, a list of next steps, or a promise, do that work now with tool calls.",
|
|
73
|
-
"The request sets the scope: deliver all of it, keep changes to what it needs, and report other findings as follow-ups.",
|
|
74
|
-
"First privately list what you need next; then request every item that does not depend on another's result in one response.",
|
|
75
|
-
"Say in a line what you are about to do, give brief updates while you work, and close with a recap that stands on its own.",
|
|
76
|
-
"Edit files surgically when a targeted edit gives the same result.",
|
|
77
|
-
"Write plainly: when a literal phrase is available, use it.",
|
|
72
|
+
claims: [
|
|
73
|
+
claim("Claude API: 1M context, 128K ordinary output; always-on adaptive thinking, default effort high.", source("https://platform.claude.com/docs/en/models/fable-5-1/overview", "Overview; capabilities")),
|
|
74
|
+
claim("The vendor offers optional remedies for demonstrated early stopping, serial independent calls, overediting and writing problems. Apply the matching remedy within the task scope and authorization.", fableGuide, "vendor-guidance"),
|
|
75
|
+
claim("Keep history append-only; supported turn-scoped reminders remain appended. When subagents are already used, nonblocking spawn and later results let the lead continue, but do not guarantee useful overlap.", fableGuide, "vendor-guidance"),
|
|
78
76
|
],
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
"Adaptive thinking only. Start at effort high and sweep low, medium, xhigh, and max against your evals.",
|
|
82
|
-
"Keep history append-only; send per-turn reminders as turn-scoped system messages (clear_at next_user_message).",
|
|
83
|
-
"Let the lead agent keep working while subagents run: return from the spawn tool immediately and deliver results in a later user message.",
|
|
84
|
-
"At xhigh and max, leave max_tokens room for thinking plus the deliverable.",
|
|
85
|
-
],
|
|
86
|
-
},
|
|
87
|
-
{
|
|
77
|
+
}),
|
|
78
|
+
kbEntry({
|
|
88
79
|
id: "claude-sonnet-5",
|
|
89
80
|
name: "Claude Sonnet 5",
|
|
90
81
|
vendor: "Anthropic",
|
|
91
82
|
surfaces: ["api", "router"],
|
|
92
83
|
aliases: ["anthropic/claude-sonnet-5", "anthropic.claude-sonnet-5"],
|
|
93
84
|
defaultEffort: "high",
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
],
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
"
|
|
110
|
-
"Instructions are followed literally, especially at low effort: state scope explicitly.",
|
|
111
|
-
"Give the task, intent, and constraints up front in the first turn.",
|
|
112
|
-
"Temperature, top_p, and top_k stay at defaults; steer tone and variety in the prompt.",
|
|
85
|
+
claims: [
|
|
86
|
+
claim("Claude API: active legacy model; 1M context, 128K output. Adaptive thinking defaults on with effort high; disabled thinking is also supported.", source("https://platform.claude.com/docs/en/models/sonnet-5/overview", "Capabilities; availability")),
|
|
87
|
+
claim("For review, specify the desired precision/recall and name any actual downstream filter; do not invent one to justify broad reporting.", sonnetGuide, "vendor-guidance"),
|
|
88
|
+
claim("Nondefault temperature, top_p and top_k are rejected.", sonnetGuide),
|
|
89
|
+
routerClaim("claude-sonnet-5 returned HTTP 200"),
|
|
90
|
+
],
|
|
91
|
+
}),
|
|
92
|
+
kbEntry({
|
|
93
|
+
id: "claude-sonnet-5-5",
|
|
94
|
+
name: "Claude Sonnet 5.5",
|
|
95
|
+
vendor: "Anthropic",
|
|
96
|
+
surfaces: ["api"],
|
|
97
|
+
aliases: ["anthropic/claude-sonnet-5-5", "anthropic.claude-sonnet-5-5"],
|
|
98
|
+
defaultEffort: "high",
|
|
99
|
+
claims: [
|
|
100
|
+
claim("Claude API: released 2026-09-28; 1M context, 128K output; adaptive thinking with default effort high. between_tools is the lowest thinking setting and requires effort high or below; do not reuse Sonnet 5 disabled-thinking assumptions.", source("https://platform.claude.com/docs/en/models/sonnet-5-5/overview", "Overview; capabilities; good to know")),
|
|
113
101
|
],
|
|
114
|
-
},
|
|
115
|
-
{
|
|
102
|
+
}),
|
|
103
|
+
kbEntry({
|
|
116
104
|
id: "claude-haiku-4-5",
|
|
117
105
|
name: "Claude Haiku 4.5",
|
|
118
106
|
vendor: "Anthropic",
|
|
@@ -122,291 +110,153 @@ export const profileKbModels = [
|
|
|
122
110
|
"anthropic/claude-haiku-4-5",
|
|
123
111
|
"anthropic.claude-haiku-4-5",
|
|
124
112
|
],
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
],
|
|
128
|
-
prompt: [
|
|
129
|
-
"Answer directly and keep each step scoped to the task in hand.",
|
|
130
|
-
],
|
|
131
|
-
operator: [
|
|
132
|
-
"Model id claude-haiku-4-5-20251001 (alias claude-haiku-4-5); 200K context, 64K max output.",
|
|
133
|
-
"Uses manual extended thinking (thinking.type enabled with budget_tokens); it takes no effort parameter.",
|
|
134
|
-
"Retirement date: 2026-10-15 at the earliest.",
|
|
113
|
+
claims: [
|
|
114
|
+
claim("Claude API alias claude-haiku-4-5 resolves to claude-haiku-4-5-20251001; 200K context, 64K output. Manual extended thinking uses budget_tokens and accepts no effort parameter. Retirement is not before 2026-10-15, not scheduled on that date.", source("https://platform.claude.com/docs/en/models/haiku-4-5/overview", "Model IDs; capabilities; availability")),
|
|
135
115
|
],
|
|
136
|
-
},
|
|
137
|
-
{
|
|
116
|
+
}),
|
|
117
|
+
kbEntry({
|
|
138
118
|
id: "gpt-6-pro",
|
|
139
119
|
name: "GPT-6 Pro",
|
|
140
120
|
vendor: "OpenAI",
|
|
141
121
|
surfaces: ["chatgpt"],
|
|
142
122
|
aliases: ["GPT-6 Pro"],
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
url: "https://help.openai.com/en/articles/20001354-gpt-56-and-gpt-6-pro-in-chatgpt",
|
|
146
|
-
checkedAt: CHECKED,
|
|
147
|
-
note: "read through search results; direct fetch returned HTTP 403",
|
|
148
|
-
},
|
|
149
|
-
{ url: "https://learn.chatgpt.com/docs/prompting", checkedAt: CHECKED },
|
|
123
|
+
claims: [
|
|
124
|
+
claim("GPT-6 Pro is a ChatGPT product mode powered by Astra, with plan/workspace-dependent access and allowances. This entry establishes no API model ID.", source("https://help.openai.com/en/articles/20001354-gpt-56-and-gpt-6-pro-in-chatgpt", "GPT-6 Pro availability; usage limits")),
|
|
150
125
|
],
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
126
|
+
}),
|
|
127
|
+
kbEntry({
|
|
128
|
+
id: "gpt-6.1-sol",
|
|
129
|
+
name: "GPT-6.1 Sol",
|
|
130
|
+
vendor: "OpenAI",
|
|
131
|
+
surfaces: ["codex", "api"],
|
|
132
|
+
aliases: ["openai/gpt-6.1-sol"],
|
|
133
|
+
defaultEffort: "medium",
|
|
134
|
+
claims: [
|
|
135
|
+
claim("OpenAI API: 1,050,000-token context, 128K output; efforts low, medium, high, xhigh and max. API default is medium. Tool calling requires Responses.", source("https://developers.openai.com/api/docs/models/gpt-6.1-sol", "Model description; reasoning effort; context/output limits; supported endpoints")),
|
|
136
|
+
codexCatalogClaim("gpt-6.1-sol", "low", true),
|
|
159
137
|
],
|
|
160
|
-
},
|
|
161
|
-
{
|
|
138
|
+
}),
|
|
139
|
+
kbEntry({
|
|
162
140
|
id: "gpt-6-astra",
|
|
163
141
|
name: "GPT-6 Astra",
|
|
164
142
|
vendor: "OpenAI",
|
|
165
143
|
surfaces: ["codex", "api"],
|
|
166
144
|
aliases: ["openai/gpt-6-astra"],
|
|
167
145
|
defaultEffort: "medium",
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
{
|
|
177
|
-
url: "cli:codex exec -m gpt-6-astra 'Reply with exactly: OK'",
|
|
178
|
-
checkedAt: CHECKED,
|
|
179
|
-
note: "codex-cli 0.156.1 on a ChatGPT account returned OK",
|
|
180
|
-
},
|
|
181
|
-
],
|
|
182
|
-
prompt: [
|
|
183
|
-
"Infer the user's intent and task scope from the instructions and prior context, bias toward action, and carry the intended task to completion.",
|
|
184
|
-
"When you can parallelize work by delegating tasks to another agent, do so with the collaboration tools.",
|
|
185
|
-
"Write clear, concise paragraphs that each develop one idea; use lists only for parallel or sequential items.",
|
|
186
|
-
],
|
|
187
|
-
operator: [
|
|
188
|
-
"Built for end-to-end work with sustained reasoning across many tools: coding, computer use, research, and documents.",
|
|
189
|
-
"API: 1,050,000-token context, 128K max output; efforts low, medium, high, xhigh, max.",
|
|
190
|
-
"Codex: 272K context; efforts low to max plus ultra, which delegates tasks automatically; default medium.",
|
|
191
|
-
],
|
|
192
|
-
},
|
|
193
|
-
{
|
|
146
|
+
claims: [
|
|
147
|
+
claim("OpenAI API: 1,050,000-token context, 128K output; efforts low, medium, high, xhigh and max. Tool calling requires Responses.", source("https://developers.openai.com/api/docs/models/gpt-6-astra", "Model description; reasoning effort; context/output limits; supported endpoints")),
|
|
148
|
+
codexCatalogClaim("gpt-6-astra", "medium", true),
|
|
149
|
+
claim("The GPT-6 guide describes Astra prompting patterns; delegation, autonomy and testing examples remain conditional on tools, authorization and workload. Other family members need their own evaluation.", source("https://developers.openai.com/api/docs/guides/latest-model?model=gpt-6-astra", "Prompting best practices; subagent delegation; testing and verification"), "vendor-guidance"),
|
|
150
|
+
historicalCodexClaim("gpt-6-astra", false),
|
|
151
|
+
],
|
|
152
|
+
}),
|
|
153
|
+
kbEntry({
|
|
194
154
|
id: "gpt-6-sol",
|
|
195
155
|
name: "GPT-6 Sol",
|
|
196
156
|
vendor: "OpenAI",
|
|
197
157
|
surfaces: ["codex", "api"],
|
|
198
158
|
aliases: ["openai/gpt-6-sol"],
|
|
199
159
|
defaultEffort: "medium",
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
checkedAt: CHECKED,
|
|
205
|
-
note: "Using GPT-6: prompting guidance",
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
url: "cli:codex exec -m gpt-6-sol 'Reply with exactly: OK'",
|
|
209
|
-
checkedAt: CHECKED,
|
|
210
|
-
note: "codex-cli 0.156.1 on a ChatGPT account returned OK",
|
|
211
|
-
},
|
|
160
|
+
claims: [
|
|
161
|
+
claim("OpenAI API: 1,050,000-token context, 128K output; efforts none, low, medium, high, xhigh and max. API default is medium. Responses supports tools; Chat Completions function calling requires effort none.", source("https://developers.openai.com/api/docs/models/gpt-6-sol", "Model description; reasoning effort; context/output limits; supported endpoints")),
|
|
162
|
+
codexCatalogClaim("gpt-6-sol", "medium", true),
|
|
163
|
+
historicalCodexClaim("gpt-6-sol", false),
|
|
212
164
|
],
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
"The user's explicit instructions take precedence over a skill's instructions; if a skill makes you pause or ask, name the SKILL.md file.",
|
|
216
|
-
"Carry the task to completion and report the checks you ran.",
|
|
217
|
-
],
|
|
218
|
-
operator: [
|
|
219
|
-
"Built for complex coding and agentic workflows, and for ambiguous or high-value tasks that need analysis and polish.",
|
|
220
|
-
"API: 1,050,000-token context, 128K max output; efforts none, low, medium (default), high, xhigh, max. Inputs over 272K tokens bill at 2x input and 1.5x output.",
|
|
221
|
-
"Codex: 272K context; efforts low to max plus ultra; default medium.",
|
|
222
|
-
"Use the Responses API for built-in tools; Chat Completions supports function calling only at effort none.",
|
|
223
|
-
],
|
|
224
|
-
},
|
|
225
|
-
{
|
|
165
|
+
}),
|
|
166
|
+
kbEntry({
|
|
226
167
|
id: "gpt-6-luna",
|
|
227
168
|
name: "GPT-6 Luna",
|
|
228
169
|
vendor: "OpenAI",
|
|
229
170
|
surfaces: ["codex", "api"],
|
|
230
171
|
aliases: ["openai/gpt-6-luna"],
|
|
231
172
|
defaultEffort: "medium",
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
url: "cli:codex exec -m gpt-6-luna 'Reply with exactly: OK'",
|
|
237
|
-
checkedAt: CHECKED,
|
|
238
|
-
note: "codex-cli 0.156.1 on a ChatGPT account returned OK",
|
|
239
|
-
},
|
|
240
|
-
],
|
|
241
|
-
prompt: [
|
|
242
|
-
"Work to the stated success criteria and output format for each item.",
|
|
243
|
-
"Scale testing to the change: once the targeted checks pass, test further only when new changes or failures justify it.",
|
|
173
|
+
claims: [
|
|
174
|
+
claim("OpenAI API: 1,050,000-token context, 128K output; efforts none, low, medium, high, xhigh and max. API default is medium. Responses supports tools; Chat Completions function calling requires effort none.", source("https://developers.openai.com/api/docs/models/gpt-6-luna", "Model description; reasoning effort; context/output limits; supported endpoints")),
|
|
175
|
+
codexCatalogClaim("gpt-6-luna", "medium", false),
|
|
176
|
+
historicalCodexClaim("gpt-6-luna", false),
|
|
244
177
|
],
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
"API: 1,050,000-token context, 128K max output; efforts none, low, medium (default), high, xhigh, max.",
|
|
248
|
-
"Codex: 272K context; efforts low to max; default medium.",
|
|
249
|
-
],
|
|
250
|
-
},
|
|
251
|
-
{
|
|
178
|
+
}),
|
|
179
|
+
kbEntry({
|
|
252
180
|
id: "gpt-5.6-sol",
|
|
253
181
|
name: "GPT-5.6 Sol",
|
|
254
182
|
vendor: "OpenAI",
|
|
255
183
|
surfaces: ["codex", "api", "router"],
|
|
256
184
|
aliases: ["openai/gpt-5.6-sol"],
|
|
257
185
|
defaultEffort: "medium",
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
url: "file://~/.codex/models_cache.json",
|
|
270
|
-
checkedAt: CHECKED,
|
|
271
|
-
note: "codex-cli 0.156.1 served list; `codex exec -m gpt-5.6-sol` returned OK",
|
|
272
|
-
},
|
|
273
|
-
routerCheck("gpt-5.6-sol returned HTTP 200"),
|
|
274
|
-
],
|
|
275
|
-
prompt: [
|
|
276
|
-
"Work from the outcome: know what good looks like and the stopping condition, then choose the method yourself.",
|
|
277
|
-
"Carry the task to completion: gather context, plan, implement, verify, and report the evidence.",
|
|
278
|
-
"Run independent reads and checks in parallel.",
|
|
279
|
-
],
|
|
280
|
-
operator: [
|
|
281
|
-
"Flagship GPT-5.6 tier for complex professional work: architecture, security review, repo-wide debugging.",
|
|
282
|
-
"Keep the system prompt lean: objective, context, hard constraints, approval boundaries, success criteria, required evidence, and output format.",
|
|
283
|
-
"Efforts: none, low, medium (API default), high, xhigh, max; Codex adds ultra, which runs parallel agents. Codex lists low as its default for this model.",
|
|
284
|
-
"1,050,000-token context, 128K max output.",
|
|
285
|
-
],
|
|
286
|
-
},
|
|
287
|
-
{
|
|
186
|
+
claims: [
|
|
187
|
+
claim("OpenAI API: 1,050,000-token context, 128K output; efforts none, low, medium, high, xhigh and max. API default is medium.", source("https://developers.openai.com/api/docs/models/gpt-5.6-sol", "Model description; reasoning effort; context/output limits; supported endpoints")),
|
|
188
|
+
claim("OpenAI API name gpt-5.6 aliases to gpt-5.6-sol.", source("https://developers.openai.com/api/docs/models/gpt-5.6-sol", "Model description; reasoning effort; context/output limits; supported endpoints")),
|
|
189
|
+
codexCatalogClaim("gpt-5.6-sol", "low", true),
|
|
190
|
+
historicalCodexClaim("gpt-5.6-sol", true),
|
|
191
|
+
routerClaim("gpt-5.6-sol returned HTTP 200"),
|
|
192
|
+
],
|
|
193
|
+
}),
|
|
194
|
+
kbEntry({
|
|
288
195
|
id: "gpt-5.6-terra",
|
|
289
196
|
name: "GPT-5.6 Terra",
|
|
290
197
|
vendor: "OpenAI",
|
|
291
198
|
surfaces: ["codex", "api", "router"],
|
|
292
199
|
aliases: ["openai/gpt-5.6-terra"],
|
|
293
200
|
defaultEffort: "medium",
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
note: "codex-cli 0.156.1 served list; `codex exec -m gpt-5.6-terra` returned OK",
|
|
303
|
-
},
|
|
304
|
-
routerCheck("gpt-5.6-terra returned HTTP 200"),
|
|
305
|
-
],
|
|
306
|
-
prompt: [
|
|
307
|
-
"Work from the outcome and the stopping condition; choose the method yourself and verify before you report.",
|
|
308
|
-
],
|
|
309
|
-
operator: [
|
|
310
|
-
"Balanced GPT-5.6 tier for everyday professional coding.",
|
|
311
|
-
"Efforts: none, low, medium (default), high, xhigh, max; Codex adds ultra.",
|
|
312
|
-
"1,050,000-token context, 128K max output.",
|
|
313
|
-
],
|
|
314
|
-
},
|
|
315
|
-
{
|
|
201
|
+
claims: [
|
|
202
|
+
claim("OpenAI API: 1,050,000-token context, 128K output; efforts none, low, medium, high, xhigh and max. API default is medium.", source("https://developers.openai.com/api/docs/models/gpt-5.6-terra", "Model description; reasoning effort; context/output limits; supported endpoints")),
|
|
203
|
+
codexCatalogClaim("gpt-5.6-terra", "medium", true),
|
|
204
|
+
historicalCodexClaim("gpt-5.6-terra", true),
|
|
205
|
+
routerClaim("gpt-5.6-terra returned HTTP 200"),
|
|
206
|
+
],
|
|
207
|
+
}),
|
|
208
|
+
kbEntry({
|
|
316
209
|
id: "gpt-5.6-luna",
|
|
317
210
|
name: "GPT-5.6 Luna",
|
|
318
211
|
vendor: "OpenAI",
|
|
319
212
|
surfaces: ["codex", "api", "router"],
|
|
320
213
|
aliases: ["openai/gpt-5.6-luna"],
|
|
321
214
|
defaultEffort: "medium",
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
note: "codex-cli 0.156.1 served list; `codex exec -m gpt-5.6-luna` returned OK",
|
|
331
|
-
},
|
|
332
|
-
routerCheck("gpt-5.6-luna returned HTTP 200"),
|
|
333
|
-
],
|
|
334
|
-
prompt: [
|
|
335
|
-
"Follow the stated format exactly and finish each item before moving to the next.",
|
|
336
|
-
],
|
|
337
|
-
operator: [
|
|
338
|
-
"GPT-5.6 tier for cost-sensitive, high-volume work: summarizing, labeling, extraction, scaffolds.",
|
|
339
|
-
"Efforts: none, low, medium (default), high, xhigh, max. Raise effort for harder items.",
|
|
340
|
-
"1,050,000-token context, 128K max output.",
|
|
341
|
-
],
|
|
342
|
-
},
|
|
343
|
-
{
|
|
215
|
+
claims: [
|
|
216
|
+
claim("OpenAI API: 1,050,000-token context, 128K output; efforts none, low, medium, high, xhigh and max. API default is medium.", source("https://developers.openai.com/api/docs/models/gpt-5.6-luna", "Model description; reasoning effort; context/output limits; supported endpoints")),
|
|
217
|
+
codexCatalogClaim("gpt-5.6-luna", "medium", false),
|
|
218
|
+
historicalCodexClaim("gpt-5.6-luna", true),
|
|
219
|
+
routerClaim("gpt-5.6-luna returned HTTP 200"),
|
|
220
|
+
],
|
|
221
|
+
}),
|
|
222
|
+
kbEntry({
|
|
344
223
|
id: "deepseek-v4.1-flash",
|
|
345
224
|
name: "DeepSeek V4.1 Flash",
|
|
346
225
|
vendor: "DeepSeek",
|
|
347
226
|
surfaces: ["api", "router"],
|
|
348
227
|
aliases: ["deepseek-flash", "deepseek/deepseek-v4.1-flash"],
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
url: "https://api-docs.deepseek.com/quick_start/pricing",
|
|
356
|
-
checkedAt: CHECKED,
|
|
357
|
-
},
|
|
358
|
-
routerCheck("deepseek/deepseek-v4.1-flash returned HTTP 200 and served that id"),
|
|
359
|
-
],
|
|
360
|
-
prompt: [
|
|
361
|
-
"State the goal and the finished result up front, and use the tools you are given to check your work.",
|
|
362
|
-
],
|
|
363
|
-
operator: [
|
|
364
|
-
"Vendor API id deepseek-flash (released 2026-09-10); on the Tangle router, deepseek/deepseek-v4.1-flash.",
|
|
365
|
-
"1M context, 384K max output; thinking mode is the default and non-thinking is available. Native vision.",
|
|
366
|
-
"OpenCode supports it as an official partner harness.",
|
|
228
|
+
claims: [
|
|
229
|
+
claim("DeepSeek API ID deepseek-flash denotes V4.1-Flash: 1M context, 384K output, vision and tools; non-thinking mode is available. Router naming is a separate contract.", deepseekModel),
|
|
230
|
+
claim("Thinking defaults on at high. Native efforts are low, high and max; minimal maps to low, medium/xhigh to high, and ultra to max. With tools, preserve all previous reasoning_content, including turns without tool calls.", deepseekThinking),
|
|
231
|
+
routerClaim("deepseek/deepseek-v4.1-flash returned HTTP 200 and served that id"),
|
|
367
232
|
],
|
|
368
|
-
},
|
|
369
|
-
{
|
|
233
|
+
}),
|
|
234
|
+
kbEntry({
|
|
370
235
|
id: "glm-5.3",
|
|
371
236
|
name: "GLM-5.3",
|
|
372
237
|
vendor: "Z.ai",
|
|
373
238
|
surfaces: ["api", "router"],
|
|
374
239
|
aliases: ["z-ai/glm-5.3", "zai-coding-plan/glm-5.3"],
|
|
375
240
|
defaultEffort: "ultracode",
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
"Model id glm-5.3; text only; 1M context, 128K max output. Built for long-horizon software engineering.",
|
|
385
|
-
"Reasoning is always on: thinking.type enabled with reasoning_effort low, high, or max (default). Use max for coding.",
|
|
386
|
-
],
|
|
387
|
-
},
|
|
388
|
-
{
|
|
241
|
+
claims: [
|
|
242
|
+
claim("Z.ai direct API: text-only, 1M context, 128K output; thinking cannot be disabled. reasoning_effort accepts only low, high or max, default max.", glmModel),
|
|
243
|
+
claim("Coding Plan maps none/minimal/low to low, medium/high to high, and xhigh/max to max; this mapping does not apply to direct GLM-5.3 API requests.", source("https://docs.z.ai/guides/capabilities/thinking#core-parameters", "Core parameters; Coding Plan mappings")),
|
|
244
|
+
claim("Z.ai recommends max for complex coding; no local effort sweep establishes its value for this workload.", glmModel, "vendor-guidance"),
|
|
245
|
+
routerClaim("glm-5.3 returned HTTP 200, served as z-ai/glm-5.3"),
|
|
246
|
+
],
|
|
247
|
+
}),
|
|
248
|
+
kbEntry({
|
|
389
249
|
id: "kimi-k3",
|
|
390
250
|
name: "Kimi K3",
|
|
391
251
|
vendor: "Moonshot AI",
|
|
392
252
|
surfaces: ["api", "router"],
|
|
393
253
|
aliases: ["moonshotai/kimi-k3", "kimi-code/k3"],
|
|
394
254
|
defaultEffort: "ultracode",
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
routerCheck("kimi-k3 returned HTTP 200, served as moonshotai/kimi-k3"),
|
|
401
|
-
],
|
|
402
|
-
prompt: [
|
|
403
|
-
"Navigate the repository, run the code, and iterate against tests, logs, and runtime output until the result holds.",
|
|
404
|
-
],
|
|
405
|
-
operator: [
|
|
406
|
-
"Model id kimi-k3; 1M context; native vision. For long-horizon coding, knowledge work, and reasoning.",
|
|
407
|
-
"Thinking is always on: reasoning_effort low, high, or max (default).",
|
|
408
|
-
"Sampling is fixed (temperature 1.0, top_p 0.95); omit sampling parameters.",
|
|
409
|
-
"Return the complete assistant message unchanged in multi-turn and tool-call histories.",
|
|
255
|
+
claims: [
|
|
256
|
+
claim("Moonshot API ID kimi-k3: 1M context, native vision, always-on thinking; reasoning_effort low, high or max, default max. The CLI alias kimi-code/k3 belongs to a different configuration surface.", kimiModel),
|
|
257
|
+
claim("Omit fixed sampling fields. Replay complete assistant messages unchanged, including reasoning and tool calls. Vision uses structured base64 or uploaded-file content, not public image URLs.", kimiModel),
|
|
258
|
+
claim("For large tool catalogs, tool search followed by dynamic declarations is vendor guidance; the backend must implement retrieval and the K3-specific declaration protocol.", source("https://platform.kimi.ai/docs/guide/kimi-k3-tool-calling-best-practice", "Declare a search tool; use tool_choice; inject tool definitions"), "vendor-guidance"),
|
|
259
|
+
routerClaim("kimi-k3 returned HTTP 200, served as moonshotai/kimi-k3"),
|
|
410
260
|
],
|
|
411
|
-
},
|
|
261
|
+
}),
|
|
412
262
|
];
|
|
@@ -6,7 +6,7 @@ import type { ProfileKbDiscrepancy, ProfileKbLearning } from "./types.js";
|
|
|
6
6
|
*/
|
|
7
7
|
export declare const profileKbLearnings: readonly ProfileKbLearning[];
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Historical naming and availability checks from 2026-09-22. Their dates and
|
|
10
|
+
* observations are retained; they do not establish current service or identity.
|
|
11
11
|
*/
|
|
12
12
|
export declare const profileKbDiscrepancies: readonly ProfileKbDiscrepancy[];
|
|
@@ -6,16 +6,16 @@ const CHECKED = "2026-09-22";
|
|
|
6
6
|
*/
|
|
7
7
|
export const profileKbLearnings = [];
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
9
|
+
* Historical naming and availability checks from 2026-09-22. Their dates and
|
|
10
|
+
* observations are retained; they do not establish current service or identity.
|
|
11
11
|
*/
|
|
12
12
|
export const profileKbDiscrepancies = [
|
|
13
13
|
{
|
|
14
14
|
subject: "OpenAI Codex models",
|
|
15
15
|
requested: "gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna as the current Codex models",
|
|
16
|
-
observed: "OpenAI's Codex model page
|
|
17
|
-
"codex-cli 0.156.1 on a ChatGPT account
|
|
18
|
-
"
|
|
16
|
+
observed: "On 2026-09-22, OpenAI's Codex model page listed GPT-6 Astra, GPT-6 Sol, and GPT-6 Luna as current. " +
|
|
17
|
+
"The check notes recorded OK replies for all three with codex-cli 0.156.1 on a ChatGPT account, and labelled the gpt-5.6 tiers 'Older'. " +
|
|
18
|
+
"Those response checks did not establish served identity, task quality, or availability today.",
|
|
19
19
|
sources: [
|
|
20
20
|
{ url: "https://learn.chatgpt.com/docs/models", checkedAt: CHECKED },
|
|
21
21
|
{
|
|
@@ -28,9 +28,9 @@ export const profileKbDiscrepancies = [
|
|
|
28
28
|
{
|
|
29
29
|
subject: "DeepSeek V4.1 Pro",
|
|
30
30
|
requested: "DeepSeek V4.1 Pro",
|
|
31
|
-
observed: "
|
|
32
|
-
"deepseek-v4-pro to DeepSeek-V4-Pro-0813,
|
|
33
|
-
"
|
|
31
|
+
observed: "The sources checked on 2026-09-22 documented V4.1 Flash, released 2026-09-10, but did not establish a V4.1 Pro model. " +
|
|
32
|
+
"The changelog said the V4 Pro API continued; pricing mapped deepseek-v4-pro to DeepSeek-V4-Pro-0813, while the Flash announcement said it routed to V4.1 Flash from 2026-09-14. " +
|
|
33
|
+
"The router check recorded HTTP 503 (provider quota exhausted) for deepseek-v4-pro; it did not resolve that source disagreement.",
|
|
34
34
|
sources: [
|
|
35
35
|
{ url: "https://api-docs.deepseek.com/updates/", checkedAt: CHECKED },
|
|
36
36
|
{ url: "https://api-docs.deepseek.com/quick_start/pricing", checkedAt: CHECKED },
|
|
@@ -40,7 +40,8 @@ export const profileKbDiscrepancies = [
|
|
|
40
40
|
{
|
|
41
41
|
subject: "DeepSeek V4.1 Flash router id",
|
|
42
42
|
requested: "deepseek-flash (the vendor id)",
|
|
43
|
-
observed: "
|
|
43
|
+
observed: "The 2026-09-22 Tangle router check recorded HTTP 503 (provider_pricing_unavailable) for deepseek-flash and HTTP 200 for deepseek/deepseek-v4.1-flash. " +
|
|
44
|
+
"These statuses did not establish served identity or current availability.",
|
|
44
45
|
sources: [
|
|
45
46
|
{
|
|
46
47
|
url: "https://router.tangle.tools/v1/chat/completions",
|
|
@@ -51,7 +52,8 @@ export const profileKbDiscrepancies = [
|
|
|
51
52
|
{
|
|
52
53
|
subject: "GPT-6 Pro",
|
|
53
54
|
requested: "GPT-6 Pro in ChatGPT",
|
|
54
|
-
observed: "OpenAI's
|
|
55
|
+
observed: "The 2026-09-22 check recorded OpenAI's description of GPT-6 Pro as a ChatGPT mode powered by GPT-6 Astra. " +
|
|
56
|
+
"That check did not establish a separate API model id for the ChatGPT mode.",
|
|
55
57
|
sources: [
|
|
56
58
|
{
|
|
57
59
|
url: "https://help.openai.com/en/articles/20001354-gpt-56-and-gpt-6-pro-in-chatgpt",
|
|
@@ -7,6 +7,17 @@ export interface ProfileKbSource {
|
|
|
7
7
|
checkedAt: string;
|
|
8
8
|
/** What the source is, when the URL alone does not say. */
|
|
9
9
|
note?: string;
|
|
10
|
+
/** Authority of the source, independent of whether its claim is advice or a measured result. */
|
|
11
|
+
authority?: "primary" | "secondary" | "local";
|
|
12
|
+
/** Section, source lines, or retained artifact locator supporting the claim. */
|
|
13
|
+
locator?: string;
|
|
14
|
+
}
|
|
15
|
+
/** A short claim with its qualifications in text, so composition cannot strip them. */
|
|
16
|
+
export interface ProfileKbClaim {
|
|
17
|
+
text: string;
|
|
18
|
+
basis: "documented" | "vendor-guidance" | "local-observation" | "hypothesis";
|
|
19
|
+
audience: "agent" | "operator";
|
|
20
|
+
sources: [ProfileKbSource, ...ProfileKbSource[]];
|
|
10
21
|
}
|
|
11
22
|
/**
|
|
12
23
|
* How to get the best from one harness.
|
|
@@ -18,20 +29,21 @@ export interface ProfileKbSource {
|
|
|
18
29
|
export interface ProfileKbHarness {
|
|
19
30
|
id: HarnessType;
|
|
20
31
|
name: string;
|
|
21
|
-
/**
|
|
32
|
+
/** Version of the checked CLI or upstream source; claim citations distinguish installation from documentation. */
|
|
22
33
|
version: string;
|
|
23
34
|
sources: ProfileKbSource[];
|
|
24
35
|
prompt: string[];
|
|
25
36
|
operator: string[];
|
|
37
|
+
/** Canonical claims; prompt/operator are projections retained for existing consumers. */
|
|
38
|
+
claims?: ProfileKbClaim[];
|
|
26
39
|
}
|
|
27
40
|
/** Where a model is reached. A model id means different things on each surface. */
|
|
28
41
|
export type ProfileKbSurface = "api" | "codex" | "chatgpt" | "router";
|
|
29
42
|
/**
|
|
30
43
|
* How to get the best from one model.
|
|
31
44
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* another.
|
|
45
|
+
* API facts, dated observations, and conditional vendor guidance. Sources
|
|
46
|
+
* establish their stated surface, not current availability or task quality.
|
|
35
47
|
*/
|
|
36
48
|
export interface ProfileKbModel {
|
|
37
49
|
/** Canonical vendor id. */
|
|
@@ -41,11 +53,12 @@ export interface ProfileKbModel {
|
|
|
41
53
|
surfaces: ProfileKbSurface[];
|
|
42
54
|
/** Other spellings that resolve to this model: router ids, harness aliases. */
|
|
43
55
|
aliases: string[];
|
|
44
|
-
/**
|
|
56
|
+
/** Documented API default mapped onto the portable scale (ultracode means max); harness defaults can differ. */
|
|
45
57
|
defaultEffort?: ReasoningEffort;
|
|
46
58
|
sources: ProfileKbSource[];
|
|
47
59
|
prompt: string[];
|
|
48
60
|
operator: string[];
|
|
61
|
+
claims?: ProfileKbClaim[];
|
|
49
62
|
}
|
|
50
63
|
/**
|
|
51
64
|
* A lesson this platform learned itself. It enters the knowledge base only
|