{
  "source_file": "0930",
  "source_platform": "Ghost",
  "author": "Peng Qian / Data Leads Future",
  "title_listed": "How I Cut Kimi K3 Costs in OpenCode",
  "keywords": "",
  "domain": "大模型算法",
  "content_type": "工程实践",
  "is_paid_flag": "否",
  "url": "https://www.dataleadsfuture.com/how-i-cut-kimi-k3-costs-in-opencode/",
  "publish_date": "2026-07",
  "corpus_stage": "",
  "notes": "",
  "id": "a062566889d5",
  "collected_at": "2026-10-02T12:26:10",
  "title": "How I Cut Kimi K3 Costs in OpenCode",
  "body_markdown": "Harness Engineering\nHow I Cut Kimi K3 Costs in OpenCode\nBetter code quality, but spend less money\nPeng Qian\n31 Jul 2026\n—\n14 min read\nShare\nHow I Cut Kimi K3 Costs in OpenCode. Image by GPT-IMAGE-2\nIntroduction\nLast week, I burned through 7 days' worth of quota in a single day while using the\nKimi K3\nmodel on Kimi's Allegreto plan.\nKimi K3\nis genuinely great. Its performance is on par with\nClaude Fable 5\nand\nGPT 5.6 SOL\n, so I ended up going full throttle with it all day long.\nBut the cost is ridiculous. It runs way higher than\nGLM-5.2\n,\nDeepSeek-V4\n, or even\nKimi K2.7\n. For someone like me who got spoiled by the cheap API of\nDeepSeek-V4\n, that was just not okay.\nSo I started optimizing how I use OpenCode. The goal was to do more with the same\nKimi K3\nquota while keeping quality about the same.\nAfter a few days of work, the results are pretty solid. The Allegreto plan now covers a full week of development for me. No more sitting around two days out of five waiting for the weekly\nKimi K3\nquota to reset.\nIf these methods work for me, they should work for you too. So this article is a quick write-up of what I've done, and I hope it helps you lower your\nKimi K3\ncosts in OpenCode.\nAll the source code mentioned in this article is at the bottom. Feel free to grab it.\nPick the Right Provider\nThe most fundamental way to cut costs is picking the right provider. The official Coding Plan is the best option. Based on various reports, the third and fourth tiers of the Coding Plan offer dozens of times more value per dollar than the API at the same price. That's a great deal.\nBesides the official Coding Plan, if you'd rather pay per use or call a third-party API, you can just use open platforms that support Kimi K3, like\nNovita.ai\n(which offers ultra-low-latency endpoints and generous free credits for new users) and OpenRouter. The setup and how it works are the same.\nSince I already purchased the official Allegreto plan upfront, I'll use the Coding Plan models as the primary example throughout this article.\nPick the Right Model and Thinking Level (Variants)\nPick the right model\nThe Coding Plan gives you access to two models: K2.7 Code and K3. K3 requires Allegreto or above, and only the K3 model supports 1M context length.\nThis week, Kimi also released a K3 model with 256K context, with the model ID\nk3-256k\n. At the same time, the official docs confirmed that the standard K3 model consumes twice the quota of\nk3-256k\n. That's probably why I burned through a whole week's quota right out of the gate. Without a second thought, I switched my default model to\nk3-256k\n.\nA comparison of model capabilities provided on the official website. Screenshot from\nKimi\nYou might wonder: since I'm used to\nDeepSeek-V4\n's 1M context, will 256K be enough?\nI don't think you need to worry too much about that.\nThe 1M context mainly helps your cache hit rate stay high as conversations get longer. But context rot is still a real problem as the context grows. So if you've ever felt like\nDeepSeek-V4\ngets dumber after a long session, your instinct is right. That's context rot at work.\nOn top of that, we normally use frameworks like OpenSpec for SDD (Spec-Driven Development). All the plans and specs worked out earlier with the model get saved as files on disk. Whether you use the\n/compact\ncommand or start a new session, the model reads context from those files. The message history doesn't need to be that long.\nThen there are situations where you need to scan a large codebase or pull in a lot of information from the web. For those cases, we use sub-agents running in separate sub-sessions to handle the research, then return only the key findings to the main session. That approach cuts down context usage a lot.\nAll things considered, 256K context is plenty for now. For the\nPlan\nand\nBuild\nagents, just use\nk3-256k\ndirectly.\nIf you're using the API from\nNovita.ai\n, it's even simpler. Just use\nKimi K3\nstraight up.\nPick the thinking level\nFor a long time, Kimi models felt slow. That's because before K3, Kimi didn't support the\nreasoning_effort\nparameter. Every call defaulted to maximum thinking, so each request took forever to finish.\nThe K3 release added support for\nreasoning_effort\n, with three levels:\nlow\n,\nhigh\n, and\nmax\n. But when the model first launched last week, only\nmax\nwas available. That meant every call generated massive thinking tokens through a long chain-of-thought process, which burned through a huge amount of token budget.\nGood news: starting this week, both K3 models support\nlow\nand\nhigh\n. If you're setting up\nKimi K3\nin OpenCode for the first time this week, the default thinking level is\nHigh\n. If you configured\nKimi K3\nlast week, make sure you change the thinking level from\nMax\nto\nHigh\n.\nIf you care more about code quality than cost, or you're doing complex research and don't want lower thinking intensity to hurt your results, there's a middle ground. Use\nMax\nthinking in the\nPlan\nagent for architecture planning, then use\nHigh\nthinking in the\nBuild\nagent for code execution.\nOne thing to watch out for here is that, according to the\nofficial docs\n, switching the\nreasoning_effort\nvalue invalidates the context cache.\nRight after the switch, the model immediately refills the cache using your existing message history, which costs extra tokens. The official recommendation is to open a new session before switching\nreasoning_effort\n, so you avoid paying to refill old messages into the cache.\nThere's a more elegant solution though. Set up a dedicated sub-agent with\nMax\nthinking, specifically for architecture decisions and hard problems. I'll cover that in the next section.\nUse Sub-Agents to Build an Efficient Team\nWith the model and thinking level choices from earlier, you should already be saving a good chunk of tokens. If you want to cut costs even further, the best move is to use sub-agents, each with its own model and prompt, so each agent fits the task it handles.\nWhy does this work?\nIf you've ever led a dev team, you know that not everyone needs to be a superstar engineer, because superstars come with superstar price tags. From a cost and output perspective, the smartest call is matching the right task to the right person. A team runs best that way.\nSo which sub-agents should you set up to get more out of\nKimi K3\nper dollar?\nExplore\nHave you ever noticed that the bigger your codebase, the faster your token usage spikes?\nThat comes down to how LLM caching and codebase retrieval work together. OpenCode puts tools, skills, system prompts, and other mostly static content at the top of the message list when it sends requests to the model. The model caches all of that, so subsequent prompts don't cost much extra.\nThe real token hog is actually your most recent prompt. Before making any code changes, OpenCode uses\ngrep\nto search through relevant code. When the codebase is large, even a few\ngrep\ncalls can pull in a massive amount of text. That's where most of your tokens go.\nThe biggest token consumers are user messages and tool call results. Image by Author\nWhen you need to pull information from multiple files or web sources, doing that in the main session makes things worse. A huge amount of irrelevant text gets stuffed into the main message list, blowing up both the model's context window and your quota.\nThat's why OpenCode uses an\nexplore\nsub-agent to handle complex research in a separate sub-session. Once the research is done, only the conclusions get returned to the main session. That keeps the main session's token usage lean.\nBy default,\nexplore\nhas no model assigned to it, so it falls back to whatever model the primary agent uses, which is\nKimi K3\n. That keeps costs high.\nThe fix is to give the\nexplore\nagent its own dedicated model. I strongly recommend\ndeepseek-v4-flash\n. The\nflash\nmodel is cheap, has a long context window, and is plenty capable for text retrieval. Setup is simple. Just add a few lines to\n~/.config/opencode/opencode.json\n:\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"agent\": {\n    \"explore\": {\n      \"model\": \"novita-ai/deepseek/deepseek-v4-flash\"\n    }\n  }\n}\nQuick setup tip:\nIf you don't have a Novita account yet, grab your API Key from\nNovita AI\n, then paste it into the API KEY field under the Novita provider.\nMove the retrieval cost from the main session to a sub-session running on the DeepSeek Flash model. Image by Author\nGive it a try. When your bill drops significantly, you'll thank me.\nExecutor\nWith the\nexplore\nsub-agent and its dedicated model, we've already cut a big chunk of input token costs. Now let's look at how to reduce output token costs.\nOutput token costs mainly come from actually writing code. There's a common misconception here. You might think that since\nKimi K3\nis so capable, it must be the one writing the final code to make sure things work. That's not actually true.\nWriting code is a lot like a skilled programmer looking at a design doc and typing out what's on the screen. Most of it runs on muscle memory.\nIf the coding task is well-planned in advance, and the model doing the actual output isn't too far behind in capability, then whether\nKimi K3\nor\ndeepseek-v4-flash\nwrites the code, the quality difference is not that big.\nWhat really matters is who thinks. Good system design and knowing exactly what code will solve the problem efficiently, that's the important part.\nSo we can keep the\nPlan\nprimary agent for task planning and detailed spec generation (I recommend OpenSpec for SDD planning here), then hand off the actual coding to an\nexecutor\nsub-agent. This agent doesn't need to think. It just needs to write the code.\nOpenCode doesn't come with an\nexecutor\nsub-agent out of the box, so we build one ourselves. You don't have to agonize over the prompt. Just open OpenCode and tell\nKimi K3\nwhat you want, like this:\nI want to create a sub-agent called `executor`. Its main job is to complete coding and file editing tasks quickly at low cost. It doesn't do any research or information retrieval. That's the primary agent's job. Its only responsibility is to implement code fast based on the primary agent's plan.\nOpenCode will write an\nexecutor\nagent file under\n~/.config/opencode/agents/\nbased on what you described. Once it's done, restart OpenCode, and you're good to go.\nYou can also give the\nexecutor\nmore responsibilities. For example, you can allow it to run concurrently to speed things up:\nThis agent should support concurrent work. When the tasks to be implemented have no dependencies on each other, multiple `executor` agents (no more than 5) can be called in parallel to finish the work faster.\nDon't forget to set the\nexecutor\nagent's model to\ndeepseek-v4-flash\n.\n---\ndescription: ...\nmode: subagent\nmodel: novita-ai/deepseek/deepseek-v4-flash\npermission:\n  webfetch: deny\n  websearch: deny\n  task: deny\n  skill: deny\n---\nRestart OpenCode again. If you're not sure whether\nexecutor\nis configured correctly, ask OpenCode to run a self-check and evaluate whether the\nexecutor\nis working the way you designed it.\nAsk OpenCode to run a self-check to see if the\nexecutor\nis working properly. Image by Author\nOpenCode will generate some temporary coding tasks and hand them to\nexecutor\nto complete. It will also try to ask\nexecutor\nto do things it's not permitted to do, just to see if it follows the rules.\nWhen\nexecutor\nfinishes, it returns a summary to the primary agent about whether the task was completed successfully.\nKimi K3\nnever has to output the actual code, so those expensive output token costs stay low.\nAt the same time,\ndeepseek-v4-flash\nis capable enough that your code quality won't take a noticeable hit.\nOne important thing to keep in mind with the\nexecutor\nagent: don't let the\ndeepseek-v4\nmodel write frontend code. Due to gaps in post-training,\ndeepseek-v4\nreally struggles with frontend visual design. So you should restrict the\nexecutor\nagent from handling frontend work:\nThis agent does not support frontend development. Any frontend-related work should never be assigned to this agent.\nOr you can set the\nexecutor\nagent to still use the\nKimi K3\nmodel, but with the variant set to\nlow\n.\nIf you mostly write backend code,\ndeepseek-v4-flash\nis enough. If you write frontend code regularly, I'd go with the K3 model plus\nvariant=low\n.\nThat brings up a natural question: how do we make the most out of the thinking level parameter?\nArchitect\nTo keep\nKimi K3\nfast and reduce token consumption during the thinking process, we set the default thinking level to\nHigh\n.\nI mentioned earlier that you can set the\nPlan\nagent to\nMax\nthinking during the planning phase. But what if you need K3 to hit Fable 5-level performance to crack a hard problem? You'd have to set\nreasoning_effort\nto\nMax\n.\nThe official docs say that switching\nreasoning_effort\ninvalidates the existing context cache, so the recommendation is to open a new session first.\nBut that's not realistic in practice. The times when you actually need\nreasoning_effort=max\nare usually when you're stuck on an architecture tradeoff or a bug you can't fix after several tries.\nAt that point, your message list is already packed with critical context. Starting a new session means K3 has to re-scan all the relevant code from scratch, and it's doing that scan at\nmax\nthinking intensity, which burns even more tokens.\nAnd then if you want to switch back from\nmax\nto\nhigh\n, the cache has to be refilled all over again, wasting another round of tokens. No matter how you slice it, it's not worth it.\nSo why does a sub-agent solve this? Because we can set up a K3 sub-agent with\nreasoning_effort\nlocked at\nmax\n(I call this one\narchitect\n).\nWhen a hard problem needs solving, the primary agent first summarizes its current session into a condensed brief, then sends that brief along with the problem to the\narchitect\nagent through a fresh sub-session.\nAt that point,\narchitect\nalready understands the full context, so it doesn't need to re-scan all the documents the way a brand-new session would. It only needs to look up a few extra details it cares about, then focus entirely on thinking through the solution.\nI also turn off edit permissions for the\narchitect\nagent. That way K3 isn't burning\nmax\n-level thinking on actually writing code fixes. It just figures out the solution. The primary agent handles everything else.\nBuilding this sub-agent is straightforward. Just open OpenCode and ask it to write the prompt for you:\nDesign an architect sub-agent specifically for making architecture decisions, debugging hard bugs, and doing code reviews.\nDon't forget to assign\narchitect\nthe Kimi K3 model with\nvariant\nset to\nmax\n:\n---\ndescription: ...\nmode: subagent\nmodel: novita-ai/moonshotai/kimi-k3\nvariant: max\npermission:\n  edit: deny\n  task: deny\n---\nTo stop the primary agent from getting lazy and routing every problem to\narchitect\n, add a guardrail in the sub-agent description. Require the primary agent to try at least two times on its own before delegating:\nHard bugs must go through at least two independent hypothesis-and-verify rounds by the primary agent with no resolution before they can be delegated here.\nAfter restarting OpenCode, ask it to run a self-check to verify that\narchitect\napplies the right thinking level when tackling hard problems:\nRun a self-check on the availability of the\narchitect\nagent. Image by Author\nGeneral\nLast but not least, don't overlook the\ngeneral\nsub-agent.\nAs one of OpenCode's built-in sub-agents, this one has always had a confusing identity.\nLooking at the source code, it's meant for complex research and retrieval work, which puts it in similar territory as\narchitect\n, only to be called when heavy reasoning is needed. But it also supports concurrent calls to speed up research, which makes its token burn rate closer to\nexecutor\n. The role feels split in two.\nThis agent rarely gets called during normal use. But if you ignore it, one day a complex deep research task might come up, and it'll get called concurrently to run complex web searches and research work, all using the default\nKimi K3 High\n.\nSo if you want tight control over your LLM token usage, make sure you assign this sub-agent a cheaper model. In my view,\ndeepseek-v4-pro\nis a great fit here. It's capable enough for complex research, and the token cost isn't much higher than\ndeepseek-v4-flash\n:\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"agent\": {\n    \"explore\": {\n      \"model\": \"novita-ai/deepseek/deepseek-v4-flash\"\n    },\n    \"general\": {\n      \"model\": \"novita-ai/deepseek/deepseek-v4-pro\"\n    }\n  }\n}\nConclusion\nThat covers everything I've done to use Kimi K3 at lower cost inside OpenCode.\nWith Kimi K3's model weights now publicly released, these methods come at the perfect time to help you experience this excellent model without breaking the bank. In my experience, after applying all these settings, even during high-intensity development work, my Allegretto plan went from \"work two days, rest five\" to \"work five days, rest two.\"\nEven if your main models are Claude or GPT, these optimization approaches still apply. On top of that, the sub-agent setup I recommended here will noticeably speed up your development workflow and boost your overall efficiency.\nThat's all for today. I'm\nMr. Qian\n, and I focus on enterprise-level AI Agent applications in practice. If you have any questions about this article, feel free to leave a comment, and I'll get back to you as soon as I can.\nThank you for reading and subscribing. Feel free to share this article with your friends so more people can benefit from it.\nFollow Data Leads Future\nOne practical story every month, sharing my hard-learned experiences in the enterprise AI space.\nSubscribe\nEmail sent! Check your inbox to complete your signup.\nNo spam, No ads, you can unsubscribe anytime.\nFurther Reading\nHow I built a coding workflow in OpenCode, Oh-My-OpenCode-Slim, and OpenSpec that rivals Claude Code:\nHow I Use OpenCode, Oh-My-OpenCode-Slim, and OpenSpec to Build My Own AI Coding Environment\nRide the wave of AI coding, don’t get swept away by it\nData Leads Future\nPeng Qian\nBy adding a reflective agent to the OpenSpec workflow, I managed to get DeepSeek-V4-Pro to perform at the level of Opus:\nReflection SDD: Use a Reflection Harness to Level Up Your OpenSpec Workflow\nStop letting bad spec files tank your code quality\nData Leads Future\nPeng Qian\nThe concept of Loop Engineering has been getting a lot of buzz lately, so I decided to give it a shot in OpenCode. The results were surprisingly good:\nNo Plugins Needed, I Built a Fully Automated Coding Loop in OpenCode\nUsing DeepSeek-V4 for low-cost Loop Engineering\nData Leads Future\nPeng Qian\nSource Code\nHere's the\nsource code for this article\n. Sign up now to get it for free.\nGrab the Source Code",
  "metadata": {
    "title": "How I Cut Kimi K3 Costs in OpenCode",
    "description": "With the same Kimi K3 quota and similar quality, you can get more done. This post outlines how I optimized my OpenCode setup to reduce Kimi K3 costs.",
    "keywords": null,
    "author": null,
    "og:site_name": "Data Leads Future",
    "og:type": "article",
    "og:title": "How I Cut Kimi K3 Costs in OpenCode",
    "og:description": "Better code quality, but spend less money",
    "og:url": "https://www.dataleadsfuture.com/how-i-cut-kimi-k3-costs-in-opencode/",
    "og:image": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/size/w1200/2026/07/cover_tiny.webp",
    "og:image:width": "1200",
    "og:image:height": "800",
    "twitter:card": "summary_large_image",
    "twitter:title": "How I Cut Kimi K3 Costs in OpenCode",
    "twitter:description": "Better code quality, but spend less money",
    "twitter:url": "https://www.dataleadsfuture.com/how-i-cut-kimi-k3-costs-in-opencode/",
    "twitter:image": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/size/w1200/2026/07/cover_tiny.webp",
    "twitter:label1": "Written by",
    "twitter:data1": "Peng Qian",
    "twitter:label2": "Filed under",
    "twitter:data2": "Harness Engineering, Generative AI, Career Growth",
    "twitter:site": "@qtalen",
    "twitter:creator": "@qtalen",
    "article:published_time": "2026-07-31T08:04:03.000Z",
    "article:modified_time": "2026-09-09T03:07:56.000Z",
    "article:tag": "Career Growth"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [
    {
      "file": "attachments/a062566889d5/code/body-000.txt",
      "chars": 145,
      "language": "text"
    },
    {
      "file": "attachments/a062566889d5/code/body-001.txt",
      "chars": 296,
      "language": "text"
    },
    {
      "file": "attachments/a062566889d5/code/body-002.txt",
      "chars": 208,
      "language": "text"
    },
    {
      "file": "attachments/a062566889d5/code/body-003.txt",
      "chars": 157,
      "language": "text"
    },
    {
      "file": "attachments/a062566889d5/code/body-004.txt",
      "chars": 115,
      "language": "text"
    },
    {
      "file": "attachments/a062566889d5/code/body-005.txt",
      "chars": 122,
      "language": "text"
    },
    {
      "file": "attachments/a062566889d5/code/body-006.txt",
      "chars": 126,
      "language": "text"
    },
    {
      "file": "attachments/a062566889d5/code/body-007.txt",
      "chars": 154,
      "language": "text"
    },
    {
      "file": "attachments/a062566889d5/code/body-008.txt",
      "chars": 221,
      "language": "text"
    }
  ],
  "images": [
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/size/w1200/2026/07/cover_tiny.webp",
      "bytes": 216802,
      "reused": true,
      "local_path": "attachments/a062566889d5/images/000.webp",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/size/w1200/2026/07/cover_tiny.webp",
      "alt": "How I Cut Kimi K3 Costs in OpenCode.",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-13.png",
      "bytes": 60333,
      "reused": true,
      "local_path": "attachments/a062566889d5/images/005.png",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-13.png",
      "alt": "A comparison of model capabilities provided on the official website.",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-14.png",
      "bytes": 11372,
      "reused": true,
      "local_path": "attachments/a062566889d5/images/006.png",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-14.png",
      "alt": "The biggest token consumers are user messages and tool call results.",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-15.png",
      "bytes": 19462,
      "reused": true,
      "local_path": "attachments/a062566889d5/images/008.png",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-15.png",
      "alt": "Move the retrieval cost from the main session to a sub-session running on the DeepSeek Flash model.",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-16.png",
      "bytes": 18514,
      "reused": true,
      "local_path": "attachments/a062566889d5/images/010.png",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-16.png",
      "alt": "Ask OpenCode to run a self-check to see if the executor is working properly.",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-17.png",
      "bytes": 26599,
      "reused": true,
      "local_path": "attachments/a062566889d5/images/012.png",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/2026/07/image-17.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/icon/color_192_192-e5c5bb35-cbaa-434b-baea-547f937998e0.png",
      "bytes": 17519,
      "reused": false,
      "local_path": "attachments/a062566889d5/images/body-3a9be69cd511f48a8120.png",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/icon/color_192_192-e5c5bb35-cbaa-434b-baea-547f937998e0.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/thumbnail/opencode_cover_3-1-59d35e77-6277-4b4b-8e8f-23f411b077fb.webp",
      "bytes": 118782,
      "reused": true,
      "local_path": "attachments/a062566889d5/images/014.webp",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/thumbnail/opencode_cover_3-1-59d35e77-6277-4b4b-8e8f-23f411b077fb.webp",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/icon/color_192_192-5a85b02b-2380-40c1-8b28-50ee54deefbb.png",
      "bytes": 17519,
      "reused": false,
      "local_path": "attachments/a062566889d5/images/body-b0897ce0c6867ef53117.png",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/icon/color_192_192-5a85b02b-2380-40c1-8b28-50ee54deefbb.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/thumbnail/9f04a900-aa9a-4fd2-bd70-6f3fe3783129-f9ad9e37-a235-4e82-b193-90540c1d7319.webp",
      "bytes": 150196,
      "reused": true,
      "local_path": "attachments/a062566889d5/images/015.webp",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/thumbnail/9f04a900-aa9a-4fd2-bd70-6f3fe3783129-f9ad9e37-a235-4e82-b193-90540c1d7319.webp",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/icon/color_192_192-abc0b774-ec22-4b1b-8119-0037d9dcc229.png",
      "bytes": 17519,
      "reused": false,
      "local_path": "attachments/a062566889d5/images/body-a4403996ca9374a953e5.png",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/icon/color_192_192-abc0b774-ec22-4b1b-8119-0037d9dcc229.png",
      "alt": "",
      "downloaded": true
    },
    {
      "status": "ok",
      "url": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/thumbnail/cover-3-comprass-b8cec65e-5414-414c-80bf-e2b49730c256.webp",
      "bytes": 156130,
      "reused": true,
      "local_path": "attachments/a062566889d5/images/016.webp",
      "src": "https://storage.ghost.io/c/33/67/33678c00-2c15-4961-93e9-497b427e2006/content/images/thumbnail/cover-3-comprass-b8cec65e-5414-414c-80bf-e2b49730c256.webp",
      "alt": "",
      "downloaded": true
    }
  ],
  "audio": [],
  "videos": [],
  "links": [
    {
      "href": "https://www.dataleadsfuture.com/tag/harness-engineering/",
      "label": "Harness Engineering",
      "type": "a"
    },
    {
      "href": "https://www.dataleadsfuture.com/author/peng/",
      "label": "",
      "type": "a"
    },
    {
      "href": "https://fas.st/t/cBJ7iuNS",
      "label": "Novita.ai",
      "type": "a"
    },
    {
      "href": "https://www.kimi.com/code/docs/en/kimi-code/models.html",
      "label": "Kimi",
      "type": "a"
    },
    {
      "href": "https://www.linkedin.com/in/qtalen",
      "label": "Mr. Qian",
      "type": "a"
    },
    {
      "href": "https://www.dataleadsfuture.com/how-i-use-opencode-oh-my-opencode-slim-and-openspec-to-build-my-own-ai-coding-environment/",
      "label": "How I Use OpenCode, Oh-My-OpenCode-Slim, and OpenSpec to Build My Own AI Coding Environment Ride the wave of AI coding, ",
      "type": "a"
    },
    {
      "href": "https://www.dataleadsfuture.com/reflection-sdd-use-a-reflection-harness-to-level-up-your-openspec-workflow/",
      "label": "Reflection SDD: Use a Reflection Harness to Level Up Your OpenSpec Workflow Stop letting bad spec files tank your code q",
      "type": "a"
    },
    {
      "href": "https://www.dataleadsfuture.com/no-plugins-needed-i-built-a-fully-automated-coding-loop-in-opencode/",
      "label": "No Plugins Needed, I Built a Fully Automated Coding Loop in OpenCode Using DeepSeek-V4 for low-cost Loop Engineering Dat",
      "type": "a"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-14T10:47:45Z",
  "source_url": "https://www.dataleadsfuture.com/how-i-cut-kimi-k3-costs-in-opencode/",
  "papers": [],
  "actual_video_files": [],
  "body_chars": 18728,
  "expected_body_images": 12,
  "discovery_status": "ok",
  "delivery_status": "ok",
  "missing_reason": "",
  "raw_html": "attachments/a062566889d5/pages/source.html",
  "local_html": "attachments/a062566889d5/pages/article.html",
  "body_base_path": "attachments/a062566889d5/pages/",
  "body_markdown_path": "attachments/a062566889d5/pages/article.md"
}