{
 "measurement": "What a skill description costs per character above 300, and whether the documented 1024-character maximum is visible in Claude Code",
 "ran_on": "2026-08-20",
 "claude_code_version": "2.1.235",
 "claude_code_version_recorded_at_runtime": "2.1.235 (Claude Code)",
 "prompt": "Reply with only: OK",
 "skills_per_cell": 40,
 "documented_max_chars": 1024,
 "documented_max_quote": "Anthropic's Agent Skills page, under Skill structure, Field requirements: '`description`: Must be non-empty, Maximum 1024 characters, Cannot contain XML tags'. Read 2026-08-20.",
 "the_prediction": {
  "registered_before_the_run": "That a truncating limit would flatten the cost curve AT 1024, and that an unenforced limit would leave cost rising linearly through it, with a predicted gap of about 6,400 tokens between the 1024 and 1600 cells based on this site's published rate of 0.276 tokens per character.",
  "outcome": "REFUTED, and the premise it rested on was wrong",
  "how": "The measured gap between 1024 and 1600 is -207 tokens, not 6,400. The prediction assumed 0.276 tokens per character still applies at these lengths. It does not: this site's own published post states that rate is valid only to 300 characters, and the whole sweep sits above that. The prediction was built on a figure outside its stated range, which is the same error this site warns readers about."
 },
 "method": {
  "shape": "40 skills per cell, description length swept across the documented boundary at 512, 900, 1024, 1200, 1600 characters, 5 rounds each, trivial prompt, nothing invoked.",
  "fixture_reused": "build() and _desc() are imported from skills-desc-at-scale-run.py, the harness behind this site's published description-length figures, and the emitted description is measured back off disk.",
  "estimators": "Both are computed. The floor returned a single value in every round of this run, so the two are identical by construction here rather than by agreement, and that is stated rather than counted as corroboration.",
  "controls": {
   "paired": "Floor re-measured every round.",
   "arrival": "Every reply must be exactly OK; asserted before assembling.",
   "isolation": "--setting-sources project asserted onto argv.",
   "fixture_measured": "Description length read back off the generated SKILL.md."
  }
 },
 "results": {
  "floor": {
   "mode": 22976,
   "estimator_refused": null,
   "rounds": 5,
   "min": 22976,
   "max": 22976,
   "spread": 0,
   "all_rounds": [
    22976,
    22976,
    22976,
    22976,
    22976
   ],
   "mode_seen": 5
  },
  "by_description_length": {
   "512": {
    "requested_chars": 512,
    "measured_chars_on_disk": 511,
    "skills": 40,
    "estimator_A_mode_of_deltas": 6320,
    "estimator_B_absolute_minus_floor": 6320,
    "estimators_identical_here": true,
    "observed_range": [
     6320,
     6320
    ],
    "spread": 0,
    "rounds": 5,
    "per_skill": 158.0
   },
   "900": {
    "requested_chars": 900,
    "measured_chars_on_disk": 900,
    "skills": 40,
    "estimator_A_mode_of_deltas": 7056,
    "estimator_B_absolute_minus_floor": 7056,
    "estimators_identical_here": true,
    "observed_range": [
     6858,
     7056
    ],
    "spread": 198,
    "rounds": 5,
    "per_skill": 176.4
   },
   "1024": {
    "requested_chars": 1024,
    "measured_chars_on_disk": 1023,
    "skills": 40,
    "estimator_A_mode_of_deltas": 7164,
    "estimator_B_absolute_minus_floor": 7164,
    "estimators_identical_here": true,
    "observed_range": [
     7164,
     7164
    ],
    "spread": 0,
    "rounds": 5,
    "per_skill": 179.1
   },
   "1200": {
    "requested_chars": 1200,
    "measured_chars_on_disk": 1200,
    "skills": 40,
    "estimator_A_mode_of_deltas": 6862,
    "estimator_B_absolute_minus_floor": 6862,
    "estimators_identical_here": true,
    "observed_range": [
     6862,
     6862
    ],
    "spread": 0,
    "rounds": 5,
    "per_skill": 171.6
   },
   "1600": {
    "requested_chars": 1600,
    "measured_chars_on_disk": 1600,
    "skills": 40,
    "estimator_A_mode_of_deltas": 6957,
    "estimator_B_absolute_minus_floor": 6957,
    "estimators_identical_here": true,
    "observed_range": [
     6759,
     6957
    ],
    "spread": 198,
    "rounds": 5,
    "per_skill": 173.9
   }
  },
  "marginal_rate_between_cells": {
   "512_to_900": {
    "extra_chars_per_skill": 388,
    "total_token_change": 736,
    "tokens_per_extra_character": 0.0474
   },
   "900_to_1024": {
    "extra_chars_per_skill": 124,
    "total_token_change": 108,
    "tokens_per_extra_character": 0.0218
   },
   "1024_to_1200": {
    "extra_chars_per_skill": 176,
    "total_token_change": -302,
    "tokens_per_extra_character": -0.0429
   },
   "1200_to_1600": {
    "extra_chars_per_skill": 400,
    "total_token_change": 95,
    "tokens_per_extra_character": 0.0059
   }
  },
  "headline": "Above 500 characters a skill description is close to free. Going from 512 to 1,600 characters, more than tripling it, costs 637 tokens across 40 skills, which is 0.015 tokens per character against the 0.276 this site measured below 300.",
  "no_knee_at_the_documented_maximum": "The three cells at or above 1024 characters land within 302 tokens of each other, and the 900-character cell, which is below the limit, is inside that same band. A truncating limit cannot explain flatness that begins before the limit, so this sweep detects no boundary at 1024 and cannot rule one out either."
 },
 "known_limits": {
  "enforcement_is_not_decided": "No verdict is offered on whether the documented 1024-character maximum is enforced in Claude Code. The cost curve is already flat below it, so truncation at the boundary would be invisible to this instrument. Deciding it needs a different test, such as reading back what the model was actually shown.",
  "carried_forward_one_description_shape": "a-skill-costs-39-tokens-or-3-9 carries: 'Every description is cut from one paragraph of ordinary English. A description of code or symbols tokenises differently and 0.276 per character will not transfer.' That limit applies here unchanged: the same generator, and therefore the same prose shape, is used.",
  "carried_forward_the_reversal_is_unexplained": "The same post carries that between 800 and 1500 characters growth 'does not merely stop, it reverses slightly. I have no explanation and am not offering one.' This run reproduces a small non-monotonicity (the 1200 cell is below the 1024 cell) and adds no explanation either. Carried forward, not retired.",
  "forty_skills_only": "One skill count, 40. This site has measured that per-skill cost collapses somewhere between 200 and 400 skills, so the shape of this curve at 1,000 skills is not established here.",
  "one_machine_one_release": "Opus on Claude Code 2.1.235, macOS, one session."
 }
}