[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-agent-plugins-100-turns-skills-into-folders-en":3,"article-related-agent-plugins-100-turns-skills-into-folders-en":29,"series-ai-agent-10a73d21-d035-474d-9fd9-1a1dd5caa863":78},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":11},"10a73d21-d035-474d-9fd9-1a1dd5caa863","agent-plugins-100-turns-skills-into-folders-en","Agent Plugins 1.0.0 turns skills into folders","\u003Cp data-speakable=\"summary\">8 client tools now read agent plugins from one folder format.\u003C\u002Fp>\u003Cp>I've been building with agent tooling long enough to know when something is actually useful and when it is just a fresh coat of paint. Most of the time, plugin stories are a mess: one format for one app, another half-standard for another app, and a bunch of glue code nobody wants to maintain. I keep ending up with a directory full of scripts, a README nobody reads, and a vague promise that “this will be portable later.” It usually isn’t.\u003C\u002Fp>\u003Cp>That is why the \u003Ca href=\"https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2069889254105392703\">Zhihu weekly post\u003C\u002Fa> caught my eye. The post says that on August 7, \u003Ca href=\"\u002Ftag\u002Fopenai\">OpenAI\u003C\u002Fa>, \u003Ca href=\"\u002Ftag\u002Fmicrosoft\">Microsoft\u003C\u002Fa>, Amazon, \u003Ca href=\"\u002Ftag\u002Fcursor\">Cursor\u003C\u002Fa>, and Vercel shipped \u003Cstrong>Agent Plugins 1.0.0\u003C\u002Fstrong>, a packaging standard for \u003Ca href=\"\u002Ftag\u002Fai-agent\">AI agent\u003C\u002Fa> plugins. It also says Google joined as a core maintainer and released \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fagents-cli\">Agents CLI\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdata-agent-kit\">Data Agent Kit\u003C\u002Fa>. The interesting part is not the announcement. It is the shape of the thing: one folder, one manifest, one set of skills, one MCP server config.\u003C\u002Fp>\u003Ch2>1. They finally made plugins boring on purpose\u003C\u002Fh2>\u003Cblockquote>“一个插件是一个文件夹，包含 plugin.json 清单、技能文件和 MCP 服务器配置。”\u003C\u002Fblockquote>\u003Cp>What this actually means is that the plugin is no longer a fuzzy idea. It is a package layout. You do not install “magic.” You ship a directory with a manifest, some skill files, and a server config that tells the client how to talk to it.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786610024064-pe2a.png\" alt=\"Agent Plugins 1.0.0 turns skills into folders\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>I like this because it kills a lot of accidental complexity. When I see a folder-based contract, I know where to look first. I know what can be versioned. I know what can be reviewed in \u003Ca href=\"\u002Ftag\u002Fcode-review\">code review\u003C\u002Fa>. And, honestly, I know what can break without me having to reverse-engineer a black box at 2 a.m.\u003C\u002Fp>\u003Cp>The post’s wording matters here. A \u003Ccode>plugin.json\u003C\u002Fcode> manifest is the anchor. Skill files are the behavior. MCP configuration is the bridge. That is a cleaner split than the usual “here is a plugin, good luck” approach I’ve seen in too many AI toolchains.\u003C\u002Fp>\u003Cp>How to apply it: stop treating your agent extension as a pile of prompts. Package it like software. Put identity in a manifest, behavior in files, and integration details in one config file. If someone on your team cannot explain the plugin by reading the folder tree, it is probably still too messy.\u003C\u002Fp>\u003Cul>\u003Cli>Keep the manifest small and explicit.\u003C\u002Fli>\u003Cli>Separate human-readable skills from machine wiring.\u003C\u002Fli>\u003Cli>Make the folder itself the contract, not a hidden registry.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>2. The real win is portability across clients\u003C\u002Fh2>\u003Cp>The post says the first supported clients include \u003Ca href=\"https:\u002F\u002Fcode.visualstudio.com\u002F\">VS Code\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fcursor.com\u002F\">Cursor\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffeatures\u002Fcopilot\">GitHub Copilot\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fchatgpt.com\u002F\">ChatGPT\u003C\u002Fa> and Codex, and \u003Ca href=\"https:\u002F\u002Fkiro.dev\u002F\">Kiro\u003C\u002Fa>. That is the part developers should care about. A plugin format only matters if it survives contact with more than one client.\u003C\u002Fp>\u003Cp>What this actually means is I can stop writing one-off wrappers for every product surface. If the same plugin package can be read by multiple tools, I get to spend my time on the skill itself instead of the integration tax. That is the difference between a standard and another private convention nobody will remember in six months.\u003C\u002Fp>\u003Cp>I have been burned by “portable” AI integrations before. Usually the portability exists in a slide deck, not in the code. One app wants a JSON blob. Another wants a YAML file. A third wants the same thing but renamed. Then the team starts copying and pasting adapters, and suddenly the “standard” is just a shared headache.\u003C\u002Fp>\u003Cp>How to apply it: design your plugin around the lowest common denominator that all target clients can actually read. Keep client-specific behavior out of the core package. If a client needs special handling, isolate that in a thin adapter layer, not in the plugin itself.\u003C\u002Fp>\u003Cul>\u003Cli>Test the same plugin folder in at least two clients before calling it done.\u003C\u002Fli>\u003Cli>Avoid client-specific prompts inside the manifest.\u003C\u002Fli>\u003Cli>Document what is universal and what is a client quirk.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>3. MCP is the part that makes this feel real\u003C\u002Fh2>\u003Cp>The post ties the plugin package to \u003Ca href=\"https:\u002F\u002Fmodelcontextprotocol.io\u002F\">MCP\u003C\u002Fa> server configuration. That is not a random detail. MCP is the plumbing that lets the agent discover and use tools in a consistent way. Without that, you just have a cute folder format with no reliable execution path.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786610016244-10ur.png\" alt=\"Agent Plugins 1.0.0 turns skills into folders\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>What this actually means is the plugin is not only a bundle of instructions. It is a bundle of instructions plus an interface contract. That is much better than stuffing every tool call into a prompt and praying the model interprets it correctly.\u003C\u002Fp>\u003Cp>I ran into this exact problem when I tried to keep tool definitions inside a single agent prompt. It worked right up until the prompt got long, the edge cases piled up, and nobody could tell whether a failure came from the model, the tool, or the prompt text. Once the tool boundary moved into a real protocol, debugging got less ridiculous.\u003C\u002Fp>\u003Cp>How to apply it: treat MCP config as part of your product surface. Version it. Review it. Validate it. If your plugin cannot advertise its tools cleanly through MCP, it is not ready for a multi-client world.\u003C\u002Fp>\u003Cp>Also, if you are new to the protocol, read the official docs at \u003Ca href=\"https:\u002F\u002Fmodelcontextprotocol.io\u002Fdocs\">modelcontextprotocol.io\u002Fdocs\u003C\u002Fa> before you invent your own shortcut. I have seen enough custom glue to know that “temporary” protocol hacks become permanent very quickly.\u003C\u002Fp>\u003Ch2>4. Google joining as a core maintainer is the nontrivial signal\u003C\u002Fh2>\u003Cp>The post says Google joined as a \u003Cstrong>Core Maintainer\u003C\u002Fstrong>. That is not just branding. It means the standard is not being left to one vendor’s roadmap whim. The same post also says Google released \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fagents-cli\">Agents CLI\u003C\u002Fa> and \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fdata-agent-kit\">Data Agent Kit\u003C\u002Fa>, which tells me they are not just watching from the sidelines.\u003C\u002Fp>\u003Cp>What this actually means is the standard has a better chance of surviving internal product churn. I do not care how polished a spec looks if only one company is willing to maintain it. In practice, standards die when the original sponsor gets distracted.\u003C\u002Fp>\u003Cp>There is also a subtle ecosystem effect here. Once Google shows up as a maintainer, other teams stop treating the format like a \u003Ca href=\"\u002Fnews\u002Frust-serious-gpu-programming-language-en\">side project\u003C\u002Fa>. That changes adoption behavior. People start asking, “Can our agent support this?” instead of “Should we bother?” Those are very different questions.\u003C\u002Fp>\u003Cp>How to apply it: if you are building on top of Agent Plugins, watch the maintainer list and the release cadence, not just the announcement post. Standards are social systems. If maintainers stop shipping, the spec is already on thin ice.\u003C\u002Fp>\u003Ch2>5. The folder layout is the part teams will actually copy\u003C\u002Fh2>\u003Cp>The most useful thing in the post is also the least glamorous: a plugin is a folder. That is the sort of detail teams can adopt without a steering committee, a migration plan, and three meetings that should have been emails.\u003C\u002Fp>\u003Cp>What this actually means is your internal plugin system can mirror the standard almost directly. If the external spec says manifest plus skills plus MCP config, then your repo should probably do the same. The closer your internal layout is to the external contract, the less translation code you need.\u003C\u002Fp>\u003Cp>I have seen teams over-engineer this part into a “plugin registry service” when all they needed was a clean directory structure and a validator. That is how simple standards become enterprise sludge. Do not do that unless you have a real scale problem.\u003C\u002Fp>\u003Cp>How to apply it: create a top-level folder per plugin, keep all metadata in one manifest, and keep executable behavior in named skill files. Add a small validation script in CI so broken packages fail before they reach a client.\u003C\u002Fp>\u003Cul>\u003Cli>One folder per plugin.\u003C\u002Fli>\u003Cli>One manifest file.\u003C\u002Fli>\u003Cli>One config path for MCP wiring.\u003C\u002Fli>\u003Cli>One CI check that validates the package shape.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>6. The practical downside: standards make bad plugins easier to ship\u003C\u002Fh2>\u003Cp>Here is the part people skip. A standard does not automatically make your plugin good. It just makes it easier to package bad ideas consistently. I have shipped enough tooling to know that a tidy folder can hide a terrible skill set just as well as a messy one.\u003C\u002Fp>\u003Cp>What this actually means is you still need good content inside the package. Clear names. Narrow responsibilities. Skills that do one job instead of twelve. If you stuff a plugin with vague instructions, the standard will not save you. It will just make the failure more portable.\u003C\u002Fp>\u003Cp>That is why I would treat Agent Plugins 1.0.0 as an engineering baseline, not a quality guarantee. The packaging is the easy part. The hard part is deciding what belongs in a skill, what belongs in the agent, and what should stay a normal application service.\u003C\u002Fp>\u003Cp>How to apply it: review plugins the same way you review libraries. Ask whether each skill is focused, whether the manifest is readable, and whether the MCP surface is minimal. If the answer is no, the plugin is probably too broad.\u003C\u002Fp>\u003Cp>And yes, I would still keep a human-written README in the folder. Standards do not replace context. They just make context easier to find.\u003C\u002Fp>\u003Ch2>The template you can copy\u003C\u002Fh2>\u003Cpre>\u003Ccode>agent-plugin-example\u002F\n├── plugin.json\n├── README.md\n├── skills\u002F\n│   ├── summarize.md\n│   ├── extract-fields.md\n│   └── draft-response.md\n└── mcp\u002F\n    └── server.json\n\n# plugin.json\n{\n  \"name\": \"agent-plugin-example\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A portable agent plugin packaged as a folder.\",\n  \"author\": \"Your Team\",\n  \"entry\": {\n    \"skillsDir\": \"skills\",\n    \"mcpConfig\": \"mcp\u002Fserver.json\"\n  },\n  \"clients\": [\n    \"vscode\",\n    \"cursor\",\n    \"github-copilot\",\n    \"chatgpt\",\n    \"codex\",\n    \"kiro\"\n  ]\n}\n\n# skills\u002Fsummarize.md\n---\nname: summarize\npurpose: Summarize the provided content into a concise, accurate brief.\ninputs:\n  - source_text\noutputs:\n  - summary\nrules:\n  - Preserve names, dates, and numbers.\n  - Do not add facts not present in the source.\n---\n\nWrite a concise summary of the source text.\n\n# skills\u002Fextract-fields.md\n---\nname: extract-fields\npurpose: Pull structured fields from unstructured text.\ninputs:\n  - source_text\n  - schema\noutputs:\n  - json\nrules:\n  - Return valid JSON only.\n  - Use null for missing fields.\n---\n\nExtract the requested fields from the source text.\n\n# skills\u002Fdraft-response.md\n---\nname: draft-response\npurpose: Draft a response using the provided context.\ninputs:\n  - context\n  - tone\noutputs:\n  - draft\nrules:\n  - Match the requested tone.\n  - Keep the draft under the requested length.\n---\n\nDraft a response based on the context.\n\n# mcp\u002Fserver.json\n{\n  \"name\": \"agent-plugin-example-mcp\",\n  \"version\": \"1.0.0\",\n  \"transport\": \"stdio\",\n  \"tools\": [\n    {\n      \"name\": \"summarize\",\n      \"description\": \"Summarize source text\",\n      \"inputSchema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"source_text\": { \"type\": \"string\" }\n        },\n        \"required\": [\"source_text\"]\n      }\n    },\n    {\n      \"name\": \"extract-fields\",\n      \"description\": \"Extract structured fields from source text\",\n      \"inputSchema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"source_text\": { \"type\": \"string\" },\n          \"schema\": { \"type\": \"object\" }\n        },\n        \"required\": [\"source_text\", \"schema\"]\n      }\n    },\n    {\n      \"name\": \"draft-response\",\n      \"description\": \"Draft a response from context\",\n      \"inputSchema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"context\": { \"type\": \"string\" },\n          \"tone\": { \"type\": \"string\" }\n        },\n        \"required\": [\"context\", \"tone\"]\n      }\n    }\n  ]\n}\n\n# README.md\n# Agent Plugin Example\n\nThis folder is packaged as an Agent Plugin 1.0.0-style directory.\n\n## What lives where\n- `plugin.json`: plugin identity and entry points\n- `skills\u002F`: human-readable skill definitions\n- `mcp\u002Fserver.json`: tool exposure and transport config\n\n## How to use it\n1. Keep the folder structure stable.\n2. Update the manifest when adding or removing skills.\n3. Validate the MCP schema in CI.\n4. Test the package in more than one client.\n\n## Rules I would follow\n- Keep skills focused.\n- Keep client-specific logic out of the plugin body.\n- Treat the folder as the contract.\n\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>That template is intentionally plain. I would rather ship a boring structure that every client can read than a clever format that only my team understands. If you want this to hold up in real work, keep the manifest small, keep the skills narrow, and keep the MCP config honest.\u003C\u002Fp>\u003Cp>The original source for this breakdown is the Zhihu post at \u003Ca href=\"https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2069889254105392703\">https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2069889254105392703\u003C\u002Fa>. I have reworked the idea into an implementation-oriented template, but the announcement details and source framing come from that post.\u003C\u002Fp>","Agent Plugins 1.0.0 packages agent skills into folders with a manifest, skill files, and MCP config.","zhuanlan.zhihu.com","https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2069889254105392703",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786610024064-pe2a.png","ai-agent","en","4ab8d4d0-3ebd-457d-87b7-c74c8420e59d",[17,18,19,20,21],"agent plugins","MCP","plugin packaging","OpenAI","Google",[23,24,25],"Agent Plugins 1.0.0 makes plugins folder-based, with a manifest, skills, and MCP config.","The standard matters because it can be read by multiple clients, not just one app.","A clean package shape helps teams ship portable agent skills without custom glue.",1,"2026-08-13T08:33:10.730688+00:00","2026-08-13T08:33:10.714+00:00",{"tags":30,"relatedLang":37,"relatedPosts":41},[31,33,35],{"name":20,"slug":32},"openai",{"name":18,"slug":34},"mcp",{"name":21,"slug":36},"google",{"id":15,"slug":38,"title":39,"language":40},"agent-plugins-1-0-0-ship-tool-packs-zh","Agent Plugins 讓工具包可交付","zh",[42,48,54,60,66,72],{"id":43,"slug":44,"title":45,"cover_image":46,"image_url":46,"created_at":47,"category":13},"b77650c4-7664-4af1-8ff1-2e1b792cdd58","faitheyes-tool-faithful-vision-agents-en","FaithEyes lets you train tool-faithful vision agents","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786258993834-8aqq.png","2026-08-09T07:02:49.995282+00:00",{"id":49,"slug":50,"title":51,"cover_image":52,"image_url":52,"created_at":53,"category":13},"3491c99c-621c-40d3-bbd8-b4a73702fb42","connect-qwen-3-8-max-cli-agents-en","Connect Qwen 3.8 Max to CLI Agents","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786255373689-rrwa.png","2026-08-09T06:02:30.990794+00:00",{"id":55,"slug":56,"title":57,"cover_image":58,"image_url":58,"created_at":59,"category":13},"445ecce7-ea09-49f7-a7f4-88391eb1bbf3","fine-tune-small-llm-legal-labeling-en","Fine-tune a small LLM for legal labeling","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786150968314-7umc.png","2026-08-08T01:02:27.269166+00:00",{"id":61,"slug":62,"title":63,"cover_image":64,"image_url":64,"created_at":65,"category":13},"306b4d13-3911-4fcb-9f53-861fa5e9b430","sala-boosts-long-context-edge-ai-en","SALA Boosts Long Context on Edge AI","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785765793459-52io.png","2026-08-03T14:02:45.076761+00:00",{"id":67,"slug":68,"title":69,"cover_image":70,"image_url":70,"created_at":71,"category":13},"33146ff0-fa4b-4174-9d11-e0dcbf120bdc","anthropic-breach-proves-ai-agents-need-hard-security-limits-en","Anthropic’s breach proves AI agents need hard security limits","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785742391184-iku1.png","2026-08-03T07:32:42.32307+00:00",{"id":73,"slug":74,"title":75,"cover_image":76,"image_url":76,"created_at":77,"category":13},"0a805e08-8c91-43a5-b6e2-a028c60c27a8","genai-mil-war-prompt-report-template-en","GenAI.mil turns a scary prompt into a report","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1785655981099-6hcj.png","2026-08-02T07:32:38.593628+00:00",[79,84,89,94,99,104,109,114,119,124],{"id":80,"slug":81,"title":82,"created_at":83},"03db8de8-8dc2-4ac1-9cf7-898782efbb1f","anthropic-claude-ai-agent-task-automation-en","Anthropic's Claude AI Agent: A New Era of Task Automation","2026-03-25T16:25:06.513026+00:00",{"id":85,"slug":86,"title":87,"created_at":88},"045d1abc-190d-4594-8c95-91e2a26f0c5a","googles-2026-ai-agent-report-decoded-en","Google’s 2026 AI Agent Report, Decoded","2026-03-26T11:15:23.046616+00:00",{"id":90,"slug":91,"title":92,"created_at":93},"e64aba21-254b-4f93-aa21-837484bb52ec","kimi-k25-review-stronger-still-not-legend-en","Kimi K2.5 review: stronger, still not a legend","2026-03-27T07:15:55.385951+00:00",{"id":95,"slug":96,"title":97,"created_at":98},"30dfb781-a1b2-4add-aebe-b3df40247c37","claude-code-controls-mac-desktop-en","Claude Code now controls your Mac desktop","2026-03-28T03:01:59.384091+00:00",{"id":100,"slug":101,"title":102,"created_at":103},"254405b6-7833-4800-8e13-f5196deefbe6","cloudflare-100x-faster-ai-agent-sandbox-en","Cloudflare’s 100x Faster AI Agent Sandbox","2026-03-28T03:09:44.356437+00:00",{"id":105,"slug":106,"title":107,"created_at":108},"04f29b7f-9b91-4306-89a7-97d725e6e1ba","openai-backs-isara-agent-swarm-bet-en","OpenAI backs Isara’s agent-swarm bet","2026-03-28T03:15:27.849766+00:00",{"id":110,"slug":111,"title":112,"created_at":113},"3b0bf479-e4ae-4703-9666-721a7e0cdb91","openai-plan-automated-ai-researcher-en","OpenAI’s plan for an automated AI researcher","2026-03-28T03:17:42.312819+00:00",{"id":115,"slug":116,"title":117,"created_at":118},"fe91bce0-b85d-4efa-a207-24ae9939c29f","harness-engineering-ai-agent-reliability-2026","Harness Engineering: From Bridle to Operating System, The Missing Link in AI Agent Reliability","2026-03-31T06:36:55.648751+00:00",{"id":120,"slug":121,"title":122,"created_at":123},"7a09007d-820f-43b3-8607-8ad1bfcb94c8","mcp-explained-from-prompts-to-production-en","MCP Explained: From Prompts to Production","2026-04-01T09:24:40.089177+00:00",{"id":125,"slug":126,"title":127,"created_at":128},"116d5ee9-a4f1-4b5a-aac5-5d035dd22bbe","amazon-bedrock-agents-multi-agent-workflows-en","Amazon Bedrock Agents Gets Multi-Agent Workflows","2026-04-01T09:30:30.197685+00:00"]