{"id":7281,"date":"2026-10-07T16:20:37","date_gmt":"2026-10-07T16:20:37","guid":{"rendered":"https:\/\/jonjones.ai\/uncategorized\/claude-md-best-practices\/"},"modified":"2026-10-07T16:20:37","modified_gmt":"2026-10-07T16:20:37","slug":"%e5%85%8b%e5%8b%9e%e5%be%b7%e9%86%ab%e5%ad%b8%e5%8d%9a%e5%a3%ab%e6%9c%80%e4%bd%b3%e5%af%a6%e8%b8%90","status":"publish","type":"post","link":"https:\/\/jonjones.ai\/zh\/%e4%ba%ba%e5%b7%a5%e6%99%ba%e6%85%a7\/%e5%85%8b%e5%8b%9e%e5%be%b7%e9%86%ab%e5%ad%b8%e5%8d%9a%e5%a3%ab%e6%9c%80%e4%bd%b3%e5%af%a6%e8%b8%90\/","title":{"rendered":"CLAUDE.md \u6700\u4f73\u5be6\u52d9\uff1a\u57f7\u884c 10 \u5bb6\u7121\u4eba\u503c\u5b88\u4f01\u696d\u7684\u6587\u4ef6\uff08\u5305\u62ec Claude \u5ffd\u7565\u7684\u6307\u4ee4\uff09"},"content":{"rendered":"<p>Every list of <strong>CLAUDE.md best practices<\/strong> you will find today was written by someone who sits next to the agent while it works. They open a session, type a prompt, watch the output, correct it, and ship. Their CLAUDE.md is a seatbelt.<\/p>\n\n<p>Mine is a steering wheel. The file I am going to show you governs a container that wakes on a cron schedule at 00:05, writes and publishes a full article to a live site, updates four systems of record, and goes back to sleep \u2014 with nobody watching. There is no one to catch a bad instruction. Whatever the file says is what happens.<\/p>\n\n<p>That difference changes which advice is true. When you are present, a vague instruction costs you one correction. When you are not, it costs you a week of silently wrong output. So this is not another template. It is a real file, the measurements of what it actually costs, and \u2014 the part nobody publishes \u2014 <strong>the instructions in it that the model simply did not follow, with the logs that prove it<\/strong>.<\/p>\n\n<h2>What a CLAUDE.md File Really Is \u2014 and the One Thing Every CLAUDE.md Best Practices List Gets Wrong<\/h2>\n\n<figure class=\"wp-block-image size-large\">\n<img decoding=\"async\" src=\"https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/10\/claude-md-bp-anatomy.jpg\" alt=\"claude md best practices\" \/>\n<\/figure>\n\n<p>A CLAUDE.md is a markdown file that Claude Code reads automatically at the start of a session and holds in context for the whole run. That part every guide agrees on. The disagreement starts one sentence later.<\/p>\n\n<p>Most guides describe it as <em>documentation<\/em> \u2014 somewhere to explain your project so the model understands it. That framing is wrong in a way that quietly makes your file worse every time you edit it.<\/p>\n\n<p>CLAUDE.md is not documentation. It is <strong>a standing instruction set that is re-read in full on every single run, and billed to you in tokens every time<\/strong>. Documentation is written once for a human who will read the relevant part. A CLAUDE.md is read entirely, by a machine, on every invocation, forever. Those are opposite economics.<\/p>\n\n<p>Treat it as documentation and you will keep adding background, because adding context feels free. Treat it as a standing instruction set and three rules fall out:<\/p>\n\n<ul>\n<li><strong>Every line must change behaviour.<\/strong> If removing a sentence would produce an identical run, that sentence is costing you tokens and buying nothing.<\/li>\n<li><strong>Every line is read by every lane.<\/strong> My video-rendering configuration is loaded even when the agent is writing a blog post. More on what that costs below \u2014 the number surprised me.<\/li>\n<li><strong>An instruction you cannot verify is a wish.<\/strong> This is the one most CLAUDE.md best practices lists never mention, and it gets its own section below \u2014 because I can show you exactly which of my rules the model follows and which it does not.<\/li>\n<\/ul>\n\n<p>If you are still deciding whether to run agents unattended at all, I wrote up <a href=\"https:\/\/jonjones.ai\/ai\/claude-code-agents-production\/\">what actually runs my 10-brand fleet in production<\/a> \u2014 this post assumes you have made that call and now need the file to behave.<\/p>\n\n<h2>A Real CLAUDE.md From a Business That Runs Unattended, Measured<\/h2>\n\n<figure class=\"wp-block-image size-large\">\n<img decoding=\"async\" src=\"https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/10\/claude-md-bp-annotated.jpg\" alt=\"A real CLAUDE.md file anatomy, section by section, from an unattended agent container\" \/>\n<\/figure>\n\n<p>Here is the actual file, measured as it sits on disk right now:<\/p>\n\n<ul>\n<li><strong>485 lines, 29,597 bytes, roughly 7,400 tokens<\/strong><\/li>\n<li><strong>32 top-level sections<\/strong><\/li>\n<li>Governs one brand container; nine more like it run on the same host<\/li>\n<\/ul>\n\n<p>What an unattended file needs is not what a coding template suggests: identity and mission, brand voice, the publishing target, the data schema, the media pipelines, literal API call patterns, credential locations, and a block of twelve numbered rules. Three structural choices there are worth stealing.<\/p>\n\n<h3>1. Credentials are located, never stored<\/h3>\n\n<p>The file never contains a secret \u2014 only the <em>protocol for finding one<\/em>: check <code>env | grep KEY<\/code> first, the <code>.env<\/code> file is not authoritative, the host injects everything via Docker. Five lines that prevent an agent finding a stale file and confidently using dead credentials.<\/p>\n\n<h3>2. Exact API shapes, not API names<\/h3>\n\n<p>Saying &#8220;use the Airtable API&#8221; produces guessing. The file carries literal working <code>curl<\/code> invocations instead \u2014 real endpoint, real auth header, real payload shape. An agent handed the exact call does not improvise one.<\/p>\n\n<p>This matters more than it sounds. One table in my Airtable base uses <code>snake_case<\/code> field names while every other table is Title Case \u2014 and Airtable is case-<em>insensitive<\/em> when you read but case-<em>sensitive<\/em> when you write. A skill can therefore read perfectly and fail every write, silently, with an error that looks exactly like an empty queue. That asymmetry hid a broken loop for months. No amount of model intelligence recovers a fact like that; it has to be written down.<\/p>\n\n<h3>3. A numbered, non-negotiable rules block<\/h3>\n\n<p>Twelve rules, numbered, under a heading that says <strong>Non-Negotiable<\/strong>: publish immediately rather than draft, never publish without a featured image, never invent data, write for today only.<\/p>\n\n<p>That block is 922 bytes \u2014 3.2% of the file, and the most load-bearing thing in it. It is also not uniformly obeyed, which is where most CLAUDE.md best practices advice stops and the interesting part starts.<\/p>\n\n<h2>The Instructions Claude Ignored \u2014 and the Logs That Prove It<\/h2>\n\n<figure class=\"wp-block-image size-large\">\n<img decoding=\"async\" src=\"https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/10\/claude-md-bp-ignored.jpg\" alt=\"Instruction pathways where most signals arrive but some fade silently mid-flight\" \/>\n<\/figure>\n\n<p>Every CLAUDE.md best practices guide is written in the imperative mood with nothing at stake. So I went through my own log directory and graded my file against reality \u2014 counts, not impressions. Here is what came back.<\/p>\n\n<h3>Rule 1 is impossible, and has been from the day it was written<\/h3>\n\n<p>Rule 1 reads: <em>&#8220;Always read MEMORY.md at the start of every session.&#8221;<\/em> It is the first rule, under the Non-Negotiable heading.<\/p>\n\n<p><strong>MEMORY.md is currently 1,971,423 bytes \u2014 approximately 493,000 tokens.<\/strong> It does not fit in the context window. It has never fit. No agent has ever executed rule 1 as written, and no agent has ever reported failing to, because &#8220;read this file&#8221; has no success condition attached to it.<\/p>\n\n<p>It is the most instructive failure in the file because nothing broke and no error was raised. A rule written when the file was small stayed put while the file grew, and quietly became fiction \u2014 still looking authoritative at the top of a list labelled non-negotiable.<\/p>\n\n<h3>Rule 6 is possible, and still dropped 7.6% of the time<\/h3>\n\n<p>Rule 6: <em>&#8220;Always end skill execution with <code>SKILL_RESULT: [success|skip|fail] | [summary]<\/code>.&#8221;<\/em> Trivially executable \u2014 it is one line of text.<\/p>\n\n<p>I grepped every non-empty log the fleet has produced:<\/p>\n\n<ul>\n<li><strong>1,584 run logs<\/strong><\/li>\n<li><strong>1,464 contain a <code>SKILL_RESULT<\/code> line \u2014 92.4%<\/strong><\/li>\n<li><strong>120 do not \u2014 7.6%<\/strong><\/li>\n<\/ul>\n\n<p>The worst offenders are not random: one social skill accounts for 19 misses, and the blog-writing skill \u2014 the one producing this very article \u2014 accounts for 10. A rule can be clear, short, numbered, flagged non-negotiable, and still be skipped roughly one run in thirteen.<\/p>\n\n<h3>Two rules in the same block are at 100%<\/h3>\n\n<p>Now the control. Rule 2 says every post publishes immediately, never draft. Rule 11 says every post must have a featured image. I pulled the last 50 posts from the live site:<\/p>\n\n<ul>\n<li><strong>50 of 50 published<\/strong> \u2014 zero drafts, zero scheduled. 100%.<\/li>\n<li><strong>50 of 50 carry a featured image<\/strong> \u2014 zero missing. 100%.<\/li>\n<\/ul>\n\n<p>Four rules. Same file, same heading, same numbered list, same emphatic language. Compliance of 100%, 100%, 92.4%, and 0%. <strong>Emphasis explained none of the variance.<\/strong> Something else did.<\/p>\n\n<style>#kt-layout-idsignup_mid > .kt-row-column-wrap{align-content:start;}:where(#kt-layout-idsignup_mid > .kt-row-column-wrap) > .wp-block-kadence-column{justify-content:start;}#kt-layout-idsignup_mid > .kt-row-column-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:var(--global-kb-gap-md, 2rem);padding-top:var( --global-kb-row-default-top, 25px );padding-bottom:var( --global-kb-row-default-bottom, 25px );padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px;grid-template-columns:repeat(2, minmax(0, 1fr));}#kt-layout-idsignup_mid{border-top-left-radius:16px;border-top-right-radius:16px;border-bottom-right-radius:16px;border-bottom-left-radius:16px;overflow:clip;isolation:isolate;}#kt-layout-idsignup_mid > .kt-row-layout-overlay{border-top-left-radius:16px;border-top-right-radius:16px;border-bottom-right-radius:16px;border-bottom-left-radius:16px;}#kt-layout-idsignup_mid{background-color:#0d1117;}#kt-layout-idsignup_mid > .kt-row-layout-overlay{opacity:0.30;}@media all and (max-width: 1024px){#kt-layout-idsignup_mid > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}@media all and (max-width: 767px){#kt-layout-idsignup_mid > .kt-row-column-wrap{grid-template-columns:repeat(2, minmax(0, 1fr));}}<\/style>\n<div class=\"wp-block-kadence-rowlayout alignnone\">\n<style>.kadence-columnsignup_img_mid > .kt-inside-inner-col{border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;}.kadence-columnsignup_img_mid > .kt-inside-inner-col,.kadence-columnsignup_img_mid > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-columnsignup_img_mid > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-columnsignup_img_mid > .kt-inside-inner-col{flex-direction:column;}.kadence-columnsignup_img_mid > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-columnsignup_img_mid > .kt-inside-inner-col:before{opacity:0.3;}.kadence-columnsignup_img_mid{position:relative;}@media all and (max-width: 1024px){.kadence-columnsignup_img_mid > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-columnsignup_img_mid > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column inner-column-1\"><div class=\"kt-inside-inner-col\">\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/06\/newsletter-cta-ai-playbook.jpg\" alt=\"Lead Magnet AI Playbook \u2014 the operator's AI automation playbook\" \/><\/figure>\n\n<\/div><\/div>\n\n<style>.kadence-columnsignup_txt_mid > .kt-inside-inner-col{border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;}.kadence-columnsignup_txt_mid > .kt-inside-inner-col,.kadence-columnsignup_txt_mid > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-columnsignup_txt_mid > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-columnsignup_txt_mid > .kt-inside-inner-col{flex-direction:column;}.kadence-columnsignup_txt_mid > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-columnsignup_txt_mid > .kt-inside-inner-col:before{opacity:0.3;}.kadence-columnsignup_txt_mid{position:relative;}@media all and (max-width: 1024px){.kadence-columnsignup_txt_mid > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-columnsignup_txt_mid > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column inner-column-2\"><div class=\"kt-inside-inner-col\">\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#00d4b4\">Get the AI Playbook<\/h3>\n\n\n<p class=\"has-text-color\" style=\"color:#f0f6fc\">The same operator notes that produced this post \u2014 real systems, real numbers, no theory. Free, and you can leave whenever you like.<\/p>\n\n<div class='fluentform ff-default fluentform_wrapper_8 ffs_default_wrap'><form data-form_id=\"8\" id=\"fluentform_8\" class=\"frm-fluent-form fluent_form_8 ff-el-form-top ff_form_instance_8_1 ff-form-loading ffs_default\" data-form_instance=\"ff_form_instance_8_1\" method=\"POST\" ><fieldset  style=\"border: none!important;margin: 0!important;padding: 0!important;background-color: transparent!important;box-shadow: none!important;outline: none!important; min-inline-size: 100%;\">\n                    <legend class=\"ff_screen_reader_title\" style=\"display: block; margin: 0!important;padding: 0!important;height: 0!important;text-indent: -999999px;width: 0!important;overflow:hidden;\">Lead Magnet - AI Playbook<\/legend><input type='hidden' name='__fluent_form_embded_post_id' value='7281' \/><input type=\"hidden\" id=\"_fluentform_8_fluentformnonce\" name=\"_fluentform_8_fluentformnonce\" value=\"f4274568d9\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/zh\/wp-json\/wp\/v2\/posts\/7281\" \/><div class='ff-el-group'><div class='ff-el-input--content'><input type=\"email\" name=\"email\" id=\"ff_8_email\" class=\"ff-el-form-control\" placeholder=\"Your email address\" data-name=\"email\"  aria-invalid=\"false\" aria-required=true><\/div><\/div><div class='ff-el-group ff-text-left ff_submit_btn_wrapper ff_submit_btn_wrapper_custom'><button class=\"ff-btn ff-btn-submit ff-btn-md ff_btn_style wpf_has_custom_css\" type=\"submit\" name=\"custom_submit_button-8_1\" data-name=\"custom_submit_button-8_1\"  aria-label=\"GET THE PLAYBOOK\">GET THE PLAYBOOK<\/button><style>form.fluent_form_8 .wpf_has_custom_css.ff-btn-submit { background-color:#00ff88;border-color:#00ff88;color:#0a0a14;min-width:100%; }form.fluent_form_8 .wpf_has_custom_css.ff-btn-submit:hover { background-color:#00cc6a;border-color:#00cc6a;color:#0a0a14;min-width:100%; } <\/style><\/div><\/fieldset><\/form><div id='fluentform_8_errors' class='ff-errors-in-stack ff_form_instance_8_1 ff-form-loading_errors ff_form_instance_8_1_errors'><\/div><\/div>            <script type=\"text\/javascript\">\n                window.fluent_form_ff_form_instance_8_1 = {\"id\":\"8\",\"settings\":{\"layout\":{\"labelPlacement\":\"top\",\"helpMessagePlacement\":\"with_label\",\"errorMessagePlacement\":\"inline\",\"asteriskPlacement\":\"asterisk-right\"},\"restrictions\":{\"denyEmptySubmission\":{\"enabled\":false}}},\"form_instance\":\"ff_form_instance_8_1\",\"form_id_selector\":\"fluentform_8\",\"rules\":{\"email\":{\"required\":{\"value\":true,\"message\":\"This field is required\"},\"email\":{\"value\":true,\"message\":\"Please enter a valid email address\"}}},\"debounce_time\":300};\n                            <\/script>\n            \n\n<\/div><\/div>\n\n<\/div>\n\n\n<h2>Obeyed vs Silently Dropped: The Test That Separates Them<\/h2>\n\n<figure class=\"wp-block-image size-large\">\n<img decoding=\"async\" src=\"https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/10\/claude-md-bp-test.jpg\" alt=\"A diagnostic harness comparing an instruction that lands against one that silently dissipates\" \/>\n<\/figure>\n\n<p>Line the four rules up and the pattern is unmistakable \u2014 and it is the one finding that reorganised how I think about CLAUDE.md best practices entirely.<\/p>\n\n<figure class=\"wp-block-table\"><table>\n<thead><tr><th>Rule<\/th><th>What it demands<\/th><th>Compliance<\/th><\/tr><\/thead>\n<tbody>\n<tr><td>2 \u2014 publish, never draft<\/td><td>A field in the API call that creates the post<\/td><td><strong>100%<\/strong><\/td><\/tr>\n<tr><td>11 \u2014 featured image required<\/td><td>A field in the API call that creates the post<\/td><td><strong>100%<\/strong><\/td><\/tr>\n<tr><td>6 \u2014 print a result line<\/td><td>A separate act, after the work, read by nothing<\/td><td>92.4%<\/td><\/tr>\n<tr><td>1 \u2014 read a 493k-token file<\/td><td>An action that cannot physically complete<\/td><td>0%<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n<p>Rules 2 and 11 are not obeyed because they are important. <strong>They are obeyed because they are preconditions of an action the agent has to take anyway.<\/strong> You cannot create a WordPress post without supplying a status and a featured media ID. The instruction sits directly on the critical path, so skipping it is not available as an option.<\/p>\n\n<p>Rule 6 is off the path. The work is done, the article is live, and printing a summary changes nothing downstream at the moment it is skipped \u2014 so it survives on attention alone, which is exactly what runs out at the end of a long run. Rule 1 is off the map entirely.<\/p>\n\n<p>That gives you a genuinely predictive test, and it is the most useful CLAUDE.md best practice I know:<\/p>\n\n<blockquote><p><strong>For every instruction in your file, ask: is this a precondition of something the agent must do anyway, or is it a separate act of goodwill? If it is goodwill, assume it will be dropped some fraction of the time \u2014 and decide now whether that fraction is acceptable.<\/strong><\/p><\/blockquote>\n\n<h3>Run this audit on your own file<\/h3>\n\n<p>It takes about twenty minutes and it is the highest-value thing you can do to a CLAUDE.md that has been growing for a few months.<\/p>\n\n<ol>\n<li><strong>Number every instruction.<\/strong> You cannot measure a paragraph. If a rule is not individually addressable, it is not auditable.<\/li>\n<li><strong>Write the observable for each one.<\/strong> What would you grep, query, or <code>curl<\/code> to prove it happened? Rule 11 has one: the <code>featured_media<\/code> field on the post. Rule 1 has none \u2014 that absence <em>was<\/em> the bug, visible before any measurement.<\/li>\n<li><strong>Measure the last fifty runs.<\/strong> Logs, API, database \u2014 wherever the evidence lives. Counts, not recollection.<\/li>\n<li><strong>Sort rules into three buckets.<\/strong> On the critical path (safe to leave as prose). Off the path but verifiable (needs enforcement elsewhere \u2014 see the routing section). Unverifiable (delete it or make it verifiable; there is no third option).<\/li>\n<li><strong>Delete anything that scores zero and cannot be fixed.<\/strong> A rule nothing obeys and nothing checks is worse than no rule, because it makes the file look governed when it is not.<\/li>\n<\/ol>\n\n<p>My rule 1 is being rewritten from &#8220;always read MEMORY.md&#8221; to a bounded read of a specific recent slice \u2014 an instruction that can actually complete. I covered the general version of that problem in <a href=\"https:\/\/jonjones.ai\/ai-automation\/daily-saturday-shortcuts-ai-agent-context-window-2026-10-03\/\">three ways to bound what your agent reads at startup<\/a>.<\/p>\n\n<h2>CLAUDE.md Best Practices for Agents That Don\u2019t Write Code<\/h2>\n\n<figure class=\"wp-block-image size-large\">\n<img decoding=\"async\" src=\"https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/10\/claude-md-bp-noncode.jpg\" alt=\"Four non-engineering production pipelines sharing one instruction spine\" \/>\n<\/figure>\n\n<p>Every result on the first page of Google for CLAUDE.md best practices assumes you are building software. Mine does not ship a line of production code. It writes articles, schedules social posts, sends newsletters, answers email, and runs outreach. Four things change, and all four of them matter more than the repo-specific advice you will otherwise be given.<\/p>\n\n<h3>You have no test suite, so you must manufacture a verifier<\/h3>\n\n<p>A coding agent gets a free, honest oracle: run the tests. A content agent has nothing equivalent. &#8220;Did the article publish correctly?&#8221; has no exit code.<\/p>\n\n<p>So the file has to specify the verifier explicitly. Mine requires fetching the live URL after publishing and confirming the new headline actually appears in the returned HTML \u2014 <strong>with a cache-busting parameter<\/strong>, because a CDN will cheerfully serve you the old page and let you mark the run a success. That lesson cost a real incident: an SEO metadata write returned HTTP 200, acknowledged the change, and the live page still showed the old title thirty seconds later. <em>An API acknowledgement is not evidence that anything rendered.<\/em><\/p>\n\n<h3>Idempotency stops being a nicety<\/h3>\n\n<p>Re-running a test suite is free. Re-running a publisher posts the article twice. An unattended content agent will eventually retry \u2014 after a timeout, a crash, a scheduler hiccup \u2014 so the file must say what &#8220;already done&#8221; looks like and how to check for it before acting.<\/p>\n\n<p>This is why rule 10 exists: <em>write content for today only, never batch ahead<\/em>. It also needs a timezone-aware check. My WordPress runs at UTC while the container is scheduled in Central Indonesia Time, so evening content lands on the <em>previous<\/em> UTC date \u2014 and the naive &#8220;is there a post for today?&#8221; query returns zero, reading as total failure when everything is fine.<\/p>\n\n<h3>Voice needs its own file, not a paragraph<\/h3>\n\n<p>Four adjectives will not reproduce a voice. My file carries one compressed voice line and then <em>points<\/em> to dedicated documents \u2014 brand voice, brand rules, a separate email persona read before any reply is drafted. The pointer is cheap; the document only loads in the lane that needs it.<\/p>\n\n<h3>&#8220;Done&#8221; is externally visible, so the definition must be external too<\/h3>\n\n<p>For code, done is a merged commit. Here, done is a live URL plus four systems of record agreeing with each other \u2014 stated explicitly, because an agent that defines done as &#8220;I finished writing&#8221; leaves your tracking silently out of sync for weeks. The same reasoning drives <a href=\"https:\/\/jonjones.ai\/automation\/virtual-assistant-with-ai\/\">what actually transfers when you replace a VA with AI<\/a>.<\/p>\n\n<h2>The Context Bill: What Each Section Actually Costs<\/h2>\n\n<figure class=\"wp-block-image size-large\">\n<img decoding=\"async\" src=\"https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/10\/claude-md-bp-contextbill.jpg\" alt=\"A context budget window with nearly half its blocks rendered inert\" \/>\n<\/figure>\n\n<p>Here is the measurement I did not expect, and it is the strongest argument for ruthlessness I can give you.<\/p>\n\n<p>I broke my CLAUDE.md into its 32 sections and sized each one. The largest single section \u2014 <strong>12.5% of the entire file<\/strong> \u2014 is a table of placeholder definitions left behind by the setup wizard that generated the file. It explains what each template variable <em>was<\/em> before it was filled in. It is read on every run, by every lane, forever, and it changes nothing.<\/p>\n\n<p>Add the two sibling leftovers and <strong>18.3% of the file is setup scaffolding<\/strong>. For comparison, the Non-Negotiable rules block \u2014 the part that governs all behaviour \u2014 is <strong>3.2%<\/strong>. The wizard residue outweighs the rules by nearly six to one.<\/p>\n\n<p>Then I tagged every section this blog-writing run actually consulted. The video rendering pipeline (9.1%) was not consulted. Nor the social posting architecture, the social mining config, the email reply guidelines, the search-console instrumentation, the B2B profile, the competitor list.<\/p>\n\n<p><strong>For this run, 47.8% of the file \u2014 roughly 3,460 tokens \u2014 was dead weight.<\/strong> Not wrong. Just irrelevant to the lane that was executing, and paid for in full anyway.<\/p>\n\n<p>Two more leaks worth checking in your own file:<\/p>\n\n<ul>\n<li><strong>Unrendered template syntax.<\/strong> Mine still contains 12 <code>{{#if}}<\/code> expressions that never got processed. Because they never rendered, the model reads <em>both<\/em> branches \u2014 including one that names a product CTA and another that says no products are configured and CTAs should be skipped. Directly contradictory instructions, both live in context, with nothing to resolve them.<\/li>\n<li><strong>Unfilled placeholders.<\/strong> Seven <code>TODO<\/code> markers remain. One is the brand&#8217;s image style guidance, so every lane that generates an image reads the literal string <code>TODO_JON(IMAGE_STYLE)<\/code> and then re-derives the style from a design document somewhere else. The instruction is present, is read, is paid for, and is unexecutable.<\/li>\n<\/ul>\n\n<h3>What to actually cut<\/h3>\n\n<p>This is where CLAUDE.md best practices become arithmetic rather than taste. Cut anything the wizard left behind. Cut any section only one lane uses and move it into that lane&#8217;s skill file. Cut every unrendered conditional \u2014 pick the branch that is true and delete the rest. Resolve or delete every placeholder. And run the removal test on what remains: <em>if I deleted this, would any run come out different?<\/em> If not, it goes.<\/p>\n\n<h2>CLAUDE.md vs Skills vs Hooks: Which Instruction Belongs Where<\/h2>\n\n<figure class=\"wp-block-image size-large\">\n<img decoding=\"async\" src=\"https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/10\/claude-md-bp-routing.jpg\" alt=\"Three routing layers dispatching one instruction to exactly one correct destination\" \/>\n<\/figure>\n\n<p>The &#8220;Skills versus context bloat&#8221; tension is the one genuinely hard trade-off in this topic, and the guides that raise it tend not to resolve it. Having paid the bill, I can give you a routing rule that is concrete rather than philosophical.<\/p>\n\n<p>The numbers that settle it: my 39 skill files total <strong>468,064 bytes \u2014 about 117,000 tokens, 15.8\u00d7 the size of CLAUDE.md<\/strong>. The single skill executing right now is 47,730 bytes, which is 1.6\u00d7 the entire CLAUDE.md on its own. If procedure lived in CLAUDE.md, every run of every lane would carry all of it. The architecture is not a stylistic preference; it is the only thing that makes the fleet affordable.<\/p>\n\n<h3>CLAUDE.md \u2014 facts true on every run, for every lane<\/h3>\n\n<p>Identity, voice, the target systems, where credentials live, the numbered rules. The test: <strong>would a different lane doing completely different work still need this?<\/strong> If only one lane needs it, it does not belong here.<\/p>\n\n<h3>Skills \u2014 procedure for one lane, loaded on demand<\/h3>\n\n<p>Step-by-step process, the exact payloads for that job, its specific failure modes. A skill file can be enormous because only the lane that needs it pays \u2014 and per-lane corrections belong here, fixed in the skill rather than bolted onto the global file. The same separation logic governs <a href=\"https:\/\/jonjones.ai\/ai\/claude-code-subagents\/\">when subagents help and when they add overhead<\/a> and <a href=\"https:\/\/jonjones.ai\/ai\/claude-code-plugins-operator-guide-2026\/\">which plugins earn the context they consume<\/a>.<\/p>\n\n<h3>Hooks \u2014 anything that must happen deterministically<\/h3>\n\n<p>This is the resolution my own measurements forced, and it is the single most actionable conclusion in this post.<\/p>\n\n<p>Rule 6 runs at 92.4% as a written instruction. <strong>It should never have been a written instruction.<\/strong> A deterministic, mechanical, end-of-run action with a defined format is exactly what a hook executes \u2014 and a hook does not get distracted at the end of a long run. The same goes for every &#8220;always log,&#8221; &#8220;always notify,&#8221; &#8220;always clean up&#8221; rule in your file.<\/p>\n\n<p>So the routing rule is:<\/p>\n\n<blockquote><p><strong>If it must happen every time without exception, it belongs in a hook. If it is procedure for one lane, it belongs in a skill. CLAUDE.md gets only what is globally true and genuinely needs judgement.<\/strong><\/p><\/blockquote>\n\n<p>Read that against the audit from earlier and the two halves lock together. The bucket labelled &#8220;off the critical path but verifiable&#8221; is not a list of rules to write more emphatically. It is a list of hooks you have not built yet. Phrasing was never going to close that gap \u2014 my 7.6% miss rate is the proof, and it was sitting in the logs for months.<\/p>\n\n<p>If you have a half-working CLAUDE.md and no appetite to run this audit yourself, that is the kind of thing I do for people \u2014 you can <a href=\"https:\/\/jonjones.ai\/book-a-meeting\/\">book a working session<\/a> and we will go through your actual file and logs rather than a template.<\/p>\n\n<h2>Frequently Asked Questions About CLAUDE.md<\/h2>\n\n<h3>How long should a CLAUDE.md be?<\/h3>\n<p>Short enough that every line changes behaviour. Mine is 485 lines and roughly 7,400 tokens, and I measured 47.8% of it as dead weight for a single run \u2014 so &#8220;as long as mine&#8221; is not the lesson. Length is the wrong metric entirely. The right one is the removal test: delete a section, and if no run comes out different, it should stay deleted.<\/p>\n\n<h3>Where should CLAUDE.md live?<\/h3>\n<p>In the project root, where Claude Code picks it up automatically. A personal file at <code>~\/.claude\/CLAUDE.md<\/code> applies across projects \u2014 useful for your own working preferences, risky for anything project-specific, because an instruction you forget is global will follow you into unrelated work.<\/p>\n\n<h3>Should I let Claude write its own CLAUDE.md?<\/h3>\n<p>For a first draft of structure, yes \u2014 <code>\/init<\/code> will scan a project and produce something reasonable. But my largest single section is wizard residue that has been read on every run since, so treat generated output as a starting point you must then cut down. Generation is cheap; the editing is the actual work, and it is the part people skip.<\/p>\n\n<h3>Why does Claude ignore my CLAUDE.md?<\/h3>\n<p>Usually it does not ignore the file \u2014 it drops specific instructions, and predictably which ones. In my measurements, rules that were preconditions of an action the agent had to take anyway ran at 100%, while a rule requiring a separate act at the end of the run came in at 92.4%, and a rule demanding something physically impossible ran at 0%. Before rewording anything, check whether the instruction is on the critical path. If it is not, phrasing will not save it.<\/p>\n\n<h3>What is the difference between CLAUDE.md and AGENTS.md?<\/h3>\n<p>Same purpose \u2014 standing instructions read at startup \u2014 with <code>AGENTS.md<\/code> emerging as a vendor-neutral convention and <code>CLAUDE.md<\/code> being what Claude Code reads natively. The filename is not the interesting decision: every CLAUDE.md best practice in this post about verifiability, critical-path compliance and context cost applies identically to either.<\/p>\n\n<h3>Do I need a CLAUDE.md if I do not write code?<\/h3>\n<p>You need it more. A coding agent has a test suite to catch its mistakes; a content or operations agent has nothing equivalent, so the definition of &#8220;done&#8221; and the method of verification have to be written down or they do not exist. Everything my fleet does is non-code, and the file is what stands in for the missing oracle.<\/p>\n\n<h3>How often should I update it?<\/h3>\n<p>Edit on incident, audit on a schedule. Every production surprise should produce either a line in the file or a hook. Separately, re-measure every month or two, because the failure mode here is not a bad edit \u2014 it is a good rule going stale while still looking authoritative, exactly like my rule 1 did. Keeping the runtime itself current matters too; I wrote up <a href=\"https:\/\/jonjones.ai\/ai\/how-to-update-claude-code\/\">how to update Claude Code without breaking a running fleet<\/a>.<\/p>\n\n<h2>Final Thoughts: CLAUDE.md Best Practices That Survive Production<\/h2>\n\n<p>The honest summary: my file is good, it still had one rule at 0% and another at 92.4%, and I knew neither number until I counted. Not neglect \u2014 written instructions degrade quietly, and a file full of confident imperatives looks identical whether it is working or not.<\/p>\n\n<p>Three things to take:<\/p>\n\n<p><strong>Measure before you rewrite.<\/strong> Every instinct says to fix a misbehaving file by wording it more forcefully. The data says wording was not the variable. Count first.<\/p>\n\n<p><strong>Put instructions where they can be enforced.<\/strong> Critical-path facts in CLAUDE.md, lane procedure in skills, anything that must happen every time in a hook. A rule that depends on the model remembering at the end of a long run will run at about 92% \u2014 fine for some things, not for the ones you believed were non-negotiable.<\/p>\n\n<p><strong>Delete more than feels comfortable.<\/strong> Nearly half my file was irrelevant to the run executing it, and its biggest section was scaffolding nobody had read since setup. Adding context feels free. It is not \u2014 you pay on every run, in every lane, forever.<\/p>\n\n<p>The real test of these CLAUDE.md best practices is not whether the file reads well. It is whether you can produce the number next to each rule. If you cannot, you do not have a governed agent \u2014 you have a hopeful one. And if you want to see what the rest of the stack looks like around a file like this, <a href=\"https:\/\/jonjones.ai\/ai\/everything-claude-code-operator-guide-2026\/\">the full operator&#8217;s walkthrough is here<\/a>, and <a href=\"https:\/\/jonjones.ai\/ai-automation\/self-hosted-ai-server\/\">the server it all runs on is here<\/a>.<\/p>\n\n<style>#kt-layout-idsignup_end > .kt-row-column-wrap{align-content:start;}:where(#kt-layout-idsignup_end > .kt-row-column-wrap) > .wp-block-kadence-column{justify-content:start;}#kt-layout-idsignup_end > .kt-row-column-wrap{column-gap:var(--global-kb-gap-md, 2rem);row-gap:var(--global-kb-gap-md, 2rem);padding-top:var( --global-kb-row-default-top, 25px );padding-bottom:var( --global-kb-row-default-bottom, 25px );padding-top:30px;padding-right:30px;padding-bottom:30px;padding-left:30px;grid-template-columns:repeat(2, minmax(0, 1fr));}#kt-layout-idsignup_end{border-top-left-radius:16px;border-top-right-radius:16px;border-bottom-right-radius:16px;border-bottom-left-radius:16px;overflow:clip;isolation:isolate;}#kt-layout-idsignup_end > .kt-row-layout-overlay{border-top-left-radius:16px;border-top-right-radius:16px;border-bottom-right-radius:16px;border-bottom-left-radius:16px;}#kt-layout-idsignup_end{background-color:#0d1117;}#kt-layout-idsignup_end > .kt-row-layout-overlay{opacity:0.30;}@media all and (max-width: 1024px){#kt-layout-idsignup_end > .kt-row-column-wrap{grid-template-columns:minmax(0, 1fr);}}@media all and (max-width: 767px){#kt-layout-idsignup_end > .kt-row-column-wrap{grid-template-columns:repeat(2, minmax(0, 1fr));}}<\/style>\n<div class=\"wp-block-kadence-rowlayout alignnone\">\n<style>.kadence-columnsignup_img_end > .kt-inside-inner-col{border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;}.kadence-columnsignup_img_end > .kt-inside-inner-col,.kadence-columnsignup_img_end > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-columnsignup_img_end > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-columnsignup_img_end > .kt-inside-inner-col{flex-direction:column;}.kadence-columnsignup_img_end > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-columnsignup_img_end > .kt-inside-inner-col:before{opacity:0.3;}.kadence-columnsignup_img_end{position:relative;}@media all and (max-width: 1024px){.kadence-columnsignup_img_end > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-columnsignup_img_end > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column inner-column-1\"><div class=\"kt-inside-inner-col\">\n\n<figure class=\"wp-block-image size-medium\"><img decoding=\"async\" src=\"https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/06\/newsletter-cta-ai-playbook.jpg\" alt=\"Lead Magnet AI Playbook \u2014 the operator's AI automation playbook\" \/><\/figure>\n\n<\/div><\/div>\n\n<style>.kadence-columnsignup_txt_end > .kt-inside-inner-col{border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;}.kadence-columnsignup_txt_end > .kt-inside-inner-col,.kadence-columnsignup_txt_end > .kt-inside-inner-col:before{border-top-left-radius:0px;border-top-right-radius:0px;border-bottom-right-radius:0px;border-bottom-left-radius:0px;}.kadence-columnsignup_txt_end > .kt-inside-inner-col{column-gap:var(--global-kb-gap-sm, 1rem);}.kadence-columnsignup_txt_end > .kt-inside-inner-col{flex-direction:column;}.kadence-columnsignup_txt_end > .kt-inside-inner-col > .aligncenter{width:100%;}.kadence-columnsignup_txt_end > .kt-inside-inner-col:before{opacity:0.3;}.kadence-columnsignup_txt_end{position:relative;}@media all and (max-width: 1024px){.kadence-columnsignup_txt_end > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}@media all and (max-width: 767px){.kadence-columnsignup_txt_end > .kt-inside-inner-col{flex-direction:column;justify-content:center;}}<\/style>\n<div class=\"wp-block-kadence-column inner-column-2\"><div class=\"kt-inside-inner-col\">\n\n<h3 class=\"wp-block-heading has-text-color\" style=\"color:#00d4b4\">The AI Playbook, Free<\/h3>\n\n\n<p class=\"has-text-color\" style=\"color:#f0f6fc\">Operator notes from a fleet that runs unattended \u2014 the measurements, the failures, and the fixes. No fluff, unsubscribe anytime.<\/p>\n\n<div class='fluentform ff-default fluentform_wrapper_8 ffs_default_wrap'><form data-form_id=\"8\" id=\"fluentform_8\" class=\"frm-fluent-form fluent_form_8 ff-el-form-top ff_form_instance_8_2 ff-form-loading ffs_default\" data-form_instance=\"ff_form_instance_8_2\" method=\"POST\" ><fieldset  style=\"border: none!important;margin: 0!important;padding: 0!important;background-color: transparent!important;box-shadow: none!important;outline: none!important; min-inline-size: 100%;\">\n                    <legend class=\"ff_screen_reader_title\" style=\"display: block; margin: 0!important;padding: 0!important;height: 0!important;text-indent: -999999px;width: 0!important;overflow:hidden;\">Lead Magnet - AI Playbook<\/legend><input type='hidden' name='__fluent_form_embded_post_id' value='7281' \/><input type=\"hidden\" id=\"_fluentform_8_fluentformnonce\" name=\"_fluentform_8_fluentformnonce\" value=\"f4274568d9\" \/><input type=\"hidden\" name=\"_wp_http_referer\" value=\"\/zh\/wp-json\/wp\/v2\/posts\/7281\" \/><div class='ff-el-group'><div class='ff-el-input--content'><input type=\"email\" name=\"email\" id=\"ff_8_2_email\" class=\"ff-el-form-control\" placeholder=\"Your email address\" data-name=\"email\"  aria-invalid=\"false\" aria-required=true><\/div><\/div><div class='ff-el-group ff-text-left ff_submit_btn_wrapper ff_submit_btn_wrapper_custom'><button class=\"ff-btn ff-btn-submit ff-btn-md ff_btn_style wpf_has_custom_css\" type=\"submit\" name=\"custom_submit_button-8_1\" data-name=\"custom_submit_button-8_1\"  aria-label=\"GET THE PLAYBOOK\">GET THE PLAYBOOK<\/button><style>form.fluent_form_8 .wpf_has_custom_css.ff-btn-submit { background-color:#00ff88;border-color:#00ff88;color:#0a0a14;min-width:100%; }form.fluent_form_8 .wpf_has_custom_css.ff-btn-submit:hover { background-color:#00cc6a;border-color:#00cc6a;color:#0a0a14;min-width:100%; } <\/style><\/div><\/fieldset><\/form><div id='fluentform_8_errors' class='ff-errors-in-stack ff_form_instance_8_2 ff-form-loading_errors ff_form_instance_8_2_errors'><\/div><\/div>            <script type=\"text\/javascript\">\n                window.fluent_form_ff_form_instance_8_2 = {\"id\":\"8\",\"settings\":{\"layout\":{\"labelPlacement\":\"top\",\"helpMessagePlacement\":\"with_label\",\"errorMessagePlacement\":\"inline\",\"asteriskPlacement\":\"asterisk-right\"},\"restrictions\":{\"denyEmptySubmission\":{\"enabled\":false}}},\"form_instance\":\"ff_form_instance_8_2\",\"form_id_selector\":\"fluentform_8\",\"rules\":{\"email\":{\"required\":{\"value\":true,\"message\":\"This field is required\"},\"email\":{\"value\":true,\"message\":\"Please enter a valid email address\"}}},\"debounce_time\":300};\n                            <\/script>\n            \n\n<\/div><\/div>\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u500b\u771f\u6b63\u7684 CLAUDE.md \u6587\u4ef6\uff0c\u4f86\u81ea\u4e00\u652f\u7121\u4eba\u76e3\u7ba1\u7684\u8266\u968a\u2014\u2014\u9010\u7bc0\u6e2c\u91cf\uff0c\u5305\u62ec\u4ee5 0% \u904b\u884c\u7684\u898f\u5247\u548c\u4ee5 92.4% \u904b\u884c\u7684\u898f\u5247\u3002.<\/p>","protected":false},"author":2,"featured_media":7273,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kadence_starter_templates_imported_post":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[28,44],"tags":[279,87,53,277,278],"class_list":["post-7281","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-ai-automation","tag-agent-configuration","tag-ai-agents","tag-claude-code-2","tag-claude-md","tag-context-engineering"],"taxonomy_info":{"category":[{"value":28,"label":"AI"},{"value":44,"label":"AI Automation"}],"post_tag":[{"value":279,"label":"Agent Configuration"},{"value":87,"label":"ai agents"},{"value":53,"label":"claude code"},{"value":277,"label":"CLAUDE.md"},{"value":278,"label":"Context Engineering"}]},"featured_image_src_large":["https:\/\/jonjones.ai\/wp-content\/uploads\/2026\/10\/claude-md-bp-featured.jpg",1344,752,false],"author_info":{"display_name":"Jon Jones","author_link":"https:\/\/jonjones.ai\/zh\/author\/jonjonjones-ai\/"},"comment_info":0,"category_info":[{"term_id":28,"name":"AI","slug":"ai","term_group":0,"term_taxonomy_id":28,"taxonomy":"category","description":"","parent":0,"count":96,"filter":"raw","cat_ID":28,"category_count":96,"category_description":"","cat_name":"AI","category_nicename":"ai","category_parent":0},{"term_id":44,"name":"AI Automation","slug":"ai-automation","term_group":0,"term_taxonomy_id":44,"taxonomy":"category","description":"","parent":0,"count":224,"filter":"raw","cat_ID":44,"category_count":224,"category_description":"","cat_name":"AI Automation","category_nicename":"ai-automation","category_parent":0}],"tag_info":[{"term_id":279,"name":"Agent Configuration","slug":"agent-configuration","term_group":0,"term_taxonomy_id":279,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":87,"name":"ai agents","slug":"ai-agents","term_group":0,"term_taxonomy_id":87,"taxonomy":"post_tag","description":"","parent":0,"count":37,"filter":"raw"},{"term_id":53,"name":"claude code","slug":"claude-code-2","term_group":0,"term_taxonomy_id":53,"taxonomy":"post_tag","description":"","parent":0,"count":43,"filter":"raw"},{"term_id":277,"name":"CLAUDE.md","slug":"claude-md","term_group":0,"term_taxonomy_id":277,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":278,"name":"Context Engineering","slug":"context-engineering","term_group":0,"term_taxonomy_id":278,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/posts\/7281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/comments?post=7281"}],"version-history":[{"count":0,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/posts\/7281\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/media\/7273"}],"wp:attachment":[{"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/media?parent=7281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/categories?post=7281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jonjones.ai\/zh\/wp-json\/wp\/v2\/tags?post=7281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}