<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Documentation on CPEX Documentation</title><link>https://contextforge-org.github.io/cpex/docs/</link><description>Recent content in Documentation on CPEX Documentation</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://contextforge-org.github.io/cpex/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>Vision</title><link>https://contextforge-org.github.io/cpex/docs/vision/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/vision/</guid><description>&lt;h1 id="a-reference-monitor-for-agents"&gt;A Reference Monitor for Agents&lt;a class="anchor" href="#a-reference-monitor-for-agents"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;An agent backed by an LLM acts across trust domains. It calls tools, invokes other agents over A2A, runs inference, and fetches prompts and resources. The model deciding which operation to run is untrusted: it can be steered by injected content, confused by tool output, or simply wrong. Authorization, delegation, and information-flow control cannot live inside that model.&lt;/p&gt;
&lt;p&gt;CPEX puts them at the boundary. It is a deterministic reference monitor between the untrusted LLM and the capabilities it invokes. Every operation passes through CPEX, which decides what happens using state the model cannot see or forge.&lt;/p&gt;</description></item><item><title>Overview</title><link>https://contextforge-org.github.io/cpex/docs/overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/overview/</guid><description>&lt;h1 id="how-cpex-works"&gt;How CPEX Works&lt;a class="anchor" href="#how-cpex-works"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="a-running-scenario"&gt;A running scenario&lt;a class="anchor" href="#a-running-scenario"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Picture one agent serving several people. It answers questions by calling tools (an HR records service, a code repository, an email sender), invoking other agents over A2A, running inference, and fetching prompts and resources. The backends are shared. The callers are not: an HR analyst, an engineer, and a support rep each drive the same agent with different identities and different entitlements.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://contextforge-org.github.io/cpex/images/demo_scenario.png" alt="One agent serves three users across HR, repo, and email backends; CPEX policy produces a different outcome per identity" /&gt;&lt;/p&gt;</description></item><item><title>Quick Start</title><link>https://contextforge-org.github.io/cpex/docs/quickstart/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/quickstart/</guid><description>&lt;h1 id="quick-start"&gt;Quick Start&lt;a class="anchor" href="#quick-start"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This walks through standing up CPEX as an enforcement point and running the &lt;a href="https://contextforge-org.github.io/cpex/docs/overview/"&gt;scenario&lt;/a&gt;: the &lt;code&gt;get_employee&lt;/code&gt; route that authorizes by role and redacts a field by permission.&lt;/p&gt;
&lt;h2 id="1-add-cpex"&gt;1. Add CPEX&lt;a class="anchor" href="#1-add-cpex"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cargo add cpex --features builtins&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;builtins&lt;/code&gt; feature compiles in the bundled plugins and PDPs (JWT identity, OAuth delegation, PII scanner, audit logger, Cedar, CEL). For a smaller build, opt into a granular subset: &lt;code&gt;jwt&lt;/code&gt;, &lt;code&gt;cedar&lt;/code&gt;, &lt;code&gt;pii&lt;/code&gt;, and so on (see &lt;a href="https://contextforge-org.github.io/cpex/docs/builtins/"&gt;Builtins&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Common Message Format</title><link>https://contextforge-org.github.io/cpex/docs/cmf/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/cmf/</guid><description>&lt;h1 id="common-message-format"&gt;Common Message Format&lt;a class="anchor" href="#common-message-format"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;APL evaluates policy against a request. The Common Message Format (CMF) is the shape of that request: a protocol-agnostic envelope that represents any mediated operation in one structure, so a single policy can apply across tool calls, A2A methods, inference, prompts, and resources without caring which protocol carried them.&lt;/p&gt;
&lt;h2 id="why-a-common-format"&gt;Why a common format&lt;a class="anchor" href="#why-a-common-format"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Without CMF, a redaction policy for tool results and a redaction policy for LLM output are different code against different payload types, even though they do the same thing. CMF gives every interception point the same representation, so cross-cutting policy is written once and evaluated everywhere. This is what lets the same APL field pipeline redact a field whether it arrived in a tool result or a model completion.&lt;/p&gt;</description></item><item><title>Extensions &amp; Capability-Gating</title><link>https://contextforge-org.github.io/cpex/docs/extensions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/extensions/</guid><description>&lt;h1 id="extensions-and-capability-gating"&gt;Extensions and Capability-Gating&lt;a class="anchor" href="#extensions-and-capability-gating"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Alongside the message, every operation carries typed &lt;strong&gt;extensions&lt;/strong&gt;: the contextual state policy reasons about. Identity is an extension. So are security labels, the delegation chain, request headers, agent session context, and more. Each extension is bridged into the flat attribute bag APL reads, under a well-known namespace. &lt;strong&gt;Capability-gating&lt;/strong&gt; controls which plugins may read or write each one.&lt;/p&gt;
&lt;p&gt;This is a supporting concern, not the headline. You rarely configure it directly. It matters because it is what makes least privilege real for the plugins that execute policy effects, and because the namespaces below are the exact keys an APL predicate or plugin can read.&lt;/p&gt;</description></item><item><title>Plugins &amp; Pipeline</title><link>https://contextforge-org.github.io/cpex/docs/pipeline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/pipeline/</guid><description>&lt;h1 id="plugins-and-the-execution-pipeline"&gt;Plugins and the Execution Pipeline&lt;a class="anchor" href="#plugins-and-the-execution-pipeline"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;APL is the policy surface. The pipeline is what runs underneath it: the mechanism that executes a policy&amp;rsquo;s effects. Most of the time you write APL and never touch the pipeline directly. You reach for it when you extend the set of effects available to policy, by adding a plugin, or when you need to understand exactly how and when effects run.&lt;/p&gt;
&lt;h2 id="hooks"&gt;Hooks&lt;a class="anchor" href="#hooks"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A &lt;strong&gt;hook&lt;/strong&gt; is a named interception point. The host invokes a hook at an operation boundary (before a tool call, after an LLM completion, around a prompt or resource fetch), and the plugin manager runs the plugins registered there. Hooks are where APL routes attach: a route&amp;rsquo;s &lt;code&gt;policy&lt;/code&gt; phase runs at the pre-invocation hook, its &lt;code&gt;result&lt;/code&gt; phase at the post-invocation hook.&lt;/p&gt;</description></item><item><title>Builtins</title><link>https://contextforge-org.github.io/cpex/docs/builtins/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/builtins/</guid><description>&lt;h1 id="builtins"&gt;Builtins&lt;a class="anchor" href="#builtins"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;CPEX ships a set of builtin plugins, PDP resolvers, and a session store, each behind a Cargo feature. With a feature enabled, &lt;code&gt;cpex::install_builtins&lt;/code&gt; registers its factory and APL can reference it by &lt;code&gt;kind&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="the-catalog"&gt;The catalog&lt;a class="anchor" href="#the-catalog"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Kind&lt;/th&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th&gt;Feature&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;identity/jwt&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;identity&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;jwt&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Resolve a subject from a verified JWT (see &lt;a href="https://contextforge-org.github.io/cpex/docs/apl/identity/"&gt;Identity&lt;/a&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;delegator/oauth&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;delegator&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;oauth&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;RFC 8693 token exchange (see &lt;a href="https://contextforge-org.github.io/cpex/docs/apl/delegation/"&gt;Delegation&lt;/a&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;validator/pii-scan&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;validator&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;pii&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Detect and redact PII in content.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;audit/logger&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;audit&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;audit&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Append-only decision logging.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;cedar-direct&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;PDP resolver&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;cedar&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Evaluate Cedar policy (dialect &lt;code&gt;cedar&lt;/code&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;cel&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;PDP resolver&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;cel&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Evaluate CEL expressions (dialect &lt;code&gt;cel&lt;/code&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;valkey&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;session store&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;valkey&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Persist taint labels across processes (see &lt;a href="https://contextforge-org.github.io/cpex/docs/apl/tainting/"&gt;Session Tainting&lt;/a&gt;).&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The default session store is in-process memory; no feature or &lt;code&gt;kind&lt;/code&gt; is needed for it.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://contextforge-org.github.io/cpex/docs/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/configuration/</guid><description>&lt;h1 id="configuration"&gt;Configuration&lt;a class="anchor" href="#configuration"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A CPEX config is a single document that declares the plugins and PDP resolvers available, the global settings, and the APL routes. The runtime loads it and the APL visitor wires routes to hooks.&lt;/p&gt;
&lt;h2 id="shape"&gt;Shape&lt;a class="anchor" href="#shape"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;plugins&lt;/span&gt;: &lt;span style="color:#75715e"&gt;# the plugins available to policy, by kind&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;hooks&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;...]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;capabilities&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;...]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;config&lt;/span&gt;: { &lt;span style="color:#ae81ff"&gt;... }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;global&lt;/span&gt;: &lt;span style="color:#75715e"&gt;# cross-cutting resolvers and stores&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pdp&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;session_store&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;routes&lt;/span&gt;: &lt;span style="color:#75715e"&gt;# APL policy, keyed by operation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;route&amp;gt;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;args&lt;/span&gt;: { &lt;span style="color:#ae81ff"&gt;... }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;policy&lt;/span&gt;: [ &lt;span style="color:#ae81ff"&gt;... ]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;result&lt;/span&gt;: { &lt;span style="color:#ae81ff"&gt;... }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;post_policy&lt;/span&gt;: [ &lt;span style="color:#ae81ff"&gt;... ]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="plugins"&gt;Plugins&lt;a class="anchor" href="#plugins"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Each plugin entry declares how it is identified, where it runs, and what it may see:&lt;/p&gt;</description></item><item><title>Deployment</title><link>https://contextforge-org.github.io/cpex/docs/deployment/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/deployment/</guid><description>&lt;h1 id="deployment"&gt;Deployment&lt;a class="anchor" href="#deployment"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;CPEX is the enforcement point, but where that point sits is your choice. The same APL policy enforces whether CPEX runs as a gateway in front of a tool server, as an egress sidecar beside an agent, or inside an agent framework. You move the boundary; the policy does not change.&lt;/p&gt;
&lt;h2 id="the-same-policy-any-enforcement-point"&gt;The same policy, any enforcement point&lt;a class="anchor" href="#the-same-policy-any-enforcement-point"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Take the &lt;code&gt;get_compensation&lt;/code&gt; route. It is identical whether CPEX fronts the backend, guards the agent&amp;rsquo;s egress, or runs inside the agent runtime:&lt;/p&gt;</description></item><item><title>Patterns</title><link>https://contextforge-org.github.io/cpex/docs/patterns/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/patterns/</guid><description>&lt;h1 id="patterns"&gt;Patterns&lt;a class="anchor" href="#patterns"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Production patterns for writing and rolling out CPEX policy. Each is expressed in APL and builds on the concepts in the earlier pages.&lt;/p&gt;
&lt;h2 id="layered-enforcement"&gt;Layered enforcement&lt;a class="anchor" href="#layered-enforcement"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Order effects cheapest-gate-first so expensive work only runs for requests that survive the early checks. Attribute gates, then a PDP call, then delegation:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;policy&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#e6db74"&gt;&amp;#34;require(team.engineering | team.security)&amp;#34;&lt;/span&gt; &lt;span style="color:#75715e"&gt;# cheap&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;cedar&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;action&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;Action::&amp;#34;read&amp;#34;&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;, resource&lt;/span&gt;: { &lt;span style="color:#f92672"&gt;type: Repo, id&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;${args.repo_name} } }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#e6db74"&gt;&amp;#34;delegate(github-oauth, target: github-api, permissions: [repo:read])&amp;#34;&lt;/span&gt; &lt;span style="color:#75715e"&gt;# expensive, last&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A deny at any layer halts the rest, so you never mint a token for a request a later layer would reject.&lt;/p&gt;</description></item><item><title>Testing</title><link>https://contextforge-org.github.io/cpex/docs/testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/testing/</guid><description>&lt;h1 id="testing-policy"&gt;Testing Policy&lt;a class="anchor" href="#testing-policy"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Policy is code, and it deserves tests. The behaviors worth covering are the ones the scenario demonstrates: a route allows the right callers, denies the wrong ones, and redacts the right fields. Because APL is declarative and evaluated by &lt;code&gt;apl-core&lt;/code&gt;, you can test a route by evaluating it against fixture identities and asserting the outcome, without standing up a live backend.&lt;/p&gt;
&lt;h2 id="what-to-test"&gt;What to test&lt;a class="anchor" href="#what-to-test"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For each route, cover the outcomes its policy produces:&lt;/p&gt;</description></item><item><title>Reference</title><link>https://contextforge-org.github.io/cpex/docs/reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://contextforge-org.github.io/cpex/docs/reference/</guid><description>&lt;h1 id="crate-reference"&gt;Crate Reference&lt;a class="anchor" href="#crate-reference"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;CPEX is a Cargo workspace of focused crates. Most hosts depend on &lt;code&gt;cpex&lt;/code&gt; (the facade); plugin authors depend on &lt;code&gt;cpex-sdk&lt;/code&gt;.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Crate&lt;/th&gt;
					&lt;th&gt;Role&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/contextforge-org/cpex/tree/main/crates/cpex"&gt;&lt;code&gt;cpex&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Host facade. Re-exports the runtime and, with a feature, the builtins. Start here.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/contextforge-org/cpex/tree/main/crates/cpex-core"&gt;&lt;code&gt;cpex-core&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;The runtime: &lt;code&gt;PluginManager&lt;/code&gt;, executor, hooks, config, extensions.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/contextforge-org/cpex/tree/main/crates/cpex-sdk"&gt;&lt;code&gt;cpex-sdk&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Plugin author SDK: the &lt;code&gt;Plugin&lt;/code&gt; and &lt;code&gt;HookHandler&lt;/code&gt; traits, payloads, results. Depend on this to write a plugin or PDP resolver.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/contextforge-org/cpex/tree/main/crates/cpex-orchestration"&gt;&lt;code&gt;cpex-orchestration&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Async concurrency primitives shared by the runtime.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/contextforge-org/cpex/tree/main/crates/cpex-builtins"&gt;&lt;code&gt;cpex-builtins&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Feature-gated bundle of builtin plugins, PDP resolvers, and the session store (see &lt;a href="https://contextforge-org.github.io/cpex/docs/builtins/"&gt;Builtins&lt;/a&gt;).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/contextforge-org/cpex/tree/main/crates/cpex-ffi"&gt;&lt;code&gt;cpex-ffi&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;C FFI (&lt;code&gt;cdylib&lt;/code&gt; / &lt;code&gt;staticlib&lt;/code&gt;) for Go, Python, and WASM host bindings.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/contextforge-org/cpex/tree/main/crates/apl-core"&gt;&lt;code&gt;apl-core&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;APL compiler and evaluator: rules, effects, field pipelines, routes.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/contextforge-org/cpex/tree/main/crates/apl-cmf"&gt;&lt;code&gt;apl-cmf&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Bridges typed extensions into the flat attribute bag APL reads.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/contextforge-org/cpex/tree/main/crates/apl-cpex"&gt;&lt;code&gt;apl-cpex&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;Runtime adapter: wires APL routes to hooks, dispatches plugins and PDPs.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Generated API docs are on &lt;a href="https://docs.rs/cpex"&gt;docs.rs/cpex&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>