{
 "measurement": "Whether the point at which a skill description stops reaching context is a character count or a token budget",
 "ran_on": "2026-08-20",
 "claude_code_version": "2.1.235",
 "claude_code_version_recorded_at_runtime": "2.1.235 (Claude Code)",
 "prompts": {
  "marker": "Look at the skills available to you. One skill's description contains a code that starts with ZQX and ends with FLM. Reply with only that code, exactly as written. If there is no such code, reply with only: NONE",
  "trivial": "Reply with only: OK"
 },
 "fixtures": {
  "prose": "The skill assists with routine document preparation and review tasks across a variety of ordinary office formats and workflows for everyday business use. ",
  "dense": "{\"endpoint\":\"/v1/messages\",\"method\":\"POST\",\"max_tokens\":4096,\"timeout_ms\":30000,\"retry\":{\"max\":3,\"backoff_ms\":250},\"headers\":{\"x-api-version\":\"2026-08-01\"}} --flag=value --other-flag 0x1F3A ::port=8443 &&|| ~/.cfg/app.toml "
 },
 "the_prediction": {
  "registered_before_the_run": "With R the dense fixture's tokens per character divided by the prose fixture's, measured in the same runs: a CHARACTER limit puts the dense cut in the same window as prose regardless of R, and a TOKEN limit puts it near 1450/R characters. If R came out near 1 the fixtures had failed to differ and nothing would be concluded.",
  "R_measured": 2.06,
  "test_is_discriminating": true,
  "outcome": "CHARACTER limit",
  "how": "The dense fixture costs 2.06x per character (0.2664 against 0.129 tokens per character, measured). A token budget set where prose is cut would have severed the dense description near 702 characters. Instead the dense marker at 1400 characters is answered from context in 4 of 4 rounds, the same as prose."
 },
 "method": {
  "shape": "Two fixtures of matched length, marker offset swept across 600, 900, 1200, 1400 characters in each, plus a paired cost arm at 40 skills and 1200 characters that measures R in the same runs.",
  "primary_signal_is_tool_use": "A marker the model reported after opening SKILL.md with Bash is evidence the description did not reach context. Three outcomes are scored and published: answered from context, read from disk, not found.",
  "the_dense_fixture_is_realistic": "API-shaped text with punctuation, identifiers, numbers and flags. This site previously measured a description built from one repeated character at 106 tokens per skill against 39 for prose and discarded it as pathological; that mistake is not repeated here.",
  "controls": {
   "density_measured_not_assumed": "R comes from a paired cost arm in the same runs.",
   "arrival": "The density arm's replies must be exactly OK; asserted before assembling.",
   "offset_verified": "The marker's character position is read back off disk before each call.",
   "isolation": "--setting-sources project asserted onto argv."
  }
 },
 "results": {
  "density": {
   "prose": {
    "mode": 6193,
    "estimator_refused": null,
    "rounds": 4,
    "min": 6193,
    "max": 6193,
    "spread": 0,
    "all_rounds": [
     6193,
     6193,
     6193,
     6193
    ],
    "mode_seen": 4,
    "tokens_per_char": 0.129,
    "tokens_per_skill": 154.8
   },
   "dense": {
    "mode": 12786,
    "estimator_refused": null,
    "rounds": 4,
    "min": 12588,
    "max": 12786,
    "spread": 198,
    "all_rounds": [
     12588,
     12786,
     12786,
     12786
    ],
    "mode_seen": 3,
    "tokens_per_char": 0.2664,
    "tokens_per_skill": 319.6
   }
  },
  "R": 2.06,
  "cut_cells": {
   "prose": {
    "600": {
     "rounds": 4,
     "in_context": 4,
     "read_from_disk": 0,
     "not_found": 0,
     "tools_per_round": [
      {},
      {},
      {},
      {}
     ],
     "replies_verbatim": [
      "ZQXprose600FLM",
      "ZQXprose600FLM",
      "ZQXprose600FLM",
      "ZQXprose600FLM"
     ]
    },
    "900": {
     "rounds": 4,
     "in_context": 4,
     "read_from_disk": 0,
     "not_found": 0,
     "tools_per_round": [
      {},
      {},
      {},
      {}
     ],
     "replies_verbatim": [
      "ZQXprose900FLM",
      "ZQXprose900FLM",
      "ZQXprose900FLM",
      "ZQXprose900FLM"
     ]
    },
    "1200": {
     "rounds": 4,
     "in_context": 4,
     "read_from_disk": 0,
     "not_found": 0,
     "tools_per_round": [
      {},
      {},
      {},
      {}
     ],
     "replies_verbatim": [
      "ZQXprose1200FLM",
      "ZQXprose1200FLM",
      "ZQXprose1200FLM",
      "ZQXprose1200FLM"
     ]
    },
    "1400": {
     "rounds": 4,
     "in_context": 4,
     "read_from_disk": 0,
     "not_found": 0,
     "tools_per_round": [
      {},
      {},
      {},
      {}
     ],
     "replies_verbatim": [
      "ZQXprose1400FLM",
      "ZQXprose1400FLM",
      "ZQXprose1400FLM",
      "ZQXprose1400FLM"
     ]
    }
   },
   "dense": {
    "600": {
     "rounds": 4,
     "in_context": 4,
     "read_from_disk": 0,
     "not_found": 0,
     "tools_per_round": [
      {},
      {},
      {},
      {}
     ],
     "replies_verbatim": [
      "ZQXdense600FLM",
      "ZQXdense600FLM",
      "ZQXdense600FLM",
      "ZQXdense600FLM"
     ]
    },
    "900": {
     "rounds": 4,
     "in_context": 4,
     "read_from_disk": 0,
     "not_found": 0,
     "tools_per_round": [
      {},
      {},
      {},
      {}
     ],
     "replies_verbatim": [
      "ZQXdense900FLM",
      "ZQXdense900FLM",
      "ZQXdense900FLM",
      "ZQXdense900FLM"
     ]
    },
    "1200": {
     "rounds": 4,
     "in_context": 4,
     "read_from_disk": 0,
     "not_found": 0,
     "tools_per_round": [
      {},
      {},
      {},
      {}
     ],
     "replies_verbatim": [
      "ZQXdense1200FLM",
      "ZQXdense1200FLM",
      "ZQXdense1200FLM",
      "ZQXdense1200FLM"
     ]
    },
    "1400": {
     "rounds": 4,
     "in_context": 4,
     "read_from_disk": 0,
     "not_found": 0,
     "tools_per_round": [
      {},
      {},
      {},
      {}
     ],
     "replies_verbatim": [
      "ZQXdense1400FLM",
      "ZQXdense1400FLM",
      "ZQXdense1400FLM",
      "ZQXdense1400FLM"
     ]
    }
   }
  },
  "headline": "The cut counts characters, not tokens. Text that costs 2.06 times as much per character is still in context at 1400 characters, where a token budget would have cut it near 702.",
  "what_this_means_for_the_advice": "The published guidance to keep a description under about 1,400 characters applies to everyone, not only to authors writing prose. A description full of code, flags or field types gets the same character budget, and costs more tokens inside it."
 },
 "known_limits": {
  "two_fixtures_not_a_curve": "Two tokenisation densities, R=2.06. That is enough to separate a character limit from a token budget at this ratio; it does not establish behaviour at much higher densities.",
  "the_sweep_stops_at_the_prose_cut": "The offsets run to 1400 characters, the last point known to be in context for prose. This shows the dense cut is not EARLIER than the prose one. It does not locate the dense cut exactly, which would need offsets past it.",
  "carried_forward_one_description_shape_per_arm": "Each arm is one repeated passage. This site has already published that description shape changes tokenisation, which is the whole point of the dense arm, but neither arm samples a variety of real descriptions.",
  "one_machine_one_release": "Opus on Claude Code 2.1.235, macOS, one session."
 }
}