@@ -96,15 +96,15 @@ function LeashComparison(): ReactNode {
9696 </ div >
9797 </ div >
9898 < p className = { styles . leashDesc } >
99- I' m{ ' ' }
99+ I' m{ ' ' }
100100 < a
101101 href = "https://linkedin.com/in/cadamsdotcom"
102102 target = "_blank"
103103 rel = "noreferrer"
104104 >
105105 Chris
106106 </ a >
107- . I' ve been a software engineer for over 20 years.
107+ . I' ve been a software engineer for over 20 years.
108108 </ p >
109109 < p className = { styles . leashDesc } >
110110 Claude Code writes all code for my product,{ ' ' }
@@ -124,30 +124,42 @@ function LeashComparison(): ReactNode {
124124 < p className = { styles . leashDesc } >
125125 Agents go off the rails. They get distracted. Asking nicely with
126126 AGENTS.md and system prompts and interrupting their work to remind
127- them of stuff... yeah, it works... sort of... most of the time. That's
128- a problem, because, " most of the time" doesn't cut it for building
129- serious software.
127+ them of stuff... yeah, it works... sort of... most of the time.
128+ That's a problem, because, " most of the time"
129+ doesn't cut it for building serious software.
130130 </ p >
131131 < p className = { styles . leashDesc } >
132132 CodeLeash puts guardrails < em > outside</ em > the agent, so it{ ' ' }
133133 < em > can't</ em > go off the rails, forget them or ignore them.
134134 While everyone and their dog is building the tallest tower of agent
135- orchestration they can, I' ve been tightly controlling outcomes in
135+ orchestration they can, I' ve been tightly controlling outcomes in
136136 ApprovIQ's codebase, by sharply defining what quality code looks
137- like, rubbing Claude Code' s nose in it with automation, and forcing it
138- to fix its mistakes - all while I am off doing something else.
139- CodeLeash enforces quality with code based hooks, scripts, tools, and
140- loops, in a way the agent can't ignore or bypass.
137+ like, rubbing Claude Code' s nose in it with automation, and
138+ forcing it to fix its mistakes - all while I am off doing something
139+ else. CodeLeash enforces quality with code based hooks, scripts,
140+ tools, and loops, in a way the agent can't ignore or bypass.
141141 </ p >
142142 < p className = { styles . leashDesc } >
143- Look at the images. Notice: " Can't walk on the road" is NOT in a
144- speech bubble! A leash means never barking orders.
143+ Look at the images. Notice: " Can't walk on the road" is
144+ NOT in a speech bubble! A leash means never barking orders.
145145 </ p >
146146 < p className = { styles . leashDesc } >
147147 Agents today cannot do everything you ask while also doing their task.
148- Create guardrails that automatically show how they failed to live up
149- to your standards while guiding them to correct their mistakes. Hence
150- the analogy of a leash.
148+ Guardrails automatically tell your agent how it failed to live up to
149+ your standards while guiding it to correct mistakes. Like a leash, it
150+ balances freedom and constraint.
151+ </ p >
152+ < p className = { styles . leashDesc } >
153+ CodeLeash is both a complete framework, and a demonstration of ideas
154+ you can adapt to your own work. Read on, or give the{ ' ' }
155+ < a
156+ href = "https://github.com/cadamsdotcom/CodeLeash"
157+ target = "_blank"
158+ rel = "noreferrer"
159+ >
160+ code
161+ </ a > { ' ' }
162+ to your coding agent and ask it some questions.
151163 </ p >
152164 </ div >
153165 </ section >
@@ -160,7 +172,7 @@ function Features(): ReactNode {
160172 < div className = { styles . container } >
161173 < div className = { styles . sectionHeader } >
162174 < span className = { styles . sectionNumber } > 01</ span >
163- < span className = { styles . sectionTitle } > What' s Inside</ span >
175+ < span className = { styles . sectionTitle } > What' s Inside</ span >
164176 </ div >
165177 { /* Cards cycle: Red, Earth(reversed), Green, Earth(reversed), Red...
166178 When adding/removing cards, shift colors to maintain the pattern. */ }
@@ -209,9 +221,9 @@ function Features(): ReactNode {
209221 < Link to = "/docs/tdd-guard" > Test Driven Development</ Link > is a
210222 universal way to build software. Write failing tests, watch
211223 them fail, write code to make them pass, watch them pass.
212- You' re gradually building a repository of every decision you
213- ever made. Even better, if a decision is < i > un-made</ i > , tests
214- fail. Alarms go off.
224+ You' re gradually building a repository of every decision
225+ you ever made. Even better, if a decision is < i > un-made</ i > ,
226+ tests fail. Alarms go off.
215227 </ p >
216228 < p className = { styles . featureCardDesc } >
217229 Forcing the agent through TDD created a repository of all my
@@ -223,10 +235,11 @@ function Features(): ReactNode {
223235 </ p >
224236 < p className = { styles . featureCardDesc } >
225237 But babysitting a TDD process is almost as tedious as doing
226- TDD! I was constantly stopping the agent - don't do that, you
227- didn't see the tests pass, roll that back, it's not time to
228- write code yet. The agent was frequently befuddled by this. So
229- I asked: can I get myself out of < i > that</ i > loop too?
238+ TDD! I was constantly stopping the agent - don't do that,
239+ you didn't see the tests pass, roll that back, it's
240+ not time to write code yet. The agent was frequently befuddled
241+ by this. So I asked: can I get myself out of < i > that</ i > loop
242+ too?
230243 </ p >
231244 < p className = { styles . featureCardDesc } >
232245 The solution Claude and I hit on is a state machine tracked in
@@ -291,8 +304,8 @@ function Features(): ReactNode {
291304 CodeLeash checks code quality using many small scripts,{ ' ' }
292305 < i > not</ i > AI. No AI means zero tokens burned. No false
293306 positives and no inconsistency. They're deterministic so
294- they' re impossible to fool. And fast so you can run them every
295- time you change code.
307+ they' re impossible to fool. And fast so you can run them
308+ every time you change code.
296309 </ p >
297310 < p className = { styles . featureCardDesc } >
298311 Check scripts exit 0 on success or non-zero on failure.
@@ -308,8 +321,8 @@ function Features(): ReactNode {
308321 CodeLeash is full of examples for your coding agent to crib
309322 from. Some traverse the codebase with ASTs; others with
310323 regexes. A surprising amount of the code review feedback
311- you' ve ever given in your software engineering career can be
312- automated - ask your agent for ideas! With a big enough
324+ you' ve ever given in your software engineering career can
325+ be automated - ask your agent for ideas! With a big enough
313326 library of checks - built by you - once your agent stops
314327 working, all the basic issues were removed in response to the
315328 checks failing, without you watching. You no longer need to
0 commit comments