Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,5 +37,7 @@ Thumbs.db
.uf/replicator/*.db-shm
.uf/replicator/*.db-wal
.uf/replicator/*.lock
.uf/replicator/*.log
.uf/muti-mind/artifacts/
.uf/mx-f/data/
.uf/feedback/
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
tag: gaze-multi-language-docs
author: jay-flowers
category: gotcha
created_at: 2026-08-23T18:05:09Z
identity: gaze-multi-language-docs-20260823T180509-jay-flowers
tier: draft
---

When running the /uf.unleash pipeline for documentation-only OpenSpec changes on the Unbound Force website, uncommitted work is lost across session breaks. The pipeline creates openspec artifacts and modifies content files but does not commit them until the final /uf.finale step. If a session is interrupted after implementation and code review pass but before committing, all work must be recreated from scratch. A mitigation pattern is to commit spec artifacts immediately after creation (with a "wip: openspec artifacts" commit) and commit implementation changes after each phase checkpoint. This prevents the full-recreation scenario that occurred during the gaze-multi-language-docs change, where the entire pipeline had to re-run because the branch was clean despite completing through code review.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
tag: gaze-multi-language-docs
author: jay-flowers
category: pattern
created_at: 2026-08-23T18:05:24Z
identity: gaze-multi-language-docs-20260823T180524-jay-flowers
tier: draft
---

During the spec review phase of the gaze-multi-language-docs OpenSpec change, the review council consistently identified cross-page consistency gaps that the original spec missed. The Guard agent found that content/docs/team/gaze-tester.md and content/docs/projects/_index.md still said "for Go" when the project page was being updated to "Go-native with multi-language support." The Tester agent identified that the tester guide's side effect count "30+ types" would become inconsistent with the project page's expanded "48+ types" taxonomy. These cross-page consistency findings were auto-fixed by adding additional tasks and spec requirements. The pattern: when updating a primary documentation page, always grep for the old framing across all related pages (team pages, index pages, guide pages) to ensure the narrative is consistent. The grep command `grep -r "for Go" content/` catches most of these.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
tag: gaze-multi-language-docs
author: jay-flowers
category: context
created_at: 2026-08-23T18:05:25Z
identity: gaze-multi-language-docs-20260823T180525-jay-flowers
tier: draft
---

When editing the homepage card badge in layouts/home.html for the Unbound Force website, the badge HTML pattern appears multiple times (once per project card). The edit must include enough surrounding context to uniquely identify the target card — specifically the parent anchor tag with the project-specific href. For example, to edit the Gaze badge, include the `<a href="/docs/projects/gaze/"` line in the oldString context. Without this, the edit fails with "Found multiple matches for oldString." This applies to all three project cards (Gaze, Dewey, Replicator) in the homepage template.
127 changes: 66 additions & 61 deletions config/postcss.config.js
Original file line number Diff line number Diff line change
@@ -1,64 +1,69 @@
const autoprefixer = require('autoprefixer');
const purgecss = require('@fullhuman/postcss-purgecss');
const whitelister = require('purgecss-whitelister');
const autoprefixer = require("autoprefixer");
const purgecss = require("@fullhuman/postcss-purgecss");
const whitelister = require("purgecss-whitelister");

module.exports = {
plugins: [
autoprefixer(),
purgecss({
content: ['./hugo_stats.json'],
extractors: [
{
extractor: (content) => {
const els = JSON.parse(content).htmlElements;
return els.tags.concat(els.classes, els.ids);
},
extensions: ['json']
}
],
dynamicAttributes: [
'aria-expanded',
'data-bs-popper',
'data-bs-target',
'data-bs-theme',
'data-dark-mode',
'data-global-alert',
'data-pane',
'data-popper-placement',
'data-sizes',
'data-toggle-tab',
'id',
'size',
'type'
],
safelist: [
'active',
'btn-clipboard',
'clipboard',
'disabled',
'hidden',
'modal-backdrop',
'selected',
'show',
'img-fluid',
'blur-up',
'lazyload',
'lazyloaded',
'alert-link',
'container-fw ',
'container-lg',
'container-fluid',
'offcanvas-backdrop',
'figcaption',
'dt',
'dd',
'showing',
'hiding',
'page-item',
'page-link',
'not-content',
...whitelister(['./assets/scss/**/*.scss', './node_modules/@thulite/doks-core/assets/scss/components/_code.scss', './node_modules/@thulite/doks-core/assets/scss/components/_expressive-code.scss', './node_modules/@thulite/doks-core/assets/scss/common/_syntax.scss'])
]
})
]
plugins: [
autoprefixer(),
purgecss({
content: ["./hugo_stats.json"],
extractors: [
{
extractor: (content) => {
const els = JSON.parse(content).htmlElements;
return els.tags.concat(els.classes, els.ids);
},
extensions: ["json"],
},
],
dynamicAttributes: [
"aria-expanded",
"data-bs-popper",
"data-bs-target",
"data-bs-theme",
"data-dark-mode",
"data-global-alert",
"data-pane",
"data-popper-placement",
"data-sizes",
"data-toggle-tab",
"id",
"size",
"type",
],
safelist: [
"active",
"btn-clipboard",
"clipboard",
"disabled",
"hidden",
"modal-backdrop",
"selected",
"show",
"img-fluid",
"blur-up",
"lazyload",
"lazyloaded",
"alert-link",
"container-fw ",
"container-lg",
"container-fluid",
"offcanvas-backdrop",
"figcaption",
"dt",
"dd",
"showing",
"hiding",
"page-item",
"page-link",
"not-content",
...whitelister([
"./assets/scss/**/*.scss",
"./node_modules/@thulite/doks-core/assets/scss/components/_code.scss",
"./node_modules/@thulite/doks-core/assets/scss/components/_expressive-code.scss",
"./node_modules/@thulite/doks-core/assets/scss/common/_syntax.scss",
]),
],
}),
],
};
5 changes: 3 additions & 2 deletions content/blog/build-to-delete.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Every component in an AI agent harness exists because someone believed the model

These are bets on model limitations. Some of them are good bets that will remain true for years. Some of them are already becoming unnecessary.

Anthropic demonstrated this concretely: moving from Opus 4.5 to Opus 4.6, they stripped their sprint decomposition mechanism entirely because the newer model handled task breakdown reliably without external scaffolding. The harness component that was essential one model version ago became dead weight the next (as described in Yanli Liu, "Harness Engineering," *AI Advances*, Apr 2026).
Anthropic demonstrated this concretely: moving from Opus 4.5 to Opus 4.6, they stripped their sprint decomposition mechanism entirely because the newer model handled task breakdown reliably without external scaffolding. The harness component that was essential one model version ago became dead weight the next (as described in Yanli Liu, "Harness Engineering," _AI Advances_, Apr 2026).

The article's advice is blunt: "build to delete." Design every harness component so it can be removed when the time comes. The hard part is not building the harness — it is having the discipline to prune it.

Expand All @@ -40,7 +40,7 @@ These components will likely persist across multiple generations of model improv

Other components exist specifically because current models have limitations. As those limitations diminish, the components become candidates for removal.

**The 5+ agent Divisor Council.** Five specialized review agents running in parallel, each with exclusive ownership boundaries. This is a powerful quality mechanism, but it is also heavy. As models improve at self-review — and early data from Opus 4.7 suggests they are (Liu, "Harness Engineering," *AI Advances*, Apr 2026) — the multi-agent review structure may be overkill. A future configuration might use three agents instead of five, or a single agent with computational-only validation.
**The 5+ agent Divisor Council.** Five specialized review agents running in parallel, each with exclusive ownership boundaries. This is a powerful quality mechanism, but it is also heavy. As models improve at self-review — and early data from Opus 4.7 suggests they are (Liu, "Harness Engineering," _AI Advances_, Apr 2026) — the multi-agent review structure may be overkill. A future configuration might use three agents instead of five, or a single agent with computational-only validation.

**Detailed step-by-step instructions in agent personas.** Reading lists, checklists, ordered initialization sequences — these compensate for models that need explicit scaffolding to follow complex procedures. As models require less hand-holding, these instructions become noise rather than signal.

Expand All @@ -61,6 +61,7 @@ The article recommends a simple protocol: after each model upgrade, test whether
3. **Delete if quality holds.** Not "deprecate" or "make optional" — delete. Dead harness weight is worse than no harness at all because it consumes context window, adds latency, and gives a false sense of security.

Concrete experiments for Unbound Force:

- Run with 3 Divisor agents instead of 5
- Skip the Gaze feedback loop for a sprint
- Remove Dewey knowledge retrieval from agent initialization
Expand Down
16 changes: 8 additions & 8 deletions content/blog/convention-packs.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ Each rule has three components:

Unbound Force ships with packs for different domains:

| Pack | Domain | Example Rules |
|------|--------|---------------|
| `default.md` | All projects | Commit message format, PR conventions, error handling patterns |
| `go.md` | Go projects | `gofmt`, import organization, `Options`/`Result` pattern, `embed.FS` for assets |
| `content.md` | Content/docs | Frontmatter requirements, heading structure, link conventions |
| `typescript.md` | TypeScript projects | Formatting, type safety, module patterns |
| `severity.md` | Quality gates | CRAP score thresholds, coverage requirements, auto-fix policies |
| Pack | Domain | Example Rules |
| --------------- | ------------------- | ------------------------------------------------------------------------------- |
| `default.md` | All projects | Commit message format, PR conventions, error handling patterns |
| `go.md` | Go projects | `gofmt`, import organization, `Options`/`Result` pattern, `embed.FS` for assets |
| `content.md` | Content/docs | Frontmatter requirements, heading structure, link conventions |
| `typescript.md` | TypeScript projects | Formatting, type safety, module patterns |
| `severity.md` | Quality gates | CRAP score thresholds, coverage requirements, auto-fix policies |

## The Extension Pattern

Expand Down Expand Up @@ -87,7 +87,7 @@ The structure of convention packs — numbered rules, explicit severity, concret

## Packs as Harness Templates

ThoughtWorks' agent taxonomy includes the concept of "harness templates" — reusable patterns that can be deployed across projects to establish consistent agent behavior (as described in Yanli Liu, "Harness Engineering," *AI Advances*, Apr 2026). Convention packs are a direct implementation of this concept.
ThoughtWorks' agent taxonomy includes the concept of "harness templates" — reusable patterns that can be deployed across projects to establish consistent agent behavior (as described in Yanli Liu, "Harness Engineering," _AI Advances_, Apr 2026). Convention packs are a direct implementation of this concept.

The key insight is that coding standards are a property of the organization, not the project. An organization that values error chain preservation values it in every Go project, not just the one where someone wrote it down. Convention packs make organizational standards portable, versioned, and consistently deployed — the same way a CI workflow template ensures every project runs the same quality checks.

Expand Down
13 changes: 7 additions & 6 deletions content/blog/five-principles-every-ai-agent-harness-discovers.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ contributors: ["Unbound Force"]

Three independent teams — OpenAI, Anthropic, and ThoughtWorks — each spent months building AI agent harnesses. They started from different assumptions, used different architectures, and optimized for different goals. They arrived at the same five conclusions.

Yanli Liu documented this convergence in ["Harness Engineering: What Every AI Engineer Needs to Know in 2026" (*AI Advances*, Apr 2026)](https://ai.gopubby.com/harness-engineering-what-every-ai-engineer-needs-to-know-in-2026-0ab649e5686a), cataloging the principles that every team discovers when they move from toy demos to production-grade agent systems. The article has 1.7K claps for a reason: if you have built an agent harness, you recognize every finding immediately.
Yanli Liu documented this convergence in ["Harness Engineering: What Every AI Engineer Needs to Know in 2026" (_AI Advances_, Apr 2026)](https://ai.gopubby.com/harness-engineering-what-every-ai-engineer-needs-to-know-in-2026-0ab649e5686a), cataloging the principles that every team discovers when they move from toy demos to production-grade agent systems. The article has 1.7K claps for a reason: if you have built an agent harness, you recognize every finding immediately.

Unbound Force implements all five principles. In several cases, it goes further than any of the three teams Liu describes. This post walks through each principle with concrete evidence from the codebase.

## Principle 1: Context Beats Instructions

**The finding**: Showing the agent real file paths, real code patterns, and real progress consistently outperforms abstract instructions. OpenAI learned to "give a map, not a manual." Anthropic built structured feature lists. ThoughtWorks calls it "feedforward" (Liu, "Harness Engineering," *AI Advances*, Apr 2026).
**The finding**: Showing the agent real file paths, real code patterns, and real progress consistently outperforms abstract instructions. OpenAI learned to "give a map, not a manual." Anthropic built structured feature lists. ThoughtWorks calls it "feedforward" (Liu, "Harness Engineering," _AI Advances_, Apr 2026).

**How Unbound Force implements it**: Through three layers of context, each serving a different purpose.

Expand All @@ -36,7 +36,7 @@ Most teams implement one of these layers. Unbound Force stacks all three: static

## Principle 2: Planning and Execution Must Be Separated

**The finding**: Every team discovered that letting an agent plan and execute in the same pass produces unreliable output. The planning step must be separate, with its output reviewed before implementation begins (Liu, "Harness Engineering," *AI Advances*, Apr 2026).
**The finding**: Every team discovered that letting an agent plan and execute in the same pass produces unreliable output. The planning step must be separate, with its output reviewed before implementation begins (Liu, "Harness Engineering," _AI Advances_, Apr 2026).

**How Unbound Force implements it**: Through an 8-phase pipeline with hard gates between phases.

Expand All @@ -47,6 +47,7 @@ constitution → specify → clarify → plan → tasks → analyze → checklis
This is not a suggestion — it is enforced. If an agent attempts to write code during the planning phase, it triggers a process violation and must stop. The phase boundaries are structural: you cannot plan before you specify, cannot create tasks before you plan, and cannot implement before spec review passes.

The enforcement mechanisms are concrete:

- Branch naming conventions gate pipeline entry
- All spec artifacts must be committed before implementation begins (the Spec Commit Gate)
- The [/unleash](/docs/getting-started/common-workflows/#autonomous-pipeline-unleash) command has six defined exit points where human judgment is required
Expand All @@ -55,7 +56,7 @@ Liu's article describes plan/execute separation as a two-phase concern. Unbound

## Principle 3: Feedback Loops Are Non-Negotiable

**The finding**: All three teams agree that a system without a feedback mechanism is "just a prompt with extra steps." They disagree on whether feedback should come from automated tests, another LLM, or both. ThoughtWorks says: use both, layered — computational feedback first (fast, cheap, deterministic), inferential feedback second (slow, expensive, semantic) (Liu, "Harness Engineering," *AI Advances*, Apr 2026).
**The finding**: All three teams agree that a system without a feedback mechanism is "just a prompt with extra steps." They disagree on whether feedback should come from automated tests, another LLM, or both. ThoughtWorks says: use both, layered — computational feedback first (fast, cheap, deterministic), inferential feedback second (slow, expensive, semantic) (Liu, "Harness Engineering," _AI Advances_, Apr 2026).

**How Unbound Force implements it**: Both, layered — exactly what ThoughtWorks recommends.

Expand All @@ -69,7 +70,7 @@ The Anthropic finding — separate the doer from the judge — is fully realized

## Principle 4: One Thing at a Time

**The finding**: Agents that try to do too much at once lose coherence. Forced incrementalism — where the agent completes one unit of work before starting the next — is universal across every successful implementation (Liu, "Harness Engineering," *AI Advances*, Apr 2026).
**The finding**: Agents that try to do too much at once lose coherence. Forced incrementalism — where the agent completes one unit of work before starting the next — is universal across every successful implementation (Liu, "Harness Engineering," _AI Advances_, Apr 2026).

**How Unbound Force implements it**: At two levels.

Expand All @@ -79,7 +80,7 @@ At the specification level, the 8-phase pipeline enforces incrementalism on the

## Principle 5: The Codebase Is the Documentation

**The finding**: Nobody maintains a separate knowledge base for the agent. The repository is the single source of truth. Teams that invest in code organization, clear module boundaries, and embedded documentation get better agent performance for free (Liu, "Harness Engineering," *AI Advances*, Apr 2026).
**The finding**: Nobody maintains a separate knowledge base for the agent. The repository is the single source of truth. Teams that invest in code organization, clear module boundaries, and embedded documentation get better agent performance for free (Liu, "Harness Engineering," _AI Advances_, Apr 2026).

**How Unbound Force implements it**: All agent context lives in the repository.

Expand Down
Loading