From 066cbb7037b072880f3fc4fa8d29efdfa3cdccd7 Mon Sep 17 00:00:00 2001 From: Julian lechner Date: Wed, 30 Sep 2026 09:38:41 +0200 Subject: [PATCH] fix(prompt-budget): count all startup skill metadata --- adapters/prompt-budget-baseline.json | 10 +++++++--- adapters/prompt-budget-baseline.tsv | 8 +++++--- scripts/lib/prompt-budget.py | 8 +++++--- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/adapters/prompt-budget-baseline.json b/adapters/prompt-budget-baseline.json index 0c49676..ac739ab 100644 --- a/adapters/prompt-budget-baseline.json +++ b/adapters/prompt-budget-baseline.json @@ -4,11 +4,15 @@ "permanent_context_hard_limit_tokens": 6000, "metrics": { "permanent_context_tokens": { - "claude": 1481, - "codex": 1481 + "claude": 4029, + "codex": 2603 + }, + "instruction_tokens": { + "claude": 1479, + "codex": 1479 }, "skill_metadata_tokens": { - "claude": 1124, + "claude": 2550, "codex": 1124 }, "rule_catalog_tokens": { diff --git a/adapters/prompt-budget-baseline.tsv b/adapters/prompt-budget-baseline.tsv index c7645ab..08e78fd 100644 --- a/adapters/prompt-budget-baseline.tsv +++ b/adapters/prompt-budget-baseline.tsv @@ -1,7 +1,9 @@ metric client baseline_tokens -permanent_context_tokens claude 1481 -permanent_context_tokens codex 1481 -skill_metadata_tokens claude 1124 +permanent_context_tokens claude 4029 +permanent_context_tokens codex 2603 +instruction_tokens claude 1479 +instruction_tokens codex 1479 +skill_metadata_tokens claude 2550 skill_metadata_tokens codex 1124 rule_catalog_tokens claude 28036 rule_catalog_tokens codex 8058 diff --git a/scripts/lib/prompt-budget.py b/scripts/lib/prompt-budget.py index 493aeb5..c0c9ae4 100644 --- a/scripts/lib/prompt-budget.py +++ b/scripts/lib/prompt-budget.py @@ -9,6 +9,7 @@ from pathlib import Path METRICS = ( 'permanent_context_tokens', + 'instruction_tokens', 'skill_metadata_tokens', 'rule_catalog_tokens', 'agent_metadata_tokens', @@ -35,7 +36,6 @@ def measure_package(package, client): skill_metadata_bytes = sum( len(read_frontmatter(path)) for path in skill_root.rglob('SKILL.md') - if path.relative_to(skill_root).parts[0] != 'rules' ) if client == 'claude': @@ -58,7 +58,8 @@ def measure_package(package, client): agent_metadata_bytes += sum(len(agent.get(key, '').encode('utf-8')) for key in ('name', 'description')) return { - 'permanent_context_tokens': tokens(instruction_bytes), + 'permanent_context_tokens': tokens(instruction_bytes + skill_metadata_bytes), + 'instruction_tokens': tokens(instruction_bytes), 'skill_metadata_tokens': tokens(skill_metadata_bytes), 'rule_catalog_tokens': tokens(rule_catalog_bytes), 'agent_metadata_tokens': tokens(agent_metadata_bytes), @@ -133,7 +134,8 @@ def main(): current = measure(root) failures, warnings = evaluate(current, baseline) - print('Prompt Budget') + print('Prompt Budget (UTF-8 bytes / 4 estimates; not runtime token measurements)') + print('Permanent context includes global instructions and all skill frontmatter; agent metadata, plugins, and tool schemas are separate or excluded.') if args.summary: for metric in METRICS: for client in CLIENTS: