<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: tsing liu</title>
    <description>The latest articles on DEV Community by tsing liu (@tsing_liu_5256011ee363e16).</description>
    <link>https://dev.to/tsing_liu_5256011ee363e16</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4069669%2F070e4194-aa3d-4bc1-ad77-19067e5df1f1.png</url>
      <title>DEV Community: tsing liu</title>
      <link>https://dev.to/tsing_liu_5256011ee363e16</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tsing_liu_5256011ee363e16"/>
    <language>en</language>
    <item>
      <title>Cairness: Bringing Software Engineering Discipline to AI Coding Agents</title>
      <dc:creator>tsing liu</dc:creator>
      <pubDate>Sun, 09 Aug 2026 09:39:00 +0000</pubDate>
      <link>https://dev.to/tsing_liu_5256011ee363e16/when-an-ai-coding-agent-says-done-what-makes-you-believe-it-1dk5</link>
      <guid>https://dev.to/tsing_liu_5256011ee363e16/when-an-ai-coding-agent-says-done-what-makes-you-believe-it-1dk5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cairness&lt;/strong&gt; gives Claude Code and Codex an executable, verifiable, and auditable software-development lifecycle.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2d03jiafdcjh5utsnpf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd2d03jiafdcjh5utsnpf.png" alt="architecture" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI coding assistants have become remarkably capable. They can inspect a codebase, propose a patch, write tests, and explain their reasoning in a few minutes.&lt;/p&gt;

&lt;p&gt;But production engineering has a harder question than "can it write code?":&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When an AI agent says, "Done. Tests pass," what evidence makes that claim trustworthy?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The answer cannot be another paragraph in a prompt. A &lt;code&gt;CLAUDE.md&lt;/code&gt;, an &lt;code&gt;AGENTS.md&lt;/code&gt;, and a carefully worded checklist are useful, but they remain prose. They depend on the model remembering and voluntarily following them. When the model takes a shortcut, prose alone neither stops it nor gives you a reliable way to prove what happened afterward.&lt;/p&gt;

&lt;p&gt;That is the problem Cairness is designed to address. It is an open-source lifecycle governance framework for Claude Code and Codex that turns development conventions into executable contracts and verifies them with deterministic tooling.&lt;/p&gt;

&lt;p&gt;Its core idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Replace "please follow this process" with "this process can be verified."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At the time this article was written, Cairness v1.3.5 includes 14 lifecycle command contracts, 37 deterministic &lt;code&gt;cc-*&lt;/code&gt; scripts, 17 JSON Schemas, 34 topic rules, and a repository test suite with 1,206 passing tests. Those numbers matter less than the design behind them: an AI agent should not be the sole judge of whether it followed the rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Failure Mode Is Not Just Model Quality
&lt;/h2&gt;

&lt;p&gt;If you use AI coding agents on real projects, the following situations are probably familiar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You ask for a small login-timeout fix. The agent edits code before anyone has clarified the requirements, scope, or failure mode.&lt;/li&gt;
&lt;li&gt;It reports that tests pass. You run them locally and discover a failure, then begin another repair loop.&lt;/li&gt;
&lt;li&gt;You send several agents into different modules. They all touch the same shared file.&lt;/li&gt;
&lt;li&gt;The context grows through dozens of turns, quality falls, and token cost climbs.&lt;/li&gt;
&lt;li&gt;You wrote a long engineering guide. The agent read it, then ignored an important rule three turns later.&lt;/li&gt;
&lt;li&gt;Your team accumulated hard-won operational knowledge, but neither people nor agents load it at the moment it matters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these problems requires a bad model. They are what happens when an engineering workflow has only one executor: the model itself.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Prompt or prose guideline&lt;/th&gt;
&lt;th&gt;Cairness&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Form of the agreement&lt;/td&gt;
&lt;td&gt;Natural-language instructions&lt;/td&gt;
&lt;td&gt;Structured YAML contract&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who executes it&lt;/td&gt;
&lt;td&gt;The model's judgment&lt;/td&gt;
&lt;td&gt;The model plus deterministic scripts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who verifies it&lt;/td&gt;
&lt;td&gt;Usually nobody independent&lt;/td&gt;
&lt;td&gt;Schemas, CLI checks, CI, regression tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consequence of a violation&lt;/td&gt;
&lt;td&gt;It may go unnoticed&lt;/td&gt;
&lt;td&gt;Non-zero exit, hard gate, and audit trail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context cost&lt;/td&gt;
&lt;td&gt;Re-send a large guide repeatedly&lt;/td&gt;
&lt;td&gt;Load the smallest declared set per command&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important distinction is independent execution. A structured contract has a second executor that does not get tired, forget rule 12, or decide that a shortcut is probably fine.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Cairness Actually Is
&lt;/h2&gt;

&lt;p&gt;Cairness organizes clarification, change proposal, implementation, review, testing, and archive steps as a lifecycle. Its architecture has three layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Contracts:&lt;/strong&gt; command manifests declare what is allowed, forbidden, required, and risky.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic verification:&lt;/strong&gt; scripts inspect whether those contracts and their results are valid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project truth:&lt;/strong&gt; &lt;code&gt;.cairness/&lt;/code&gt; stores specs, task plans, reviews, test evidence, audits, and knowledge.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Claude Code uses &lt;code&gt;.claude/&lt;/code&gt;; Codex uses &lt;code&gt;.codex/&lt;/code&gt; and &lt;code&gt;.agents/skills/cc-harness/&lt;/code&gt;. Both adapters consume the same runtime contracts and share the same &lt;code&gt;.cairness/&lt;/code&gt; state. The evidence written during a Change is fed back into verification, which is the practical meaning of the framework's &lt;strong&gt;Fresh Evidence&lt;/strong&gt; principle.&lt;/p&gt;

&lt;p&gt;The rest of this article explains the five ideas that make that system useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Commands Are Contracts, Not Suggestions
&lt;/h2&gt;

&lt;p&gt;Each lifecycle command has a machine-readable manifest. Here is a representative excerpt from the implementation phase, &lt;code&gt;cc-apply&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;cc-apply&lt;/span&gt;

&lt;span class="na"&gt;writes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;task_declared_code_files&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;test_files&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.cairness/changes/&amp;lt;change-id&amp;gt;/spec.md&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.cairness/context/dev-map.md&lt;/span&gt;

&lt;span class="na"&gt;forbids&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;silently_expand_implementation_beyond_spec_boundary&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;defer_minimum_verification_to_cc_test&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mark_done_without_evidence&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;auto_push_or_merge&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;dispatch_tasks_across_waves_in_parallel&lt;/span&gt;

&lt;span class="na"&gt;preconditions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;hard_gate_confirmed_for_current_revisions&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;depends_on_satisfied_verified_by_cc_deps_check&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;branch_matches_change_and_is_not_main&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;save_pre_apply_baseline_before_first_code_edit&lt;/span&gt;

&lt;span class="na"&gt;red_flags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;baseline_delta_contains_new_failure&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;wave_contains_tasks_with_overlapping_write_sets&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;implementation_expanded_beyond_declared_scope_without_flag_or_user_choice&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;writes&lt;/code&gt;, &lt;code&gt;forbids&lt;/code&gt;, &lt;code&gt;preconditions&lt;/code&gt;, &lt;code&gt;red_flags&lt;/code&gt;, and &lt;code&gt;stop_conditions&lt;/code&gt; are not documentation conventions. They are fields that schemas and runtime checks can inspect.&lt;/p&gt;

&lt;h3&gt;
  
  
  A hard gate that a language model cannot hand-wave away
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9chk1i5pnnioqx0p0ltf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9chk1i5pnnioqx0p0ltf.png" alt="lifecycle" width="799" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hard gate is central to the workflow. It is not a polite "please confirm" message. A user must explicitly choose &lt;code&gt;confirm_scope&lt;/code&gt;, &lt;code&gt;request_revision&lt;/code&gt;, or &lt;code&gt;block_until_clarified&lt;/code&gt;. Until a confirmation for the current revision exists, &lt;code&gt;cc-apply&lt;/code&gt; fails its &lt;code&gt;hard_gate_confirmed_for_current_revisions&lt;/code&gt; precondition and implementation does not begin.&lt;/p&gt;

&lt;p&gt;This is a small but important shift: "the agent said it was ready" is not a valid state transition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design for the excuses an agent will make
&lt;/h3&gt;

&lt;p&gt;One especially useful manifest field is &lt;code&gt;anti_rationalizations&lt;/code&gt;. It names common shortcuts before the agent takes them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;anti_rationalizations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;claim&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;These&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;changes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;are&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;small,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;so&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;they&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;do&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;need&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spec."&lt;/span&gt;
    &lt;span class="na"&gt;reality&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Small&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;does&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;mean&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unrecorded."&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;claim&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;can&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;refine&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scope&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;during&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;implementation."&lt;/span&gt;
    &lt;span class="na"&gt;reality&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cc-apply&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;depends&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;frozen&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;task&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scope&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;verification&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;mapping."&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;claim&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Authorization&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;checked&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;handler."&lt;/span&gt;
    &lt;span class="na"&gt;reality&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;A&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;repository&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;path&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;may&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bypass&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;handler."&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;claim&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;That&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;value&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;appears&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;only&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tests."&lt;/span&gt;
    &lt;span class="na"&gt;reality&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fixtures&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;can&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;still&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;expose&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;real&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;credentials&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;personal&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;data."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is more than prompt wording. The project contains 206 anti-rationalization entries across 45 runtime files. The broader lesson is reusable: instead of only describing the ideal behavior, enumerate predictable ways an agent may rationalize a shortcut and make the response explicit.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Completion Claims Need Fresh Evidence
&lt;/h2&gt;

&lt;p&gt;Cairness has three related principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Spec, No Code:&lt;/strong&gt; implementation begins from a reviewable spec.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spec is Truth:&lt;/strong&gt; review, test, and completion must agree with the spec.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fresh Evidence:&lt;/strong&gt; a claim about the current implementation needs evidence produced for the current implementation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are enforced through tools rather than reminders.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;What it catches&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cc-verify&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Aggregates Harness, adapter, and project verification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cc-deps orphans&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Files changed in Git but declared by no Change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cc-deps conflicts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Overlapping file scopes across open Changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cc-delta-check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;New failures introduced during implementation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cc-schema-check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Invalid spec, task, and review documents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cc-spec-scope-check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Implementation outside the frozen spec boundary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cc-readset --check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Manually altered generated readsets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cc-subagent-evidence-check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unstructured evidence from subagents&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cc-knowledge-check&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stale paths in the team knowledge index&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A host hook can warn when an agent tries to write business code without a spec, but it deliberately does not pretend to be the only protection. The hook is non-blocking and has exemptions for framework state, tests, CI files, and configuration. The hard protection belongs to deterministic checks and CI.&lt;/p&gt;

&lt;p&gt;That distinction is worth making explicit in any AI development tool: a useful warning is not the same thing as an enforceable boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. More Context Is Not Better Context
&lt;/h2&gt;

&lt;p&gt;Large, ever-growing prompts are a poor substitute for context management. Cairness gives each command a readset with three categories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;always_reads&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# Small, required starting context&lt;/span&gt;
&lt;span class="na"&gt;conditional_reads&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;when_task_touches_database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;database-changes.yaml&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;when_task_touches_security_boundary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;security.yaml&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;optional_reads&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="c1"&gt;# Reference material excluded from the default context&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Readsets are generated from the command YAML with &lt;code&gt;cc-readset --write&lt;/code&gt;; they are not meant to be edited manually. &lt;code&gt;cc-readset --check&lt;/code&gt; catches drift.&lt;/p&gt;

&lt;p&gt;The framework also has topic rules for database changes, API compatibility, concurrency, performance, security, configuration, observability, release work, and more. They use two complementary triggers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic triggers&lt;/strong&gt; use file globs, content regexes, and import regexes. A migration path or &lt;code&gt;CREATE TABLE&lt;/code&gt;, for example, can attach the database rule with no model-token cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic triggers&lt;/strong&gt; let the model recognize a relevant concern from the intent of the Change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deterministic matching provides a low-cost baseline; semantic matching covers what static patterns cannot express.&lt;/p&gt;

&lt;p&gt;For a specific task, &lt;code&gt;cc-context-pack&lt;/code&gt; can package the task brief, spec, needed context, and review diff under a content fingerprint. A worker or reviewer receives a compact, reproducible package instead of a controller repeatedly pasting a long history.&lt;/p&gt;

&lt;p&gt;The same approach applies to team memory. &lt;code&gt;.cairness/knowledge/index.md&lt;/code&gt; maps keywords to descriptions and knowledge files. During proposal, implementation, review, repair, and discussion, the agent loads knowledge that matches the work instead of relying on someone to remember which document to open.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Parallelism Must Be Controlled, Not Competitive
&lt;/h2&gt;

&lt;p&gt;Multiple agents can make delivery faster, but only when their work is isolated and their dependencies are explicit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg9zzbi94u3gexnrdjc6x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg9zzbi94u3gexnrdjc6x.png" alt="wave" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cairness uses wave planning and write isolation. It enforces three constraints:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Constraint&lt;/th&gt;
&lt;th&gt;How it is checked&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Parallel writers must have disjoint targets&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cc-wave-plan&lt;/code&gt; plus schema validation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A subagent's write scope must be a subset of its parent command's &lt;code&gt;writes&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;parent_writes_subset&lt;/code&gt; policy and &lt;code&gt;cc-role-check&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A subagent result must satisfy a six-field &lt;code&gt;output_contract&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cc-subagent-evidence-check&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If the task graph is missing or ambiguous, &lt;code&gt;cc-wave-plan&lt;/code&gt; returns &lt;code&gt;E_WAVE006&lt;/code&gt;. It fails closed instead of guessing a schedule.&lt;/p&gt;

&lt;p&gt;That is a recurring Cairness rule: when evidence is insufficient, keep the answer &lt;code&gt;null&lt;/code&gt; or return an explicit failure. Do not turn unknown data into a pass. The same policy applies to verification calibration, optimization analysis, and adapter token-usage collection.&lt;/p&gt;

&lt;p&gt;There is another practical detail: successful tasks in a wave can be committed independently. A failed task is marked &lt;code&gt;blocked&lt;/code&gt; or &lt;code&gt;partial&lt;/code&gt; and is not committed; the next wave remains gated until it is repaired, retried, split, or aborted. One failure should not erase independent, verified work, but it should stop unsafe dependencies from continuing.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Autonomy Works Best as a Trust Envelope
&lt;/h2&gt;

&lt;p&gt;Traditional governance has an adoption problem. Add enough approval gates and people eventually click "yes" without reading them. The workflow becomes slower without becoming safer.&lt;/p&gt;

&lt;p&gt;The Loop profile changes the division of responsibility: humans define the boundary; the agent can operate within it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frbeqp0arpgd1tuz6lql9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frbeqp0arpgd1tuz6lql9.png" alt="loop" width="800" height="634"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a simplified Loop configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;trust_envelope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;max_scope&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;small&lt;/span&gt;
  &lt;span class="na"&gt;max_residual_risk&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;medium&lt;/span&gt;

  &lt;span class="na"&gt;allowed_change_types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;refactor&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;bugfix&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;test&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;doc&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;feature_small&lt;/span&gt;

  &lt;span class="na"&gt;disallowed_change_types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;schema_migration&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;security_change&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;api_breaking_change&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;architecture_change&lt;/span&gt;

  &lt;span class="na"&gt;autonomy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;scope_overage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;supervised&lt;/span&gt;
    &lt;span class="na"&gt;risk_overage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;staged&lt;/span&gt;

  &lt;span class="na"&gt;verification&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;require_all_tests_pass&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;require_no_open_findings&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;cc-self-eval --decision&lt;/code&gt; routes a Change as one of the following:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Decision&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;autonomous&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Inside the envelope; continue automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;supervised&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A single hard-gate authorization, then execution against a frozen wave plan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;staged&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Confirmation at wave boundaries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;blocked&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stop; task splitting or confirmation-field edits cannot bypass the block&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Loop does &lt;strong&gt;not&lt;/strong&gt; reduce verification standards. It changes who confirms a gate. Change types outside the envelope, Critical or Security review findings, repeated verification failures, invalid schemas or state, and repeated self-evaluation failures are circuit breakers. Automatic decisions and escalations are written under &lt;code&gt;.cairness/loop-audit/&lt;/code&gt; for later review.&lt;/p&gt;

&lt;p&gt;This is human-on-the-loop rather than human-in-the-loop: people define autonomy boundaries, review evidence, and handle escalations instead of mechanically approving every safe step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality Before Efficiency Is an Executable Rule
&lt;/h2&gt;

&lt;p&gt;Most tools claim to be both faster and safer. Cairness makes the ordering explicit.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;Intended use&lt;/th&gt;
&lt;th&gt;Verification strategy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;normal&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Everyday local work&lt;/td&gt;
&lt;td&gt;Changed-only routing and a verification cache; dynamic gates and project tests stay fresh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ci&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Merge, release, formal acceptance&lt;/td&gt;
&lt;td&gt;Full verification; quality failures block&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;optimize&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scheduled efficiency analysis&lt;/td&gt;
&lt;td&gt;Full verification followed by &lt;code&gt;cc-optimize&lt;/code&gt; analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The fast path must be selected explicitly. Running &lt;code&gt;cc-verify&lt;/code&gt; without &lt;code&gt;--execution-mode&lt;/code&gt; keeps historical full-verification behavior. The cache can only reuse static checks with a matching fingerprint that passed previously; dynamic governance gates, behavior replay, and project tests are never replaced by stale results.&lt;/p&gt;

&lt;p&gt;When comparing candidates, &lt;code&gt;cc-benchmark&lt;/code&gt; checks deterministic failures, Critical escapes, task success, and Important recall before looking at input tokens, wall time, or verify count. If quality or efficiency evidence is incomplete, it does not claim an optimization. &lt;code&gt;cc-optimize&lt;/code&gt; is read-only and returns &lt;code&gt;observe&lt;/code&gt;, &lt;code&gt;propose&lt;/code&gt;, or &lt;code&gt;reject&lt;/code&gt;; it does not modify policy, readsets, or business code on its own.&lt;/p&gt;

&lt;p&gt;The policy fits in one sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fewer tokens or less wall-clock time cannot compensate for a regression in task success, Important recall, or deterministic verification.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Operational Details That Build Trust
&lt;/h2&gt;

&lt;p&gt;Architecture is only useful if the operational boundaries are clear.&lt;/p&gt;

&lt;h3&gt;
  
  
  Project state is physically separate from framework assets
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Directory&lt;/th&gt;
&lt;th&gt;Ownership&lt;/th&gt;
&lt;th&gt;What upgrades do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.claude/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Claude Code adapter&lt;/td&gt;
&lt;td&gt;Framework-managed adapter assets may be replaced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;.codex/&lt;/code&gt; and &lt;code&gt;.agents/skills/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Codex adapter&lt;/td&gt;
&lt;td&gt;Framework-managed adapter assets may be replaced&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;.cairness/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Your project state&lt;/td&gt;
&lt;td&gt;The framework does not delete it&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;cc-cairn update&lt;/code&gt; updates the active adapter. &lt;code&gt;cc-cairn uninstall --adapter codex&lt;/code&gt; removes the selected adapter's managed assets. Neither command removes shared &lt;code&gt;.cairness/&lt;/code&gt; state, and modified Codex Skills are preserved on uninstall.&lt;/p&gt;

&lt;h3&gt;
  
  
  CI pins its version
&lt;/h3&gt;

&lt;p&gt;The workflow produced by &lt;code&gt;cc-cairn init&lt;/code&gt; downloads the matching release archive and checksum, verifies them, then installs temporarily. It does not silently follow &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;latest&lt;/code&gt;. Download failure, checksum mismatch, or internal version mismatch is a hard failure. Ordinary CI uses an offline adapter baseline, so it does not require a Claude Code or Codex login and does not incur model costs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Telemetry stays local and can be disabled
&lt;/h3&gt;

&lt;p&gt;Runtime summaries are stored locally in &lt;code&gt;.cairness/observability/runtime-events.jsonl&lt;/code&gt;. They exclude prompts, source code, business paths, change IDs, and PII. Disable the summaries without disabling lifecycle checks or verification:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;DO_NOT_TRACK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 .claude/scripts/cc-verify &lt;span class="nt"&gt;--execution-mode&lt;/span&gt; normal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Getting Started in Five Minutes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Requirements: Python 3.9+, Git, and Claude Code or Codex for interactive workflows&lt;/span&gt;
git clone https://github.com/lq5657/Cairness.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Cairness
python3 cairn_install

&lt;span class="c"&gt;# Onboard a project. Choose the primary language explicitly.&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/your-project
cc-cairn onboard &lt;span class="nt"&gt;--language&lt;/span&gt; python &lt;span class="nt"&gt;--yes&lt;/span&gt;

&lt;span class="c"&gt;# For Codex:&lt;/span&gt;
cc-cairn onboard &lt;span class="nt"&gt;--adapter&lt;/span&gt; codex &lt;span class="nt"&gt;--language&lt;/span&gt; python &lt;span class="nt"&gt;--yes&lt;/span&gt;

&lt;span class="c"&gt;# Preview onboarding changes without writing them.&lt;/span&gt;
cc-cairn onboard &lt;span class="nt"&gt;--dry-run&lt;/span&gt; &lt;span class="nt"&gt;--json&lt;/span&gt;

&lt;span class="c"&gt;# Diagnose installation, configuration, adapters, and project state.&lt;/span&gt;
cc-cairn doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, in a Claude Code or Codex session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cc-propose "Fix the connection leak after a login API timeout"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;New installations default to the Loop profile. To return to a gate-by-gate human-confirmation workflow, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cc-cairn loop disable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Where It Fits, and Where It Does Not
&lt;/h2&gt;

&lt;p&gt;Cairness is a fit when you have real delivery pressure, code that needs to survive beyond a demo, substantial AI participation in implementation, a team that needs durable engineering knowledge, or audit requirements.&lt;/p&gt;

&lt;p&gt;It is probably not a fit for a one-off script, a casual weekend prototype, or a workflow whose central value proposition is zero process. Governance has a cost. Cairness intentionally pays that cost early, in specification and explicit boundaries, to avoid discovering the wrong direction halfway through implementation.&lt;/p&gt;

&lt;p&gt;The project also documents current limitations rather than obscuring them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Codex &lt;code&gt;pre_write_hook&lt;/code&gt; and &lt;code&gt;file_write_interception&lt;/code&gt; are &lt;strong&gt;emulated&lt;/strong&gt;, not equivalent to Claude Code blocking semantics.&lt;/li&gt;
&lt;li&gt;Codex &lt;code&gt;compaction_session_resume&lt;/code&gt; is &lt;strong&gt;optional&lt;/strong&gt;, not a completion requirement.&lt;/li&gt;
&lt;li&gt;Loop continuation happens in the current host session; it is not an unattended background service.&lt;/li&gt;
&lt;li&gt;The No Spec, No Code host hook warns rather than blocks. Scripts and CI provide the hard fallback.&lt;/li&gt;
&lt;li&gt;Linux, macOS, and WSL are officially supported. Native Windows is experimental; WSL is recommended for complete Bash-hook and POSIX-script support.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Point Is Verifiable Trust
&lt;/h2&gt;

&lt;p&gt;The next bottleneck in AI-assisted software development is not only model capability. It is verifiable trust.&lt;/p&gt;

&lt;p&gt;Which files did the agent change? Did it remain inside the agreed scope? Does "tests pass" have fresh evidence? Can parallel agents work without overwriting one another? Will a lesson from six months ago be loaded when the same risk appears again?&lt;/p&gt;

&lt;p&gt;Those questions should not be answered by a sterner prompt. They should be declared as contracts, checked by scripts, reproduced in CI, and recorded for audit.&lt;/p&gt;

&lt;p&gt;Cairness is one attempt to build that layer. Its goal is not to make an AI agent perform more ceremony. It is to keep the agent inside the right boundaries: fast feedback for ordinary work, full quality gates for CI and release, and comparable evidence before declaring an efficiency gain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/lq5657/Cairness" rel="noopener noreferrer"&gt;Cairness on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lq5657/Cairness/blob/main/cairn-core/docs/FEATURES.md" rel="noopener noreferrer"&gt;Complete feature list&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lq5657/Cairness/blob/main/cairn-core/docs/maintenance/runtime-model.md" rel="noopener noreferrer"&gt;Runtime model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lq5657/Cairness/blob/main/cairn-core/docs/adoption/integration-preflight-checklist.md" rel="noopener noreferrer"&gt;Integration preflight checklist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lq5657/Cairness/blob/main/cairn-core/docs/adoption/pilot-checklist.md" rel="noopener noreferrer"&gt;Pilot checklist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lq5657/Cairness/blob/main/cairn-core/docs/maintenance/wave-based-apply-design.md" rel="noopener noreferrer"&gt;Wave-based Apply design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/lq5657/Cairness/blob/main/cairn-core/docs/maintenance/subagent-model.md" rel="noopener noreferrer"&gt;Subagent boundary model&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/lq5657/Cairness.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Cairness
python3 cairn_install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;The counts, commands, configuration excerpts, and diagrams in this article were checked against Cairness v1.3.5. The test result cited above is a local run of &lt;code&gt;python3 -m pytest -q&lt;/code&gt;; duration and warning counts vary by machine and environment.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>harness</category>
      <category>sdd</category>
      <category>codeagent</category>
    </item>
  </channel>
</rss>
