Skip to content

Commit 36ef80c

Browse files
cadamsdotcomclaude
andcommitted
Update docs-site homepage copy with personal tone and revised philosophy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 90b9707 commit 36ef80c

2 files changed

Lines changed: 59 additions & 29 deletions

File tree

docs-site/src/pages/index.module.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@
236236
font-size: 0.9rem;
237237
color: var(--grey-dark);
238238
line-height: 1.75;
239+
margin-bottom: 1.25rem;
239240
}
240241

241242
.leashImageWrap:hover .leashImage {

docs-site/src/pages/index.tsx

Lines changed: 58 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -99,15 +99,40 @@ function LeashComparison(): ReactNode {
9999
</div>
100100
</div>
101101
<p className={styles.leashDesc}>
102-
Agents go off the rails and get distracted. Asking nicely doesn&apos;t
103-
work. CodeLeash puts the guardrails outside the agent, so it{' '}
104-
<em>can&apos;t</em> go off the rails. While everyone else is trying to
105-
build the tallest tower of agent orchestration mechanisms, we believe
106-
in tightly controlling outcomes by sharply defining what quality code
107-
looks like, and enforcing it with code in a way the agent can&apos;t
108-
ignore or bypass. We don&apos;t ask agents nicely, we let them fail,
109-
then tell them how to correct it. That&apos;s why we&apos;ve used the
110-
analogy of a leash.
102+
I'm{' '}
103+
<a
104+
href="https://linkedin.com/in/cadamsdotcom"
105+
target="_blank"
106+
rel="noreferrer"
107+
>
108+
Chris
109+
</a>
110+
. I've been a software engineer for over 20 years.
111+
</p>
112+
<p className={styles.leashDesc}>
113+
We are in a time of change! Claude Code writes all code for my
114+
product,{' '}
115+
<a href="https://approviq.com" target="_blank" rel="noreferrer">
116+
ApprovIQ
117+
</a>{' '}
118+
- but it doesn't do it alone.
119+
</p>
120+
<p className={styles.leashDesc}>
121+
(And no, that wasn't an em-dash just now.)
122+
</p>
123+
<p className={styles.leashDesc}>
124+
Anyway. Agents go off the rails and get distracted. Asking nicely
125+
doesn&apos;t work. CodeLeash puts guardrails <em>outside</em> the
126+
agent, so it <em>can&apos;t</em> go off the rails. While everyone else
127+
is building the tallest tower of agent orchestration they can build,
128+
I've been tightly controlling outcomes by sharply defining what
129+
quality code looks like, and getting results. CodeLeash enforces
130+
quality with code based hooks, scripts, tools, and loops, in a way the
131+
agent can&apos;t ignore or bypass.
132+
</p>
133+
<p className={styles.leashDesc}>
134+
We don&apos;t ask agents nicely, we let them fail, then tell them how
135+
to correct it. That&apos;s why I&apos;ve used the analogy of a leash.
111136
</p>
112137
</div>
113138
</section>
@@ -172,8 +197,8 @@ function Features(): ReactNode {
172197
A test suite in which the agent has seen every test fail -
173198
then made each test pass by writing code - helps prevent
174199
regressions and keeps development velocity high as your
175-
product grows. Per-agent isolation via transcript-hashed log
176-
files means parallel agents never interfere with each other.
200+
product grows. Per-agent isolation lets agents run in parallel
201+
without interfering.
177202
</p>
178203
<span
179204
className={`${styles.featureLearnMore} ${styles.featureLearnMoreRed}`}
@@ -219,25 +244,29 @@ function Features(): ReactNode {
219244
<div className={styles.featureRight}>
220245
<p className={styles.featureCardDesc}>
221246
CodeLeash checks code quality using many small scripts,{' '}
222-
<i>not</i> AI. No AI means zero tokens burned, and no false
223-
positives or inconsistency. They&apos;re deterministic so
224-
they're impossible to fool. And fast so you can run them
225-
often.
247+
<i>not</i> AI. No AI means zero tokens burned. No false
248+
positives and no inconsistency. They&apos;re deterministic so
249+
they're impossible to fool. And fast so you can run them every
250+
time you change code.
226251
</p>
227252
<p className={styles.featureCardDesc}>
228-
Checks exit 0 on success, non-zero on failure - with
229-
instructions on how and where to fix. Failure blocks the agent
230-
which means things don't stay broken.
231-
</p>
232-
<p className={styles.featureCardDesc}>
233-
CodeLeash is full of examples for your coding agent to crib
234-
from. Some traverse the codebase with ASTs; others with
235-
regexes. Most were actually written by coding agents.
253+
Check scripts exit 0 on success or non-zero on failure.
254+
Failures print instructions for the agent to tell it how and
255+
where to fix. Failure blocks the agent, and that forces it to
256+
fix breakage right away.
236257
</p>
237258
<p className={styles.featureCardDesc}>
238259
Checks run before every commit, blocking problems from ever
239260
reaching your repository.
240261
</p>
262+
<p className={styles.featureCardDesc}>
263+
CodeLeash is full of examples for your coding agent to crib
264+
from. Some traverse the codebase with ASTs; others with
265+
regexes. Most code review feedback can be at least partly
266+
automated. By the time your agent stops working, basic issues
267+
were already fixed - and you know because the checks passed.
268+
Never repeat obvious fixes again.
269+
</p>
241270
<span
242271
className={`${styles.featureLearnMore} ${styles.featureLearnMoreEarth}`}
243272
>
@@ -697,16 +726,16 @@ function Philosophy(): ReactNode {
697726
desc: "An unconstrained agent skips tests, makes sweeping changes, and produces code that works in isolation but breaks in context. The TDD guard exists because freedom doesn't scale.",
698727
},
699728
{
700-
title: 'Tests are the specification.',
701-
desc: "The 10ms timeout forces unit tests to be pure logic. The e2e harness ensures full integration. The pre-commit hook runs everything. If it isn't tested, it doesn't exist.",
729+
title: 'Tests are the specs and the documentation.',
730+
desc: "Every test has a descriptive name. Test failures are the only time agents need to know what is in the test suite - no context pollution except when there's something to fix. And tests' contents tell your agent how things were meant to work.",
702731
},
703732
{
704-
title: 'Lint rules should be code.',
705-
desc: 'Instead of configuring complex YAML, write a Python script that walks an AST. A script is easier to write, debug, and explain than a configuration.',
733+
title: 'Advanced linting you create, in code.',
734+
desc: "Write a Python script that walks your codebase's AST or checks code with regex. In fact, write lots of them. Go wild, because everything you codify reduces time spent explaining things to amnesiac agents and takes you out of one more loop. Every script means less things to tell your agent, more of your time spent sipping coffee, and better results by the time it stops working.",
706735
},
707736
{
708-
title: 'The monorepo is the product.',
709-
desc: 'Backend, frontend, database migrations, lint rules, tests, and CI all live together. Changes that cross boundaries are normal, not exceptional.',
737+
title: 'Monorepo for maximum productivity.',
738+
desc: 'Backend, frontend, database, migrations, lint rules, tests, CI, scripts and tools all happily coexisting in one repo. Changes that cross boundaries are normal, not exceptional. Plenty of documentation helps your agent work effectively with the patterns. Technologies such as Vite and patterns such as initial_data, carefully chosen for a fast, static frontend which is served with all data needed to hydrate it.',
710739
},
711740
];
712741

0 commit comments

Comments
 (0)