<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Carpenter</title><link>https://carpenter-ai.org/</link><description>Recent content on Carpenter</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Carpenter</copyright><atom:link href="https://carpenter-ai.org/index.xml" rel="self" type="application/rss+xml"/><item><title>How Carpenter Works</title><link>https://carpenter-ai.org/docs/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://carpenter-ai.org/docs/overview/</guid><description>&lt;h2 class="relative group"&gt;The Core Loop
 &lt;div id="the-core-loop" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-core-loop" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Carpenter agents follow a simple cycle: &lt;strong&gt;observe → generate code → review → execute → persist&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Arcs: The Work Tree</title><link>https://carpenter-ai.org/docs/arcs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://carpenter-ai.org/docs/arcs/</guid><description>&lt;h2 class="relative group"&gt;What Is an Arc?
 &lt;div id="what-is-an-arc" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#what-is-an-arc" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;An &lt;strong&gt;arc&lt;/strong&gt; is a unit of work with a lifecycle. It is the &lt;em&gt;only&lt;/em&gt; work abstraction in Carpenter — tasks, projects, cron jobs, and sub-steps are all arcs at different depths in a recursive tree.&lt;/p&gt;</description></item><item><title>Security Model</title><link>https://carpenter-ai.org/docs/security/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://carpenter-ai.org/docs/security/</guid><description>&lt;h2 class="relative group"&gt;Threat Model
 &lt;div id="threat-model" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#threat-model" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Carpenter&amp;rsquo;s threat model is &lt;strong&gt;prompt injection, not adversarial users&lt;/strong&gt;. The danger is untrusted data — web content, webhooks, API responses — manipulating the AI into generating harmful code.&lt;/p&gt;</description></item><item><title>Research Foundations</title><link>https://carpenter-ai.org/docs/research/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://carpenter-ai.org/docs/research/</guid><description>&lt;p&gt;Carpenter&amp;rsquo;s security model draws on several lines of research in agentic AI security. This page summarizes the key ideas and how they informed the design.&lt;/p&gt;

&lt;h2 class="relative group"&gt;The Dual LLM Pattern
 &lt;div id="the-dual-llm-pattern" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-dual-llm-pattern" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Simon Willison, 2023&lt;/strong&gt; — &lt;a href="https://simonwillison.net/2023/Apr/25/dual-llm-pattern/" target="_blank" rel="noreferrer"&gt;The Dual LLM pattern for building AI assistants that can resist prompt injection&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Trust &amp; Taint</title><link>https://carpenter-ai.org/docs/trust/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://carpenter-ai.org/docs/trust/</guid><description>&lt;h2 class="relative group"&gt;The Problem
 &lt;div id="the-problem" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-problem" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;An autonomous agent that fetches web content, processes webhooks, or calls external APIs will inevitably encounter attacker-controlled data. The question isn&amp;rsquo;t whether — it&amp;rsquo;s how that data flows through the system without contaminating trusted operations.&lt;/p&gt;</description></item><item><title>Skills &amp; Memory</title><link>https://carpenter-ai.org/docs/skills-and-memory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://carpenter-ai.org/docs/skills-and-memory/</guid><description>&lt;h2 class="relative group"&gt;Skills
 &lt;div id="skills" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#skills" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Skills are knowledge-only markdown packages. They implement &lt;strong&gt;three-stage progressive disclosure&lt;/strong&gt; to minimize context window consumption:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Stage&lt;/th&gt;
 &lt;th&gt;What the agent sees&lt;/th&gt;
 &lt;th&gt;Token cost&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;1. Advertise&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Compact index in system prompt: name + description&lt;/td&gt;
 &lt;td&gt;~100 tokens per skill&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;2. Load&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Full &lt;code&gt;SKILL.md&lt;/code&gt; via &lt;code&gt;load_skill&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Varies&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;3. Read&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Specific resource files via &lt;code&gt;load_skill_resource&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;On demand&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Skills live at &lt;code&gt;skills_dir/{name}/SKILL.md&lt;/code&gt; with optional &lt;code&gt;resources/&lt;/code&gt; directories. Metadata is synced to a &lt;code&gt;skills&lt;/code&gt; table in the database.&lt;/p&gt;</description></item><item><title>Platform Architecture</title><link>https://carpenter-ai.org/docs/platform/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://carpenter-ai.org/docs/platform/</guid><description>&lt;h2 class="relative group"&gt;Core vs Platform
 &lt;div id="core-vs-platform" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#core-vs-platform" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Carpenter separates platform-agnostic logic from platform-specific implementations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Core&lt;/strong&gt; (&lt;code&gt;carpenter-ai&lt;/code&gt;) — Arc management, review pipeline, trust system, agent loop, model selection, skills, memory&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Platform packages&lt;/strong&gt; (&lt;code&gt;carpenter-linux&lt;/code&gt;, &lt;code&gt;carpenter-android&lt;/code&gt;, etc.) — Executors, sandbox backends, network egress enforcement, platform-specific tools&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Platform packages are thin. They register their implementations at startup, then hand off to the core:&lt;/p&gt;</description></item></channel></rss>