oh-my-knowledge 0.26.0 → 0.27.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 +109 -347
- package/README.zh.md +146 -376
- package/dist/src/analysis/report-diagnostics.d.ts +1 -1
- package/dist/src/analysis/report-diagnostics.js +1 -1
- package/dist/src/analysis/sample-diagnostics.d.ts +2 -2
- package/dist/src/analysis/sample-diagnostics.js +2 -2
- package/dist/src/authoring/generator.d.ts.map +1 -1
- package/dist/src/authoring/generator.js +9 -8
- package/dist/src/authoring/generator.js.map +1 -1
- package/dist/src/cli/cli-exit.d.ts +15 -0
- package/dist/src/cli/cli-exit.d.ts.map +1 -0
- package/dist/src/cli/cli-exit.js +19 -0
- package/dist/src/cli/cli-exit.js.map +1 -0
- package/dist/src/cli/commands/_shared.d.ts +12 -0
- package/dist/src/cli/commands/_shared.d.ts.map +1 -0
- package/dist/src/cli/commands/_shared.js +26 -0
- package/dist/src/cli/commands/_shared.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +2 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +137 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/commands/eval-debias.d.ts +2 -0
- package/dist/src/cli/commands/eval-debias.d.ts.map +1 -0
- package/dist/src/cli/commands/eval-debias.js +88 -0
- package/dist/src/cli/commands/eval-debias.js.map +1 -0
- package/dist/src/cli/commands/eval-gold.d.ts +2 -0
- package/dist/src/cli/commands/eval-gold.d.ts.map +1 -0
- package/dist/src/cli/commands/eval-gold.js +137 -0
- package/dist/src/cli/commands/eval-gold.js.map +1 -0
- package/dist/src/cli/commands/eval-runner.d.ts +2 -0
- package/dist/src/cli/commands/eval-runner.d.ts.map +1 -0
- package/dist/src/cli/commands/eval-runner.js +299 -0
- package/dist/src/cli/commands/eval-runner.js.map +1 -0
- package/dist/src/cli/commands/eval.d.ts +2 -0
- package/dist/src/cli/commands/eval.d.ts.map +1 -0
- package/dist/src/cli/commands/eval.js +16 -0
- package/dist/src/cli/commands/eval.js.map +1 -0
- package/dist/src/cli/commands/export-diff.d.ts +2 -0
- package/dist/src/cli/commands/export-diff.d.ts.map +1 -0
- package/dist/src/cli/commands/export-diff.js +177 -0
- package/dist/src/cli/commands/export-diff.js.map +1 -0
- package/dist/src/cli/commands/export-saturation.d.ts +2 -0
- package/dist/src/cli/commands/export-saturation.d.ts.map +1 -0
- package/dist/src/cli/commands/export-saturation.js +59 -0
- package/dist/src/cli/commands/export-saturation.js.map +1 -0
- package/dist/src/cli/commands/export-verdict.d.ts +2 -0
- package/dist/src/cli/commands/export-verdict.d.ts.map +1 -0
- package/dist/src/cli/commands/export-verdict.js +45 -0
- package/dist/src/cli/commands/export-verdict.js.map +1 -0
- package/dist/src/cli/commands/export.d.ts +2 -0
- package/dist/src/cli/commands/export.d.ts.map +1 -0
- package/dist/src/cli/commands/export.js +150 -0
- package/dist/src/cli/commands/export.js.map +1 -0
- package/dist/src/cli/commands/improve-failures.d.ts +2 -0
- package/dist/src/cli/commands/improve-failures.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-failures.js +59 -0
- package/dist/src/cli/commands/improve-failures.js.map +1 -0
- package/dist/src/cli/commands/improve-plan.d.ts +2 -0
- package/dist/src/cli/commands/improve-plan.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-plan.js +75 -0
- package/dist/src/cli/commands/improve-plan.js.map +1 -0
- package/dist/src/cli/commands/improve-samples.d.ts +2 -0
- package/dist/src/cli/commands/improve-samples.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-samples.js +120 -0
- package/dist/src/cli/commands/improve-samples.js.map +1 -0
- package/dist/src/cli/commands/improve-skill.d.ts +2 -0
- package/dist/src/cli/commands/improve-skill.d.ts.map +1 -0
- package/dist/src/cli/commands/improve-skill.js +115 -0
- package/dist/src/cli/commands/improve-skill.js.map +1 -0
- package/dist/src/cli/commands/improve.d.ts +2 -0
- package/dist/src/cli/commands/improve.d.ts.map +1 -0
- package/dist/src/cli/commands/improve.js +34 -0
- package/dist/src/cli/commands/improve.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts +2 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -0
- package/dist/src/cli/commands/init.js +110 -0
- package/dist/src/cli/commands/init.js.map +1 -0
- package/dist/src/cli/commands/observe.d.ts +2 -0
- package/dist/src/cli/commands/observe.d.ts.map +1 -0
- package/dist/src/cli/commands/observe.js +77 -0
- package/dist/src/cli/commands/observe.js.map +1 -0
- package/dist/src/cli/commands/registry.d.ts +11 -0
- package/dist/src/cli/commands/registry.d.ts.map +1 -0
- package/dist/src/cli/commands/registry.js +42 -0
- package/dist/src/cli/commands/registry.js.map +1 -0
- package/dist/src/cli/commands/studio.d.ts +2 -0
- package/dist/src/cli/commands/studio.d.ts.map +1 -0
- package/dist/src/cli/commands/studio.js +76 -0
- package/dist/src/cli/commands/studio.js.map +1 -0
- package/dist/src/cli/coverage-renderer.d.ts +1 -1
- package/dist/src/cli/coverage-renderer.js +1 -1
- package/dist/src/cli/i18n-dict.d.ts +4 -4
- package/dist/src/cli/i18n-dict.d.ts.map +1 -1
- package/dist/src/cli/i18n-dict.js +558 -564
- package/dist/src/cli/i18n-dict.js.map +1 -1
- package/dist/src/cli/index.js +43 -1516
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/parse-run-config.d.ts +3 -4
- package/dist/src/cli/parse-run-config.d.ts.map +1 -1
- package/dist/src/cli/parse-run-config.js +5 -5
- package/dist/src/cli/parse-run-config.js.map +1 -1
- package/dist/src/cli/parse-strict.d.ts +0 -13
- package/dist/src/cli/parse-strict.d.ts.map +1 -1
- package/dist/src/cli/parse-strict.js +2 -1
- package/dist/src/cli/parse-strict.js.map +1 -1
- package/dist/src/doctor/index.d.ts +1 -1
- package/dist/src/doctor/index.js +2 -2
- package/dist/src/doctor/index.js.map +1 -1
- package/dist/src/doctor/preflight.d.ts +2 -2
- package/dist/src/doctor/preflight.js +2 -2
- package/dist/src/eval-core/fact-checker.js +1 -1
- package/dist/src/eval-core/fact-checker.js.map +1 -1
- package/dist/src/eval-core/layer-gates.d.ts +1 -1
- package/dist/src/eval-core/layer-gates.js +1 -1
- package/dist/src/eval-core/verdict.d.ts +4 -4
- package/dist/src/eval-core/verdict.d.ts.map +1 -1
- package/dist/src/eval-core/verdict.js +2 -2
- package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts +15 -2
- package/dist/src/eval-workflows/batch-evaluation-workflow.d.ts.map +1 -1
- package/dist/src/eval-workflows/batch-evaluation-workflow.js +13 -2
- package/dist/src/eval-workflows/batch-evaluation-workflow.js.map +1 -1
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts +6 -3
- package/dist/src/eval-workflows/evaluation-pipeline.d.ts.map +1 -1
- package/dist/src/eval-workflows/evaluation-pipeline.js +10 -9
- package/dist/src/eval-workflows/evaluation-pipeline.js.map +1 -1
- package/dist/src/eval-workflows/run-evaluation.d.ts +1 -1
- package/dist/src/eval-workflows/run-evaluation.d.ts.map +1 -1
- package/dist/src/eval-workflows/run-evaluation.js +13 -6
- package/dist/src/eval-workflows/run-evaluation.js.map +1 -1
- package/dist/src/executors/script.d.ts.map +1 -1
- package/dist/src/executors/script.js +16 -3
- package/dist/src/executors/script.js.map +1 -1
- package/dist/src/grading/debias-validate.d.ts +2 -2
- package/dist/src/grading/debias-validate.js +2 -2
- package/dist/src/grading/gold-cli.d.ts +2 -5
- package/dist/src/grading/gold-cli.d.ts.map +1 -1
- package/dist/src/grading/gold-cli.js +4 -8
- package/dist/src/grading/gold-cli.js.map +1 -1
- package/dist/src/grading/judge.d.ts +1 -1
- package/dist/src/renderer/html-renderer.js +1 -1
- package/dist/src/renderer/layout.js +5 -5
- package/dist/src/renderer/layout.js.map +1 -1
- package/dist/src/renderer/skill-health-renderer.d.ts +1 -1
- package/dist/src/renderer/skill-health-renderer.js +1 -1
- package/dist/src/renderer/summary.js +8 -8
- package/dist/src/server/report-server.d.ts.map +1 -1
- package/dist/src/server/report-server.js +8 -7
- package/dist/src/server/report-server.js.map +1 -1
- package/dist/src/types/doctor.d.ts +3 -3
- package/dist/src/types/eval.d.ts +1 -1
- package/dist/src/types/report.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,12 +22,12 @@ omk answers with objective data, not gut feeling.
|
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
24
|
npm i oh-my-knowledge -g
|
|
25
|
-
omk
|
|
25
|
+
omk init my-eval && cd my-eval
|
|
26
26
|
# edit skills/code-review-v1/SKILL.md and skills/code-review-v2/SKILL.md with your two versions
|
|
27
|
-
omk
|
|
27
|
+
omk eval --control code-review-v1 --treatment code-review-v2 # → HTML report with verdict in 5 minutes
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Deeper: [use inside Claude Code / Codex](#use-inside-ai-coding-agents) · [`omk
|
|
30
|
+
Deeper: [use inside Claude Code / Codex](#use-inside-ai-coding-agents) · [`omk eval` flags](#omk-eval) · [artifact directory layout](#artifact-directory-layout) · [`--lang` / `OMK_LANG`](#environment-variables)
|
|
31
31
|
|
|
32
32
|
## Use inside AI Coding Agents
|
|
33
33
|
|
|
@@ -37,8 +37,8 @@ When the `omk` skill is available in Claude Code, you can invoke it directly lik
|
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
39
|
/omk eval # evaluate the artifact(s) in the current project
|
|
40
|
-
/omk
|
|
41
|
-
/omk
|
|
40
|
+
/omk improve skill # auto-iterate to improve an artifact
|
|
41
|
+
/omk improve samples # generate test cases
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
You can also just say "compare v1 vs v2 for me" or "improve this artifact" and omk picks the right command.
|
|
@@ -48,9 +48,9 @@ You can also just say "compare v1 vs v2 for me" or "improve this artifact" and o
|
|
|
48
48
|
Codex does not support Claude Code style `/omk ...` slash commands by default. In Codex, the usual pattern is to ask the agent to run the `omk` CLI directly, for example:
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
|
-
omk
|
|
52
|
-
omk
|
|
53
|
-
omk
|
|
51
|
+
omk eval
|
|
52
|
+
omk improve skill skills/my-skill.md
|
|
53
|
+
omk improve samples skills/my-skill.md
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
You can also describe the goal in natural language, such as "compare v1 vs v2" or "generate test cases for this skill".
|
|
@@ -61,13 +61,13 @@ Teams doing knowledge engineering produce lots of knowledge artifacts (skills to
|
|
|
61
61
|
|
|
62
62
|
## Key features
|
|
63
63
|
|
|
64
|
-
- **Pre-evaluation health check** — `omk doctor` runs as a mandatory gate before `
|
|
65
|
-
- **Controlled-variable offline
|
|
64
|
+
- **Pre-evaluation health check** — `omk doctor` runs as a mandatory gate before `omk eval`; checks skill readability, metadata, dependencies, samples contract — pure static, zero LLM calls (like lint + typecheck for knowledge artifacts). Executor / judge connectivity is a separate phase, controllable via `--skip-connectivity`
|
|
65
|
+
- **Controlled-variable offline eval** — fix the model and samples, vary only the artifact; works with Claude Code skills, CLAUDE.md prompts, RAG knowledge bases, or any markdown-based instruction
|
|
66
66
|
- **Six-dimension scoring** — separate signals for Fact / Behavior / LLM-judge / Cost / Efficiency / Stability, so a regression in one axis isn't hidden by gains in another
|
|
67
67
|
- **Production session observability** — parse Claude Code session JSONL traces, measure per-skill failure rate, latency, token cost, and knowledge-gap signals on real user sessions
|
|
68
68
|
- **Knowledge-gap detection** — severity-weighted signals (explicit markers / failed searches / hedging language / repeated failures) quantify risk exposure instead of claiming completeness
|
|
69
|
-
- **Pre-merge CI gate** — `omk
|
|
70
|
-
- **One-line ship/no-ship verdict** — `omk
|
|
69
|
+
- **Pre-merge CI gate** — `omk eval` enforces three-layer all-pass (fact + behavior + llm-judge) semantics, catching single-layer regressions a composite score would hide
|
|
70
|
+
- **One-line ship/no-ship verdict** — `omk eval` aggregates bootstrap CI / three-layer ci-gate / saturation / human α into a six-tier verdict (PROGRESS / CAUTIOUS / REGRESS / NOISE / UNDERPOWERED / SOLO) plus an action recommendation; the exit code reflects whether to ship
|
|
71
71
|
|
|
72
72
|
## Why omk over alternatives
|
|
73
73
|
|
|
@@ -90,17 +90,17 @@ RAG-specific evals: see RAGAS (separate niche, complementary to omk). Full compa
|
|
|
90
90
|
|
|
91
91
|
| Feature | What it does |
|
|
92
92
|
|---|---|
|
|
93
|
-
| **One-line verdict** | `omk
|
|
93
|
+
| **One-line verdict** | `omk eval` six-tier verdict + ship recommendation + exit-code routing; HTML pill shares the same rules |
|
|
94
94
|
| **Six-dim evaluation** | Fact / Behavior / LLM-judge / Cost / Efficiency / Stability shown independently |
|
|
95
95
|
| **Multi-executor** | Claude CLI / Claude SDK / Codex CLI / Codex SDK / OpenAI / Gemini / any custom command |
|
|
96
96
|
| **21+ assertion types** | substring, regex, JSON Schema, ROUGE/BLEU/Levenshtein similarity, agent tool-call assertions, semantic similarity, custom JS, and more |
|
|
97
97
|
| **Statistical rigor** | Bootstrap CI / Krippendorff α / length-debias / saturation curve — all on by default. [Details →](docs/statistical-rigor.md) |
|
|
98
|
-
| **Sample diagnostics** | `omk
|
|
99
|
-
| **Failure clustering** | `omk
|
|
98
|
+
| **Sample diagnostics** | `omk improve <id>` — 7 issue kinds (low discrimination / duplicates / ambiguous rubric / cost outliers / etc.) + 0-100 healthScore |
|
|
99
|
+
| **Failure clustering** | `omk improve failures <id>` — single LLM call clusters failed samples and emits per-cluster fixes |
|
|
100
100
|
| **RAG metrics** | `faithfulness` / `answer_relevancy` / `context_recall` — anti-hallucination + answer relevance + context coverage; auto-inherits length-debias |
|
|
101
101
|
| **Hard budget caps** | `--budget-usd / --budget-per-sample-usd / --budget-per-sample-ms` — abort on total-cost overrun, flag per-sample overruns; partial report persisted |
|
|
102
102
|
| **Construct-validity isolation** | `--strict-baseline` (default ON) cuts three contamination channels so baseline doesn't silently see the skill it's being compared against: (1) SDK skill auto-discovery, (2) subagent Skill tool, (3) cwd file-system access via the `skills/<name>/` symlink that's normally there for the treatment variant. eval.yaml `allowedSkills` for per-variant whitelists |
|
|
103
|
-
| **Sample design science** | Sample schema with `capability` / `difficulty` / `construct` / `provenance` metadata fields (HF Dataset Cards style). `
|
|
103
|
+
| **Sample design science** | Sample schema with `capability` / `difficulty` / `construct` / `provenance` metadata fields (HF Dataset Cards style). `omk improve` shows coverage breakdown + flags `rubric_clarity_low` (short rubric without grading keywords) / `capability_thin` (capability supported by ≤ N×0.2 samples). `omk improve samples` auto-stamps provenance. See [docs/sample-design-spec.md](docs/sample-design-spec.md) for the 8 industry-gap mapping |
|
|
104
104
|
| **Multi-judge ensemble** | `--judge-models claude:opus,openai:gpt-4o` cross-vendor scoring + agreement metrics |
|
|
105
105
|
| **MCP URL fetching** | pull content from private-doc URLs via an MCP server (SSO-protected knowledge bases, etc.) |
|
|
106
106
|
| **Blind A/B** | `--blind` hides variant names; HTML report has a reveal button |
|
|
@@ -359,351 +359,113 @@ Reports display results across six independent dimensions. The three scoring lay
|
|
|
359
359
|
|
|
360
360
|
## CLI reference
|
|
361
361
|
|
|
362
|
-
|
|
362
|
+
omk exposes a workflow CLI for knowledge artifacts. The public surface is organized around the way users work: initialize, check, evaluate, observe, improve, export evidence, and open the local studio.
|
|
363
363
|
|
|
364
|
-
|
|
365
|
-
omk bench run [options]
|
|
366
|
-
|
|
367
|
-
options:
|
|
368
|
-
--samples <path> sample file (default: eval-samples.json, also detects .yaml/.yml)
|
|
369
|
-
--skill-dir <path> artifact dir (default: skills)
|
|
370
|
-
--control <expr> control-group variant expression (experiment role = control)
|
|
371
|
-
--treatment <v1,v2> treatment-group variant expressions, comma-separated
|
|
372
|
-
at least one of --control / --treatment is required
|
|
373
|
-
(unless you use --config or --batch)
|
|
374
|
-
special values: baseline (empty artifact), git:name (git HEAD),
|
|
375
|
-
git:ref:name (specific commit), path with "/" (read file directly)
|
|
376
|
-
--config <path> YAML/JSON config file (evaluation-as-code); declares
|
|
377
|
-
samples + variants + model + executor in one file; CLI
|
|
378
|
-
flags override config fields when both are provided
|
|
379
|
-
--model <name> task execution model (default: sonnet)
|
|
380
|
-
--judge-models <list> judge config; 1 entry = single judge (default
|
|
381
|
-
claude:haiku), ≥ 2 entries = ensemble. Format:
|
|
382
|
-
`executor:model[,executor:model]`
|
|
383
|
-
--output-dir <path> output dir (default: ~/.oh-my-knowledge/reports/)
|
|
384
|
-
--no-judge skip the LLM judge
|
|
385
|
-
--no-cache disable result cache (on by default; identical inputs reuse)
|
|
386
|
-
--dry-run preview only
|
|
387
|
-
--blind blind mode
|
|
388
|
-
--concurrency <n> parallel tasks (default: 1)
|
|
389
|
-
--timeout <sec> per-task executor timeout (default: 120)
|
|
390
|
-
--repeat <n> repeat N times for variance analysis (default: 1)
|
|
391
|
-
--executor <name> executor (default: claude); supports custom commands
|
|
392
|
-
--skip-connectivity skip the LLM connectivity check (doctor still runs;
|
|
393
|
-
doctor is mandatory and has no skip flag).
|
|
394
|
-
Auto-applied on --resume (the original run already
|
|
395
|
-
verified connectivity).
|
|
396
|
-
--mcp-config <path> MCP config for fetching private-doc URLs via MCP Server
|
|
397
|
-
(default: .mcp.json in cwd)
|
|
398
|
-
--no-serve don't auto-start the report server after the run
|
|
399
|
-
--verbose print per-sample details (duration, tokens, output preview)
|
|
400
|
-
--batch batch mode: evaluate each artifact independently vs baseline
|
|
401
|
-
requires {name}.eval-samples.json paired with each artifact
|
|
402
|
-
--judge-repeat <n> run the LLM judge N times per (sample × dimension) and report stddev
|
|
403
|
-
--bootstrap enable distribution-free CIs: bootstrap CI per variant +
|
|
404
|
-
pairwise diff CI (CI containing 0 = not significant)
|
|
405
|
-
--bootstrap-samples N bootstrap resample count (default 1000)
|
|
406
|
-
--gold-dir <path> after the run, compare scores against the gold dataset
|
|
407
|
-
(Krippendorff α / κ / Pearson). Result is written to
|
|
408
|
-
report.meta.humanAgreement and shown in the HTML report
|
|
409
|
-
--no-debias-length revert to legacy v2-cot judge prompt (no "length is not
|
|
410
|
-
a quality signal" paragraph) — for byte-compat with
|
|
411
|
-
legacy reports whose hash predates v3-cot-length
|
|
412
|
-
--budget-usd <num> total cost cap (USD); on overrun the run aborts and
|
|
413
|
-
a partial report is persisted (`report.meta.budgetExhausted = true`)
|
|
414
|
-
--budget-per-sample-usd <num> per-sample cost cap; offending samples fail individually,
|
|
415
|
-
the run continues
|
|
416
|
-
--budget-per-sample-ms <num> per-sample latency cap (ms); same semantics as cost cap
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
**eval.yaml budget**: declare `budget: { totalUSD?, perSampleUSD?, perSampleMs? }` (all optional, must be ≥ 0). CLI flags of the same name override the config values.
|
|
420
|
-
|
|
421
|
-
**eval.yaml experiment-design fields**: the same flags above can be set in `eval.yaml` for reproducible experiment configuration (CLI > eval.yaml > default):
|
|
422
|
-
|
|
423
|
-
```yaml
|
|
424
|
-
samples: ./eval-samples.yaml
|
|
425
|
-
model: sonnet
|
|
426
|
-
repeat: 5 # multi-run variance, ≥ 1
|
|
427
|
-
judgeRepeat: 3 # per (sample × dim) judge self-consistency, ≥ 1
|
|
428
|
-
bootstrap: true # distribution-free CI per variant
|
|
429
|
-
bootstrapSamples: 2000 # default 1000, ≥ 100
|
|
430
|
-
goldDir: ./gold # post-run α / κ / Pearson against human anchor
|
|
431
|
-
lengthDebias: true # default; set false to reproduce pre-v0.21 hash
|
|
432
|
-
strictBaseline: true # default; set false to disable skill isolation
|
|
433
|
-
noJudge: false # default; set true to skip LLM judge entirely
|
|
434
|
-
judgeModels: # 1 entry = single judge; ≥ 2 = ensemble
|
|
435
|
-
- { executor: claude, model: opus }
|
|
436
|
-
- { executor: openai-api, model: gpt-4o }
|
|
437
|
-
variants:
|
|
438
|
-
- { name: baseline, role: control, artifact: baseline }
|
|
439
|
-
- { name: my-skill, role: treatment, artifact: ./skills/my-skill.md }
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
**Field entry points**: `bench run` reads every field above. `bench gate` goes through `parseRunConfig` and picks up the shared subset (`variants` / `executor` / `model` / `judgeModels` — both single-judge and ensemble — / `noJudge` / `noCache` / `blind` / `strictBaseline` / `budget` / `mcpConfig` / `variantAllowedSkills`); the experiment-design fields handled by `handleRun` (`repeat` / `judgeRepeat` / `bootstrap` / `bootstrapSamples` / `goldDir` / `lengthDebias`) are intentionally not read by `gate` and can be extended later. Other subcommands (`evolve` / `verdict` / `diff` / `analyze` / …) do not read `eval.yaml`.
|
|
443
|
-
|
|
444
|
-
**Difference from `cost_max` / `latency_max` assertions**: assertions are **per-sample scoring rules** (exceeding the cap fails that one assertion, the run continues); budget caps are **workflow-level hard limits** (`totalUSD` overrun aborts the run and persists a partial report; per-sample overruns fail the offending sample but the run continues). Assertions answer "is quality acceptable?"; budgets answer "are cost/time within the envelope?".
|
|
445
|
-
|
|
446
|
-
### `omk bench run --batch` (batch mode)
|
|
447
|
-
|
|
448
|
-
When `skills/` contains several **independent** artifacts, use `--batch` to evaluate each one against baseline and produce a BatchEvaluationReport with child EvaluationReports.
|
|
449
|
-
|
|
450
|
-
```
|
|
451
|
-
skills/
|
|
452
|
-
├── asset.md ← artifact file
|
|
453
|
-
├── asset.eval-samples.json ← paired samples
|
|
454
|
-
├── home.md
|
|
455
|
-
├── home.eval-samples.json
|
|
456
|
-
└── product/ ← directory format also supported
|
|
457
|
-
├── SKILL.md
|
|
458
|
-
└── eval-samples.json
|
|
459
|
-
```
|
|
460
|
-
|
|
461
|
-
Pairing rules:
|
|
462
|
-
|
|
463
|
-
- `{name}.md` → looks for `{name}.eval-samples.json` in the same dir
|
|
464
|
-
- `{name}/SKILL.md` → looks for `{name}/eval-samples.json`
|
|
465
|
-
- artifacts without paired samples are skipped with a warning
|
|
364
|
+
### `omk init`
|
|
466
365
|
|
|
467
366
|
```bash
|
|
468
|
-
omk
|
|
469
|
-
omk bench run --batch --dry-run
|
|
367
|
+
omk init [dir]
|
|
470
368
|
```
|
|
471
369
|
|
|
472
|
-
|
|
370
|
+
Scaffolds an evaluation project with two starter skill variants and an `eval-samples.json` file.
|
|
473
371
|
|
|
474
|
-
|
|
372
|
+
### `omk doctor`
|
|
475
373
|
|
|
476
374
|
```bash
|
|
477
|
-
#
|
|
478
|
-
omk
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
omk bench gen-samples --batch
|
|
482
|
-
|
|
483
|
-
# specify sample count
|
|
484
|
-
omk bench gen-samples skills/my-skill.md --count 10
|
|
375
|
+
omk doctor # check current dir / ./skills
|
|
376
|
+
omk doctor skills/v1.md # check one skill file
|
|
377
|
+
omk doctor skills/ --json # machine-readable output
|
|
378
|
+
omk doctor --gate; echo $? # silent CI gate
|
|
485
379
|
```
|
|
486
380
|
|
|
487
|
-
|
|
381
|
+
Pure static checks: skill readability, frontmatter, directory-skill layout, dependency hints, and sample contract. It is also run automatically before `omk eval`.
|
|
488
382
|
|
|
489
|
-
|
|
490
|
-
--batch batch-generate for every artifact missing samples
|
|
491
|
-
--count <n> samples per artifact (default: 5)
|
|
492
|
-
--model <name> model used for generation (default: sonnet)
|
|
493
|
-
--skill-dir <path> artifact dir (default: skills), used with --batch
|
|
494
|
-
```
|
|
495
|
-
|
|
496
|
-
### `omk bench evolve` (self-iterating improvement)
|
|
497
|
-
|
|
498
|
-
Lets the AI iterate an artifact automatically: evaluate → analyze weak spots → LLM rewrites → evaluate again → keep if the score went up, drop otherwise → repeat.
|
|
383
|
+
### `omk eval`
|
|
499
384
|
|
|
500
385
|
```bash
|
|
501
|
-
|
|
502
|
-
omk
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
omk
|
|
386
|
+
omk eval --control code-review-v1 --treatment code-review-v2
|
|
387
|
+
omk eval --config eval.yaml
|
|
388
|
+
omk eval --batch
|
|
389
|
+
omk eval gold compare <report-id> --gold-dir gold-dataset
|
|
390
|
+
omk eval debias length <report-id>
|
|
506
391
|
```
|
|
507
392
|
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
```
|
|
511
|
-
--rounds <n> max iteration rounds (default: 5)
|
|
512
|
-
--target <score> stop early when the score reaches this threshold
|
|
513
|
-
--samples <path> sample file (default: eval-samples.json)
|
|
514
|
-
--improve-model <name> model used for rewrites (default: sonnet)
|
|
515
|
-
```
|
|
393
|
+
Runs the offline evaluation, applies the verdict gate, persists the report, and returns a ship/no-ship exit code. Bootstrap CI is enabled by default on this workflow.
|
|
516
394
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
### `omk bench gate`
|
|
520
|
-
|
|
521
|
-
Run the evaluation inside CI. Exit code 0 on pass, 1 on fail — can be wired into gates directly.
|
|
522
|
-
|
|
523
|
-
The gate is **three-layer all-pass**: `avgFactScore >= threshold AND avgBehaviorScore >= threshold AND avgJudgeScore >= threshold`. Any layer below threshold is FAIL, and the output shows which layer broke. This stops cases like `fact 4.5→2.5 but judge 3→5` from passing via composite averaging — if one layer regresses, the gate catches it.
|
|
524
|
-
|
|
525
|
-
```bash
|
|
526
|
-
omk bench gate [options]
|
|
527
|
-
--threshold <number> per-layer minimum score (default: 3.5); applied
|
|
528
|
-
independently to fact / behavior / judge
|
|
529
|
-
```
|
|
395
|
+
Common options:
|
|
530
396
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
```bash
|
|
556
|
-
omk bench report [options]
|
|
557
|
-
--port <number> server port (default: 7799)
|
|
558
|
-
```
|
|
559
|
-
|
|
560
|
-
### `omk bench init`
|
|
561
|
-
|
|
562
|
-
```bash
|
|
563
|
-
omk bench init [dir] # scaffold an eval project
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
### `omk bench gold` (human gold anchor)
|
|
567
|
-
|
|
568
|
-
Bring a human (or stronger-model proxy) annotation as an external anchor and compute Krippendorff α / weighted κ / Pearson against the LLM judge. Answers "is the judge correct?", complementary to Bootstrap CI's "is the judge stable?".
|
|
569
|
-
|
|
570
|
-
```bash
|
|
571
|
-
omk bench gold init [--out <dir>] [--annotator <id>] # scaffold a dataset template
|
|
572
|
-
omk bench gold validate <dir> # check schema (annotator / date / version / score range)
|
|
573
|
-
omk bench gold compare <reportId> --gold-dir <dir> # compare against an existing report; prints α/κ/r + verdict
|
|
574
|
-
```
|
|
575
|
-
|
|
576
|
-
Dataset layout:
|
|
577
|
-
|
|
578
|
-
```
|
|
579
|
-
gold-dir/
|
|
580
|
-
├── metadata.yaml # annotator (must NOT match the omk judge model — would trigger contamination warning) + date + version
|
|
581
|
-
└── annotations.yaml # [{ sample_id, score, reason? }] concatenated by sample_id
|
|
582
|
-
```
|
|
583
|
-
|
|
584
|
-
α thresholds follow Krippendorff (2011): ≥ 0.80 strong agreement; [0.67, 0.80) acceptable; < 0.40 large divergence — investigate rubric / prompt.
|
|
585
|
-
|
|
586
|
-
Full demo: [examples/gold-dataset/](examples/gold-dataset/)
|
|
587
|
-
|
|
588
|
-
### `omk bench debias-validate length` (judge length-bias check)
|
|
589
|
-
|
|
590
|
-
Re-judges every (sample × variant) of an existing report with the OPPOSITE length-debias setting (v3-cot-length ↔ v2-cot) and bootstraps the CI on the score difference. A significant shift = the judge is sensitive to the length-debias instruction (indirect evidence of length bias).
|
|
591
|
-
|
|
592
|
-
```bash
|
|
593
|
-
omk bench debias-validate length <reportId> [options]
|
|
594
|
-
--variant <name> check a single variant only
|
|
595
|
-
--judge-models <executor:model> override the report's judge (single-judge only)
|
|
596
|
-
--bootstrap-samples N bootstrap iterations (default 1000)
|
|
597
|
-
--seed N deterministic seed
|
|
598
|
-
```
|
|
599
|
-
|
|
600
|
-
Verdict bucket: none / weak / medium (|0.2-0.5|) / strong (≥ 0.5). Re-judge cost roughly doubles vs the original judge pass.
|
|
601
|
-
|
|
602
|
-
### `omk bench saturation` (saturation curve)
|
|
603
|
-
|
|
604
|
-
Answers "have I run enough samples?". Reads the saturation trace from an existing report (no re-run). Verdicts only emit when the original run used `--repeat ≥ 5`; below that, the curve is plotted but no verdict is computed.
|
|
605
|
-
|
|
606
|
-
```bash
|
|
607
|
-
omk bench saturation <reportId> [options]
|
|
608
|
-
--variant <name> single-variant view
|
|
609
|
-
--method <m> slope | bootstrap-ci-width (default) | plateau-height
|
|
610
|
-
--threshold <num> method-specific cutoff (defaults match the method)
|
|
611
|
-
--window <num> consecutive windows that must satisfy the threshold (default 3)
|
|
397
|
+
```text
|
|
398
|
+
--samples <path> sample file (default: eval-samples.json, also detects .yaml/.yml)
|
|
399
|
+
--skill-dir <path> artifact dir (default: skills)
|
|
400
|
+
--control <expr> control variant expression
|
|
401
|
+
--treatment <v1,v2> treatment variants, comma-separated
|
|
402
|
+
--config <path> YAML/JSON evaluation config
|
|
403
|
+
--model <name> task execution model (default: sonnet)
|
|
404
|
+
--judge-models <list> judge config, e.g. claude:haiku or claude:opus,openai:gpt-4o
|
|
405
|
+
--executor <name> claude / claude-sdk / codex / codex-sdk / openai-api / gemini / custom
|
|
406
|
+
--no-judge skip LLM judge
|
|
407
|
+
--dry-run preview only
|
|
408
|
+
--blind blind A/B mode
|
|
409
|
+
--concurrency <n> parallel tasks
|
|
410
|
+
--timeout <sec> per-task timeout
|
|
411
|
+
--repeat <n> repeat N times for variance analysis
|
|
412
|
+
--batch evaluate each artifact independently vs baseline
|
|
413
|
+
--bootstrap-samples N bootstrap resample count (default 1000)
|
|
414
|
+
--threshold <number> verdict layer-gate threshold (default 3.5)
|
|
415
|
+
--trivial-diff <num> practically tiny diff cutoff (default 0.1)
|
|
416
|
+
--report-only produce the report and print verdict, but always exit 0
|
|
417
|
+
--no-gate alias for --report-only
|
|
418
|
+
--skip-connectivity skip model connectivity check; doctor still runs
|
|
419
|
+
--no-serve do not auto-start the report server after evaluation
|
|
612
420
|
```
|
|
613
421
|
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
### `omk bench verdict` (one-line ship/no-ship verdict)
|
|
617
|
-
|
|
618
|
-
Aggregates bootstrap CI / three-layer ci-gate / saturation / human α into one of six verdicts: **PROGRESS** (significant improvement, all three layers pass → exit 0), **CAUTIOUS** (real gain but with a warning — broken gate / trivially small / control regressed → exit 1), **REGRESS** (significant negative shift → exit 1), **NOISE** (CI spans 0, undecidable → exit 1), **UNDERPOWERED** (sample size too small → exit 1), **SOLO** (single variant; exit 0 only if its own three-layer gate passes).
|
|
422
|
+
### `omk observe`
|
|
619
423
|
|
|
620
424
|
```bash
|
|
621
|
-
omk
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
425
|
+
omk observe ~/.claude/projects/-Users-you-Documents-my-project
|
|
426
|
+
omk observe ~/.claude/projects/my-project --last 7d
|
|
427
|
+
omk observe ~/.claude/projects/my-project --from 2026-04-01T00:00:00Z --to 2026-04-15T23:59:59Z
|
|
428
|
+
omk observe ~/.claude/projects/my-project --skills audit,polish
|
|
429
|
+
omk observe ~/.claude/projects/my-project --kb /path/to/project
|
|
625
430
|
```
|
|
626
431
|
|
|
627
|
-
|
|
432
|
+
Turns real Claude Code session traces into skill-health reports: knowledge usage, gap signals, execution stability, tokens, and latency. This is production observation, not production scoring.
|
|
628
433
|
|
|
629
|
-
### `omk
|
|
630
|
-
|
|
631
|
-
Answers "is the conclusion polluted by bad samples?". Diagnoses 7 sample-quality issues: `flat_scores` (low discrimination), `all_pass` (too easy), `all_fail` (broken — error severity), `near_duplicate` (prompt ROUGE-1 ≥ threshold), `ambiguous_rubric` (high judge stddev across `--judge-repeat ≥ 2`), `cost_outlier` (≥ k× median), `latency_outlier` (≥ k× median), `error_prone` (executor failure).
|
|
434
|
+
### `omk improve`
|
|
632
435
|
|
|
633
436
|
```bash
|
|
634
|
-
omk
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
--latency-k <num> latency-outlier multiplier vs median (default 3)
|
|
640
|
-
--flat <num> flat_scores spread threshold (default 0.5)
|
|
437
|
+
omk improve <report-id> # sample diagnostics and repair plan
|
|
438
|
+
omk improve plan <report-id> # explicit repair-plan form
|
|
439
|
+
omk improve failures <report-id> # cluster failed samples into root causes
|
|
440
|
+
omk improve samples [skill] # generate or fill eval samples
|
|
441
|
+
omk improve skill <skill> # iterate a skill through eval-driven rewrites
|
|
641
442
|
```
|
|
642
443
|
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
### `omk bench failures` (failure case LLM clustering)
|
|
444
|
+
Use this after `omk eval` or `omk observe` to decide what to change next. Generated sample assertions use English, numbers, or code tokens so they are easier to compare across bilingual outputs.
|
|
646
445
|
|
|
647
|
-
|
|
446
|
+
### `omk export`
|
|
648
447
|
|
|
649
448
|
```bash
|
|
650
|
-
omk
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
449
|
+
omk export <report-id> --format html
|
|
450
|
+
omk export <report-id> --format markdown --out report.md
|
|
451
|
+
omk export <report-id> --format github-summary
|
|
452
|
+
omk export diff <report-id> --regressions-only
|
|
453
|
+
omk export verdict <report-id>
|
|
454
|
+
omk export saturation <report-id>
|
|
655
455
|
```
|
|
656
456
|
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
### `omk bench diff` (report comparison — single / dual mode)
|
|
457
|
+
Exports evidence for PRs, CI summaries, and audit trails. HTML writes a standalone report file; markdown and GitHub summary print to stdout unless `--out` is provided. The export subtree also owns sample/report diffing, persisted verdict reads, and saturation inspection.
|
|
660
458
|
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
**Dual-arg mode** (cross-report variant-level): `omk bench diff <reportId1> <reportId2>` — compare the same variant across two reports (legacy behavior preserved).
|
|
459
|
+
### `omk studio`
|
|
664
460
|
|
|
665
461
|
```bash
|
|
666
|
-
omk
|
|
667
|
-
omk
|
|
462
|
+
omk studio
|
|
463
|
+
omk studio --port 7799
|
|
464
|
+
omk studio --reports-dir ~/.oh-my-knowledge/reports
|
|
465
|
+
omk studio --no-open
|
|
668
466
|
```
|
|
669
467
|
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
## `omk analyze` — production observability
|
|
673
|
-
|
|
674
|
-
`omk bench run` is **offline evaluation** (fixed controls, repeatable, scored). Production is different — no control group, no ground truth, no repetition, so scoring isn't valid there. `omk analyze` turns existing Claude Code session traces into **skill-health reports** (coverage, gap signals, execution stability, tokens/latency per skill). It gives you clues about **which skill is worth re-evaluating offline**, not a production score.
|
|
675
|
-
|
|
676
|
-
```bash
|
|
677
|
-
# analyze all cc sessions of the current project (auto-infers kb from the trace)
|
|
678
|
-
omk analyze ~/.claude/projects/-Users-you-Documents-my-project
|
|
679
|
-
|
|
680
|
-
# restrict to the last 7 days / 24 hours / 30 minutes
|
|
681
|
-
omk analyze ~/.claude/projects/my-project --last 7d
|
|
682
|
-
|
|
683
|
-
# absolute time window
|
|
684
|
-
omk analyze ~/.claude/projects/my-project --from 2026-04-01T00:00:00Z --to 2026-04-15T23:59:59Z
|
|
685
|
-
|
|
686
|
-
# whitelist specific skills
|
|
687
|
-
omk analyze ~/.claude/projects/my-project --skills audit,polish
|
|
688
|
-
|
|
689
|
-
# override the inferred knowledge-base root
|
|
690
|
-
omk analyze ~/.claude/projects/my-project --kb /path/to/project
|
|
691
|
-
```
|
|
692
|
-
|
|
693
|
-
The command writes `~/.oh-my-knowledge/analyses/<timestamp>-skill-health.json`. Browse results alongside bench reports with `omk bench report` — the homepage has a "📊 Skill Health Reports" link, and each skill card also has a "trend →" link to its time-series view. For two reports side-by-side, use the compare selector on `/analyses`.
|
|
694
|
-
|
|
695
|
-
**What you get per skill:**
|
|
696
|
-
|
|
697
|
-
- **Knowledge usage** — which KB files this skill actually read (coverage %)
|
|
698
|
-
- **Knowledge gaps** — four weighted signals (failed search / model-flagged gap / hedging / repeated miss); hedging goes through an LLM-assisted classifier to filter out business-possibility hedging vs genuine knowledge uncertainty
|
|
699
|
-
- **Execution stability** — tool-failure rate; a skill with > 20% failures gets a warning that its gap signals may be environmental noise rather than real knowledge gaps
|
|
700
|
-
- **Usage cost** — billable tokens (input+output) separate from cached tokens, total duration
|
|
701
|
-
|
|
702
|
-
**What this is NOT:**
|
|
703
|
-
|
|
704
|
-
- Not a general APM (request/response/latency tracing is Langfuse / Datadog territory)
|
|
705
|
-
- Not streaming / alerting (batch only — run on a cron if you want periodic snapshots)
|
|
706
|
-
- Not a production score (no control group, no ground truth — use `omk bench run` for scoring)
|
|
468
|
+
Starts the local knowledge workbench for browsing reports and observation analyses.
|
|
707
469
|
|
|
708
470
|
## Executors
|
|
709
471
|
|
|
@@ -721,15 +483,15 @@ The command writes `~/.oh-my-knowledge/analyses/<timestamp>-skill-health.json`.
|
|
|
721
483
|
|
|
722
484
|
API-direct executors support custom base URLs via env: `ANTHROPIC_BASE_URL`, `OPENAI_BASE_URL`.
|
|
723
485
|
|
|
724
|
-
Codex construct-validity notes: (1) `codex` uses the `codex` binary on `PATH`; `codex-sdk` uses the bundled `@openai/codex` binary resolved by `@openai/codex-sdk`. Reports persist per-variant `meta.executorRuntimes`, `meta.executorRuntime`, and per-judge `meta.judgeModels[].runtime` fingerprints (binary or SDK version + capability snapshot), and
|
|
486
|
+
Codex construct-validity notes: (1) `codex` uses the `codex` binary on `PATH`; `codex-sdk` uses the bundled `@openai/codex` binary resolved by `@openai/codex-sdk`. Reports persist per-variant `meta.executorRuntimes`, `meta.executorRuntime`, and per-judge `meta.judgeModels[].runtime` fingerprints (binary or SDK version + capability snapshot), and strict comparability checks warn when runtime fingerprints cannot be audited. If runtime fingerprints differ, treat results as an executor-runtime comparison, not only prompt/template behavior. (2) Both executors isolate user-level config: `codex` passes `--ephemeral` + `--ignore-user-config`; `codex-sdk` redirects `$CODEX_HOME` to a per-process tmp dir (auth.json symlinked through). User-level `~/.codex/config.toml` does not leak into eval runs in either case.
|
|
725
487
|
|
|
726
488
|
### Custom executor
|
|
727
489
|
|
|
728
490
|
Any shell command can serve as an executor, communicating via stdin/stdout JSON:
|
|
729
491
|
|
|
730
492
|
```bash
|
|
731
|
-
omk
|
|
732
|
-
omk
|
|
493
|
+
omk eval --executor "python my_provider.py"
|
|
494
|
+
omk eval --executor "./my-executor.sh"
|
|
733
495
|
```
|
|
734
496
|
|
|
735
497
|
**Protocol:**
|
|
@@ -770,28 +532,28 @@ When both `--control` and `--treatment` are omitted, use `--config eval.yaml` or
|
|
|
770
532
|
|
|
771
533
|
```bash
|
|
772
534
|
# explicit: one control, one or more treatments
|
|
773
|
-
omk
|
|
774
|
-
omk
|
|
535
|
+
omk eval --control v1 --treatment v2
|
|
536
|
+
omk eval --control baseline --treatment v1,v2,v3
|
|
775
537
|
|
|
776
538
|
# compare empty artifact vs explicit artifact
|
|
777
|
-
omk
|
|
539
|
+
omk eval --control baseline --treatment my-skill
|
|
778
540
|
|
|
779
541
|
# observe project-level runtime context in isolation (use a self-describing label)
|
|
780
|
-
omk
|
|
542
|
+
omk eval --control baseline --treatment project-env@/path/to/target-project
|
|
781
543
|
|
|
782
544
|
# compare "project-level runtime context" vs "explicit artifact injection"
|
|
783
|
-
omk
|
|
545
|
+
omk eval \
|
|
784
546
|
--control project-env@/path/to/target-project \
|
|
785
547
|
--treatment /path/to/target-project/.claude/skills/prd/SKILL.md@/path/to/target-project
|
|
786
548
|
|
|
787
549
|
# before vs after (old version read from git history)
|
|
788
|
-
omk
|
|
550
|
+
omk eval --control git:my-skill --treatment my-skill
|
|
789
551
|
|
|
790
552
|
# direct file paths
|
|
791
|
-
omk
|
|
553
|
+
omk eval --control ./old-skill.md --treatment ./new-skill.md
|
|
792
554
|
|
|
793
555
|
# config-file driven (evaluation-as-code)
|
|
794
|
-
omk
|
|
556
|
+
omk eval --config eval.yaml
|
|
795
557
|
```
|
|
796
558
|
|
|
797
559
|
**Prerequisites:**
|
|
@@ -822,7 +584,7 @@ In OMK, `agent` is not a catch-all term and neither is `skill`. A cleaner phrasi
|
|
|
822
584
|
#### Recommended executor
|
|
823
585
|
|
|
824
586
|
```bash
|
|
825
|
-
omk
|
|
587
|
+
omk eval --executor claude-sdk
|
|
826
588
|
```
|
|
827
589
|
|
|
828
590
|
#### Agent-related assertions
|
|
@@ -842,7 +604,7 @@ omk bench run --executor claude-sdk
|
|
|
842
604
|
No system prompt and no knowledge-carrying project dir. Requires at least one treatment to compare against:
|
|
843
605
|
|
|
844
606
|
```bash
|
|
845
|
-
omk
|
|
607
|
+
omk eval \
|
|
846
608
|
--executor claude-sdk \
|
|
847
609
|
--control baseline \
|
|
848
610
|
--treatment my-skill
|
|
@@ -853,7 +615,7 @@ omk bench run \
|
|
|
853
615
|
No system prompt, but runs inside a project dir. This is **not** a strict "bare baseline" — it is "empty artifact + project-level runtime context".
|
|
854
616
|
|
|
855
617
|
```bash
|
|
856
|
-
omk
|
|
618
|
+
omk eval \
|
|
857
619
|
--executor claude-sdk \
|
|
858
620
|
--control baseline \
|
|
859
621
|
--treatment project-env@/path/to/target-project
|
|
@@ -864,7 +626,7 @@ omk bench run \
|
|
|
864
626
|
Inject an external `SKILL.md` as the artifact while also keeping the project dir. Good for contrasting "project-level runtime context" vs "explicit single-artifact injection".
|
|
865
627
|
|
|
866
628
|
```bash
|
|
867
|
-
omk
|
|
629
|
+
omk eval \
|
|
868
630
|
--executor claude-sdk \
|
|
869
631
|
--control project-env@/path/to/target-project \
|
|
870
632
|
--treatment /path/to/target-project/.claude/skills/prd/SKILL.md@/path/to/target-project
|
|
@@ -875,7 +637,7 @@ omk bench run \
|
|
|
875
637
|
For PRD / complex business-knowledge scenarios, start with:
|
|
876
638
|
|
|
877
639
|
```bash
|
|
878
|
-
omk
|
|
640
|
+
omk eval \
|
|
879
641
|
--executor claude-sdk \
|
|
880
642
|
--samples skills/evaluate-review/eval-samples.yaml \
|
|
881
643
|
--control baseline \
|
|
@@ -885,7 +647,7 @@ omk bench run \
|
|
|
885
647
|
If you want to prove whether "the knowledge sitting inside the project directory" is effective on its own, add a second treatment:
|
|
886
648
|
|
|
887
649
|
```bash
|
|
888
|
-
omk
|
|
650
|
+
omk eval \
|
|
889
651
|
--executor claude-sdk \
|
|
890
652
|
--samples skills/evaluate-review/eval-samples.yaml \
|
|
891
653
|
--control baseline \
|
|
@@ -906,32 +668,32 @@ omk bench run \
|
|
|
906
668
|
# GLM (Zhipu)
|
|
907
669
|
export OPENAI_API_KEY="your Zhipu API key"
|
|
908
670
|
export OPENAI_BASE_URL="https://open.bigmodel.cn/api/paas/v4"
|
|
909
|
-
omk
|
|
671
|
+
omk eval --executor openai-api --model glm-4-plus \
|
|
910
672
|
--judge-models openai-api:glm-4-plus --no-cache
|
|
911
673
|
|
|
912
674
|
# Qwen (Alibaba)
|
|
913
675
|
export OPENAI_API_KEY="your Qwen API key"
|
|
914
676
|
export OPENAI_BASE_URL="https://dashscope.aliyuncs.com/compatible-mode/v1"
|
|
915
|
-
omk
|
|
677
|
+
omk eval --executor openai-api --model qwen-plus \
|
|
916
678
|
--judge-models openai-api:qwen-plus
|
|
917
679
|
|
|
918
680
|
# DeepSeek
|
|
919
681
|
export OPENAI_API_KEY="your DeepSeek API key"
|
|
920
682
|
export OPENAI_BASE_URL="https://api.deepseek.com"
|
|
921
|
-
omk
|
|
683
|
+
omk eval --executor openai-api --model deepseek-chat \
|
|
922
684
|
--judge-models openai-api:deepseek-chat
|
|
923
685
|
|
|
924
686
|
# Moonshot (Kimi)
|
|
925
687
|
export OPENAI_API_KEY="your Moonshot API key"
|
|
926
688
|
export OPENAI_BASE_URL="https://api.moonshot.cn/v1"
|
|
927
|
-
omk
|
|
689
|
+
omk eval --executor openai-api --model moonshot-v1-8k \
|
|
928
690
|
--judge-models openai-api:moonshot-v1-8k
|
|
929
691
|
```
|
|
930
692
|
|
|
931
693
|
**Ollama local model:**
|
|
932
694
|
|
|
933
695
|
```bash
|
|
934
|
-
omk
|
|
696
|
+
omk eval --executor "python examples/custom-executor/ollama-executor.py" \
|
|
935
697
|
--model llama3 --no-judge
|
|
936
698
|
```
|
|
937
699
|
|
|
@@ -947,7 +709,7 @@ omk bench run --executor "python examples/custom-executor/ollama-executor.py" \
|
|
|
947
709
|
| Variable | Description |
|
|
948
710
|
|---|---|
|
|
949
711
|
| `CCV_PROXY_URL` | proxy requests through cc-viewer for live eval-traffic visualization |
|
|
950
|
-
| `
|
|
712
|
+
| `OMK_REPORT_PORT` | report server port (default: 7799) |
|
|
951
713
|
|
|
952
714
|
## Requirements
|
|
953
715
|
|
|
@@ -966,7 +728,7 @@ This tool is designed for **local trusted environments** (dev machines, CI pipel
|
|
|
966
728
|
|
|
967
729
|
**Recommendations:**
|
|
968
730
|
|
|
969
|
-
- Do not expose
|
|
731
|
+
- Do not expose the local report server on the public internet (no auth)
|
|
970
732
|
- Don't use third-party eval-samples you haven't vetted
|
|
971
733
|
- Custom assertions have a 30-second timeout but no sandbox isolation
|
|
972
734
|
|