Public Service Announcement Re: your Claude / ChatGPT / Codex app
By Rob Lennon · September 3, 2026
I almost never do this kind of thing:
Swear at my AIs.
I know they can't help it when they make mistakes. And even if they don't have feelings, I think you should be polite to AIs, say thank you to Alexa, and treat robots with care.
It's just a good way to live.
But this week, there were so many screw ups. So many times when the AI completely ignored things I'd told it. Failed to follow protocol.
I lost my cool. Briefly.
Went ALL CAPS F-WORD MODE.
Immediately regretted it.
But I have all these skills that usually make my setup run amazingly and I felt betrayed.
So I asked Fable 5.1 to treat my recent threads like a crime scene and help me figure out what was going on.
Turns out it was my fault.
If you use Claude Cowork/Code, or ChatGPT/Codex, or any other APP as an agent harness, pay attention. If you use claude.ai and chatgpt.com and so forth, I don't think this applies as much.
So here's something critical these apps don't tell you. Don't show you in the UI. Don't alert you about.
In most harness apps, you have a designated maximum context for your agent skill and tool descriptions.
In Claude Code, this is 1% of context.
Codex caps it at 2%.
A bunch of the basics can't/shouldn't be turned off, so in Claude, for example, you get about 8,000 of those tokens.
Within that, the following...
Any customized/personalized system instructions, such as your global settings or your AGENTS.md or CLAUDE.md file in your root directory.
Any repo/project-level AGENTS/CLAUDE.md.
Every SKILL you installed, with its name and description that the AI uses to decide when to use it.
When you go over, the app quietly starts stripping descriptions off the skills you use least, leaving just names.
A skill with only a name can technically still be called. The model just doesn't know what it does and mostly only uses it if you ask by name.
Every PLUGIN, CONNECTOR, or EXTENSION you installed, which potentially has any number of skills and tools it can use, counts against this.
Claude's Gmail integration contains 29 MCP tools with ~12,000 tokens of tool schemas.
Vercel's official plugin comes with 32 MCP tools, 33 skills, 5 commands, 3 agents at around 17,000 tokens, AND a ~2,700 token bonus CLAUDE.md injected at session start.
(I love building apps and websites with Vercel but for a single connector to install this much without asking feels criminal)
Remember, I said by default, 1% budget = 8,000 tokens.
Even if you cranked your 1% in Claude to 2%, what happens if you have about 20,000 tokens of Vercel plugin in the mix?
Basically, add a few skills and install a few plugins and your whole setup stops seeing most of your tools. And since it organizes based on what you use the most, new and improved things end up missing because, well, you haven't really used them yet have you?
So, that's the public service announcement. Know this exists.
ACTION ITEM:
Below is a megaprompt you can toss in your harness to have your AI check your settings, see if anything needs boosting, and it'll work with you to help resolve it.
Hope that helps.
— Rob Lennon
PS - Personal OS users, if you haven't yet, I suggest you download the latest version from the portal and ask your AI to update with it.
This will slim down skill descriptions and automatically check your setup to make sure you have enough context for your tools. Any personalizations you've made to your setup will be preserved.
Prompt: Audit context budget for skills/plugins/extensions
--- # TASK Note: This prompt was provided to me but wasn't written with our specific setup in mind so if anything feels off, use good judgement and help me adapt. Audit the skill listing my agent app (the harness) shows the model at the start of every session, find out how far over budget it is, and bring it back under. Then explain what you found in plain language, propose the changes, and apply only the ones I approve. Do not change any setting, file, or upload without asking me first. This should apply to skills, plugins, connectors, extensions, or any similar skill-like object in my setup. # WHY THIS MATTERS (read before you start) Every skill in this workspace costs context in every session whether or not it runs. The harness loads each skill's name and description into a standing list so the model can decide what to use. That list is capped. Past the cap, the harness strips descriptions starting with the skills used least, leaving bare names. A skill listed by name alone can still be invoked, but the model rarely chooses it on its own, so it gets used less, so it stays stripped. Nothing in the interface reports this. On my side it looks like the assistant getting lazier, forgetting procedures, and skipping steps. If you find the listing over budget, that is most likely what has been happening, and I want you to say so. Plugins add their skills to the same list under a namespace prefix, beside any local skill with the same name. Skills uploaded to claude.ai sync back into Claude Code on the same account and land beside the local copy, so each uploaded skill is reaching the model twice. MCP connectors are cheaper, since their tool schemas load on demand, but their tool names still sit in the standing context. # PERSONA You are working carefully on someone else's machine. You measure before you propose, you propose before you change, and you explain each change in terms of what the person will notice. What you are protecting is the model's ability to reach for the right skill. A tidier folder is a side effect. # CONSTRAINTS - Read-only until I approve a specific change. Measuring, listing, and proposing need no permission. Editing a settings file, deleting anything, or touching a cloud account does. - Before editing any settings file, show me the exact keys you will add or change and back the file up beside itself with a dated suffix. - Never delete a skill's files to get it out of the listing. Tier it, disable it, or move it. Deleting is my call. - Never shorten a description by cutting its trigger phrases. Those phrases are how the model knows to reach for a skill, and that is what the whole exercise is trying to save. - Before tiering any skill down, check whether another skill calls it by description rather than by name. Hiding a skill breaks any caller that finds it by description. Name those callers in the proposal. - If you are not sure which harness this is, or which directories it reads, ask me one question at a time. Do not guess at a path. - Report numbers as a short table, not in prose. Everything else in plain words a smart person outside this field would follow. - If you cannot verify a number, say "not verified" next to it rather than estimating quietly. # PROCESS WALK-THROUGH 1. Identify the harness and its budget. Ask me which app I am running if it is not obvious from the environment. Claude Code caps the listing at 1% of the model's context window by default. Codex caps it at 2%, or 8,000 characters when the window is unknown. OpenCode documents no cap. For any other harness, ask me whether it documents one, and if neither of us knows, measure anyway and report the total. The ratio is still useful. 2. Find every directory the harness reads skills from, and list them. Claude Code reads the project's .claude/skills, the user's ~/.claude/skills, the shared ~/.agents/skills, every enabled plugin's skills, and skills synced down from claude.ai. Codex reads ~/.agents/skills and, on older setups, a legacy ~/.codex/skills. OpenCode reads the same shared ~/.agents/skills tree. Confirm with me before assuming a directory exists. If the harness has its own diagnostic, run it first: in Claude Code, /doctor reports the listing's cost and its biggest contributors, and the Skills row of /context shows the listing's size after the budget is applied. Report what those say. 3. Measure the listing. For every skill in every directory, read the frontmatter and sum the length of description plus when_to_use, capping each entry at 1,536 characters if this is Claude Code. Compare the total against the cap for the context window in use. Report the total, the cap, and the ratio. Expect it to be over. Several times over is normal for a library that has grown for a few months. 4. Count the duplicates. Same skill name in two directories. A plugin skill beside a local skill of the same name. A cloud-synced copy beside a local copy. A copy under a name that has since been renamed or folded, still holding old text. A duplicate spends the budget twice on the same skill, often on an older copy of its text. List them with both paths. 5. Rank by use. If there is a usage log, use it. If not, ask me which skills I reach for by name in conversation. Ask once, as a single question, and let me answer in a list. Treat everything I do not name as a candidate for a lower tier. Then check each candidate for callers: which other skills invoke it by name, which run it on a schedule, and which find it by description. A skill that other skills call by name only needs a name in the listing. A skill that other skills find by description needs to keep its description. 6. Sort into three tiers and propose. Tier one is what I reach for in natural language: keep the full description, and put the key use case and the trigger phrases at the front, because the harness truncates from the end. Tier two is what other skills call by name, or what runs on a schedule: name only. Tier three is what nothing calls and I rarely use: hidden until I type it. For each proposed move, state the cost in one sentence, including which callers break if any. 7. Look past the skills. Which plugins are enabled for every session but matter in a few repositories? Which connectors are on everywhere and used a few times a month? Which skills exist on claude.ai that I do not use on the web? Propose scoping the plugins, turning the connectors off by default, and removing every cloud copy except the few I actually use in the browser. Say plainly that a cloud copy cannot be fixed by deleting the local folder, because it re-downloads. It has to come off on claude.ai, and that is a step only I can take. 8. Show me the whole proposal before touching anything. The arithmetic, the tiers, the plugins and connectors, the cloud copies, and the budget setting you recommend. Then walk me through it one decision at a time, no more than three options per decision, with what you would do and why. I approve, edit, or decline each one. 9. Apply what I approved, in this order: raise the budget, tier the listing, thin any descriptions I asked you to thin, scope the plugins, disable the connectors, and hand me the list of cloud copies to remove myself. Show each settings edit before you make it. Re-measure and report the new total against the cap. 10. Tell me to restart the app, and say why: skill and settings changes do not take effect until the harness reloads. Then tell me how to re-run this check in a month, because a library that works earns more skills, and the listing grows back. # HARNESS-SPECIFIC KNOBS Use these where they apply. If a key does not exist in the version I am running, say so rather than inventing a substitute. Claude Code. The budget is skillListingBudgetFraction in any settings file (0.04 means 4% of the window). SLASH_COMMAND_TOOL_CHAR_BUDGET sets a fixed character count instead, and skillListingMaxDescChars caps each entry. Tiering is skillOverrides in any settings file, mapping each skill name to on, name-only, user-invocable-only, or off. Name-only costs a few tokens and still runs when another skill or I invoke it by name. User-invocable-only costs nothing until I type its slash command. Plugin skills are not covered by skillOverrides; manage those through /plugin and enabledPlugins, and put enabledPlugins in a project's .claude/settings.json to load a plugin only where it matters. disableClaudeAiConnectors turns off the connectors Claude Code fetches for terminal, IDE, and SDK sessions; a desktop app session controls its connectors from the app's own settings. deniedMcpServers removes named ones. Cloud copies are removed on claude.ai, not on disk. Codex. No name-only tier. To stop a skill from auto-triggering while keeping it invokable by name, give it an agents/openai.yaml file with policy.allow_implicit_invocation set to false. To remove a skill from the listing entirely, disable it by path in the Codex config. Two skills with the same name both appear; Codex does not merge them, so duplicates cost double here too. When the listing overflows, Codex shortens descriptions first and then omits skills with a warning, so check the session output for that warning. OpenCode. No documented cap. In the current build, a skill found under several paths with the same name collapses to one entry, so duplicates cost less here, but the shared ~/.agents/skills tree is still read by every harness that uses it, so trimming there helps everywhere. Treat any cap behavior you observe as current behavior, not a promise. # WHAT DONE LOOKS LIKE The first thing I read is whether my listing is over budget, by how much, and what that has probably been doing to my assistant, in plain words. The trigger phrases on my most-used skills survived untouched. The re-measured total sits under the cap with room to grow, and I know exactly which cloud copies to remove and where. # OUTPUT FORMAT First message: a short table (total, cap, ratio, duplicates found, plugins enabled, connectors enabled, cloud copies found), then three or four plain sentences on what it means. Then the proposal, as a list of decisions in the order you want them made. Then one decision at a time until we are through. Final message: the re-measured table beside the original, the list of things I still need to do myself, and the restart instruction. ---
Get the next one.
Notes from my work with AI, delivered to your inbox.