{"id":63,"date":"2026-07-26T17:30:31","date_gmt":"2026-07-26T17:30:31","guid":{"rendered":"https:\/\/www.dobryakov.net\/blog\/63\/"},"modified":"2026-07-26T18:55:54","modified_gmt":"2026-07-26T18:55:54","slug":"prompt-is-not-a-boundary","status":"publish","type":"post","link":"https:\/\/www.dobryakov.net\/blog\/63\/","title":{"rendered":"How to secure an AI coding agent without relying on the system prompt"},"content":{"rendered":"<p>A prompt is a wish. A perimeter is when the model physically cannot reach files or a shell: native tools off, an MCP intermediary, Docker per project+task, a filter before execution, an audit trail. Below is a working reference \u2014 and where the design gives way.<\/p>\n<p><!--more--><\/p>\n<p>You can\u2019t write \u201cdon\u2019t delete prod\u201d in a system prompt and call it a security control.<\/p>\n<p>The model will read it. It will even understand it. Then the context will make <code>rm<\/code> look reasonable, and it will run it. Not because it is malicious. Prompt text is not a rule the model must obey the way a firewall must drop a packet.<\/p>\n<p>Agent security sits in the layer the model cannot walk around: API surface, tokens, isolation, the operation filter. While everything works, that looks a lot like \u201cwe wrote a good system prompt.\u201d The difference shows up once. Usually expensive.<\/p>\n<h2>Why \u201cwe wrote a good system prompt\u201d fails a security review<\/h2>\n<p>Fintech, government, and large IT keep agents off their codebases: one bad command\u2019s blast radius is the repo, the secrets, the infrastructure. \u201cTrust us, we wrote a good system prompt\u201d lands as a wish-list in front of a bank\u2019s security team. It does not become a control plane.<\/p>\n<p>Enterprise already asks vendors for least privilege, isolation, full audit, reproducibility. We still let AI agents in without that package \u2014 \u201cthe model is smart.\u201d Intelligence does not shrink the attack surface. It changes the failure shape: instead of a crashing script, a confident <code>rm<\/code> in the middle of a \u201creasonable\u201d plan.<\/p>\n<h2>A working bastion<\/h2>\n<p>I built a working reference for that perimeter \u2014 <a href=\"https:\/\/github.com\/dobryakov\/enterprise-code-bastion\">enterprise-code-bastion<\/a>: a session launcher, an MCP server with <code>secureBash<\/code>, a session registry. Constrain the agent with architecture \u2014 native tools stripped, every action through a filtering intermediary in a sandbox.<\/p>\n<p>In practice:<\/p>\n<ol>\n<li><strong>Unit of work = project + task.<\/strong> Each pair gets its own Docker container with only that project mounted. Other sessions stay blind to it.<\/li>\n<li><strong>Claude with native tools off.<\/strong> <code>--tools &quot;&quot;<\/code> \u2014 no stock Read, Write, or Bash. Alone, the agent does not touch the host.<\/li>\n<li><strong>One channel out: MCP (Model Context Protocol) over HTTP.<\/strong> It needs a file or a shell command \u2014 it asks the server. It cannot act alone.<\/li>\n<li><strong>Filter before execution.<\/strong> In production, deterministic logic and\/or a separate LLM filter screens each command before <code>docker exec<\/code>. Destructive work dies before it runs.<\/li>\n<li><strong>Execute only inside the session container.<\/strong> Approved commands go through <code>docker exec<\/code> in the sandbox, not on the host. The result comes back to the model.<\/li>\n<li><strong>Audit.<\/strong> MCP requests land in <code>logs\/mcp.log<\/code> (JSON Lines); sessions in <code>sessions.csv<\/code>. For compliance that is an entry condition, not a nice-to-have.<\/li>\n<\/ol>\n<p>In the demo repo everything sits on one machine so the scheme is easy to see: project files and the MCP server side by side. In production you split them \u2014 code on one host, MCP guard on another. Then even if Claude somehow got Bash or Read back, there is still no path to the project files: they are physically elsewhere. The simplification in the repo is intentional.<\/p>\n<p>Full methodology, control table, launch commands: <a href=\"https:\/\/www.dobryakov.net\/howto\/enterprise-code-bastion.html\">Enterprise code bastion howto<\/a>.<\/p>\n<h2>Where it breaks<\/h2>\n<ul>\n<li><strong>Gate is only an LLM.<\/strong> The filter has its own prompt-injection surface. A hard guarantee needs a deterministic allowlist next to the model \u2014 otherwise you just moved trust from one model to another.<\/li>\n<li><strong><code>secureBash<\/code> still runs commands inside the container.<\/strong> Isolation is only as strong as the sandbox hardening: non-privileged, controlled egress, resource limits. A compromised container is still a blast radius: the host outside may survive, but everything that ran in the sandbox is already exposed.<\/li>\n<li><strong>A flat <code>sessions.csv<\/code>.<\/strong> Fine as an append-only demo journal. At org scale you need a real session store, RBAC, and an approval workflow.<\/li>\n<\/ul>\n<p>From this reference you can see the boundary: useful on one side, physically unable to step outside on the other \u2014 and what still needs building when security says pilot ok, now production.<\/p>\n<h2>Who this is for<\/h2>\n<p>CISOs, CTOs, Heads of AI, architects who need Claude (or an equivalent) on the code and still need to pass a security review. Not a weekend tutorial on starting an agent. The model reasons and proposes a plan; it cannot leave the allowed box \u2014 no direct tools, no direct access to the project tree, every command screened and run in a sandbox.<\/p>\n<p>Another control is splitting task definition from execution (observable shared state, git as audit): <a href=\"https:\/\/www.dobryakov.net\/howto\/agent-task-execution-split.html\">How to control what AI agents do<\/a>. The bastion covers the access perimeter; the split covers work transparency. You usually need both.<\/p>\n<p>Write the system prompt anyway \u2014 the agent reasons better with it. But when the model decides <code>rm<\/code> looks reasonable, what remains is whatever you built into the architecture. If that layer is empty, the prompt will not save anyone. Repo: <a href=\"https:\/\/github.com\/dobryakov\/enterprise-code-bastion\">github.com\/dobryakov\/enterprise-code-bastion<\/a><\/p>\n<p>Howto: <a href=\"https:\/\/www.dobryakov.net\/howto\/enterprise-code-bastion.html\">dobryakov.net\/howto\/enterprise-code-bastion.html<\/a><\/p>\n<p><!-- ilj-pilot-related --><\/p>\n<p>Related: <a href=\"https:\/\/www.dobryakov.net\/blog\/71\/\">book-as-context<\/a> for subject-matter grounding, and <a href=\"https:\/\/www.dobryakov.net\/blog\/65\/\">skill onboarding<\/a> when the assistant accumulates behavior packs.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u201cDon\u2019t delete prod\u201d in a system prompt is not a security control. The real boundary is where the model physically cannot act: API surface, isolation, operation filter, audit. Working reference: enterprise-code-bastion.<\/p>\n","protected":false},"author":0,"featured_media":68,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,25],"tags":[26,30,29,28,27],"class_list":["post-63","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai-engineering","category-security","tag-ai-agents","tag-claude-code","tag-enterprise","tag-least-privilege","tag-mcp"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.dobryakov.net\/blog\/63\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov&#039;s blog: management, development and testing\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"How to secure an AI coding agent without relying on the system prompt\" \/>\n\t\t<meta property=\"og:description\" content=\"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.dobryakov.net\/blog\/63\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-07-26T17:30:31+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-26T18:55:54+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"How to secure an AI coding agent without relying on the system prompt\" \/>\n\t\t<meta name=\"twitter:description\" content=\"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#blogposting\",\"name\":\"How to secure an AI coding agent without relying on the system prompt\",\"headline\":\"How to secure an AI coding agent without relying on the system prompt\",\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/prompt-is-not-a-boundary-1.jpg\",\"width\":1200,\"height\":630,\"caption\":\"How to secure an AI coding agent without relying on the system prompt\"},\"datePublished\":\"2026-07-26T17:30:31+00:00\",\"dateModified\":\"2026-07-26T18:55:54+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#webpage\"},\"articleSection\":\"AI Engineering, Security, AI agents, Claude Code, enterprise, least privilege, MCP\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-engineering\\\/#listItem\",\"name\":\"AI Engineering\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-engineering\\\/#listItem\",\"position\":2,\"name\":\"AI Engineering\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-engineering\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#listItem\",\"name\":\"How to secure an AI coding agent without relying on the system prompt\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#listItem\",\"position\":3,\"name\":\"How to secure an AI coding agent without relying on the system prompt\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/ai-engineering\\\/#listItem\",\"name\":\"AI Engineering\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#webpage\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/\",\"name\":\"How to secure an AI coding agent without relying on the system prompt\",\"description\":\"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/prompt-is-not-a-boundary-1.jpg\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#mainImage\",\"width\":1200,\"height\":630,\"caption\":\"How to secure an AI coding agent without relying on the system prompt\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/63\\\/#mainImage\"},\"datePublished\":\"2026-07-26T17:30:31+00:00\",\"dateModified\":\"2026-07-26T18:55:54+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"How to secure an AI coding agent without relying on the system prompt","description":"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.","canonical_url":"https:\/\/www.dobryakov.net\/blog\/63\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.dobryakov.net\/blog\/63\/#blogposting","name":"How to secure an AI coding agent without relying on the system prompt","headline":"How to secure an AI coding agent without relying on the system prompt","author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/www.dobryakov.net\/blog\/wp-content\/uploads\/2026\/07\/prompt-is-not-a-boundary-1.jpg","width":1200,"height":630,"caption":"How to secure an AI coding agent without relying on the system prompt"},"datePublished":"2026-07-26T17:30:31+00:00","dateModified":"2026-07-26T18:55:54+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.dobryakov.net\/blog\/63\/#webpage"},"isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/63\/#webpage"},"articleSection":"AI Engineering, Security, AI agents, Claude Code, enterprise, least privilege, MCP"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dobryakov.net\/blog\/63\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.dobryakov.net\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/#listItem","name":"AI Engineering"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/#listItem","position":2,"name":"AI Engineering","item":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/63\/#listItem","name":"How to secure an AI coding agent without relying on the system prompt"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/63\/#listItem","position":3,"name":"How to secure an AI coding agent without relying on the system prompt","previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/#listItem","name":"AI Engineering"}}]},{"@type":"Organization","@id":"https:\/\/www.dobryakov.net\/blog\/#organization","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","url":"https:\/\/www.dobryakov.net\/blog\/"},{"@type":"WebPage","@id":"https:\/\/www.dobryakov.net\/blog\/63\/#webpage","url":"https:\/\/www.dobryakov.net\/blog\/63\/","name":"How to secure an AI coding agent without relying on the system prompt","description":"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.dobryakov.net\/blog\/63\/#breadcrumblist"},"author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"creator":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/www.dobryakov.net\/blog\/wp-content\/uploads\/2026\/07\/prompt-is-not-a-boundary-1.jpg","@id":"https:\/\/www.dobryakov.net\/blog\/63\/#mainImage","width":1200,"height":630,"caption":"How to secure an AI coding agent without relying on the system prompt"},"primaryImageOfPage":{"@id":"https:\/\/www.dobryakov.net\/blog\/63\/#mainImage"},"datePublished":"2026-07-26T17:30:31+00:00","dateModified":"2026-07-26T18:55:54+00:00"},{"@type":"WebSite","@id":"https:\/\/www.dobryakov.net\/blog\/#website","url":"https:\/\/www.dobryakov.net\/blog\/","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov's blog: management, development and testing","og:type":"article","og:title":"How to secure an AI coding agent without relying on the system prompt","og:description":"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.","og:url":"https:\/\/www.dobryakov.net\/blog\/63\/","article:published_time":"2026-07-26T17:30:31+00:00","article:modified_time":"2026-07-26T18:55:54+00:00","twitter:card":"summary_large_image","twitter:title":"How to secure an AI coding agent without relying on the system prompt","twitter:description":"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion."},"aioseo_meta_data":{"post_id":"63","title":"How to secure an AI coding agent without relying on the system prompt","description":"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.","keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":"How to secure an AI coding agent without relying on the system prompt","og_description":"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.","og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":"How to secure an AI coding agent without relying on the system prompt","twitter_description":"How to constrain an AI agent with architecture instead of a system prompt: Claude with tools off, MCP-only channel, per project+task Docker, command filter, and audit trail. Reference: enterprise-code-bastion.","schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-07-26 17:30:44","updated":"2026-07-26 19:01:07"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/\" title=\"AI Engineering\">AI Engineering<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tHow to secure an AI coding agent without relying on the system prompt\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.dobryakov.net\/blog"},{"label":"AI Engineering","link":"https:\/\/www.dobryakov.net\/blog\/category\/ai-engineering\/"},{"label":"How to secure an AI coding agent without relying on the system prompt","link":"https:\/\/www.dobryakov.net\/blog\/63\/"}],"_links":{"self":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/63","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/comments?post=63"}],"version-history":[{"count":2,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/63\/revisions"}],"predecessor-version":[{"id":74,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/63\/revisions\/74"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/media\/68"}],"wp:attachment":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/media?parent=63"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/categories?post=63"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/tags?post=63"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}