Suzanne Sallaj

Curb · Conclusion

Where the build of Curb is, and what I learned

By Suzanne Sallaj

· 5 min read · Curb series, part 5 of 5

Three case studies sit above this page: the agent, the engine that gives it rules, and the agents that check them. This is the short page at the end. Where the project stands today, what building all three taught me about designing agents, and what the next month holds.

Where the project is

A live project, not a finished one

Curb runs on my phone and in the simulator. It is not on the App Store. This block is the one I keep current.

Live project   Where Curb is right now
Updated September 2026. I keep this current.

Working today

  • The rules engine: 10.4M LA citations turned into curb-side rules: 81,807 in the 63 MB bundle inside the app (August 21), 86,167 in the full database by September 4. The coverage atlas shows what it covers
  • Park detection from the unplug moment, with the warning scheduled against the real sweeping window, tested from my own car
  • A spot check that reads the rules for wherever you're standing and says when it can't tell which side of the street you're on
  • The Agentic Walkers, verifying signs block by block in West Hollywood and Hollywood, with 305 automated tests holding the engine honest

Not yet

  • Public release. It runs on my phone and in the simulator, not on the App Store
  • Timed parking: the "check the sign" timer is designed and decided, not built
  • Obligations ranked by whichever deadline comes first, when a curb has several rules at once
  • Bus zones, driveways and time-shared white zones, three restriction types the tickets revealed after the engine was built

What I learned

Six things I would bring to any agent

Each of these was learned on one part of the project and then turned out to hold on the others. The page named after each is where the evidence lives.

  1. Confidence is a behavior, not a number.

    A percentage helps nobody at a curb. What changes is what the agent does: speak plainly, hedge and ask, or stay quiet and say why. Learned on Curb, then built into the engine as a basis every rule carries.

  2. Silence is a design decision with a cost.

    Not acting is an agent's most common action, and it can mean three different things. On Curb the app has to say which one. In the engine, a block with no tickets is not a block with no rule.

  3. Decide what it may not do before you are in a hurry.

    The walkers' rulebook, the shard rule, the sanctioned ways to look at a street, the refusal to call a curb unpainted without seeing bare concrete. All written before the pressure to skip them arrived, which is the only time a rule like that can be written.

  4. An agent should not audit itself.

    Every inference the engine makes is checked against a source that had nothing to do with it. Every claim a walker makes can be overturned by another walker or by a person at the pole. The check that cannot be gamed is the one worth having.

  5. Real data beats the spec, and the spec should be built to lose.

    Curb's detection approach changed twice in the field. The walkers' manual grew from twelve of my corrections into a document the agents extend themselves. A spec that cannot be overturned by a drive around the block is a wish.

  6. Ship the uncertainty, not the guess.

    When the engine knows the day but not the hours, the sentence has to say so. When a walker cannot read a sign, the row stays open. Overstating the weak half of an answer is the expensive failure, and every part of this project exists to prevent it.

Underneath those are the working habits that caught my own mistakes along the way: say what would prove it wrong before you look, ask who needs the data to be right, measure the number that got hand-waved, suspect your own code before the world, go and look at the actual thing, write down what a summary will get wrong, decide what you will not do before you are in a hurry, and say what you cut and why. Each one has a story on the method page.

What's next

The next month

These are the open items from the project's own to-do list, in the order I would take them, not a wish list.

Instrument the fallback before designing it

Parks the plug never sees are counted silently today. Log them first, then design the walk-away resolver, then the geometry score. Order matters, because a fix designed without the count would be a guess.

Per-field confidence

A rule can be sure about the day and honest about the hours. One number for both overstates the weaker half. The stated meter limit already escapes the score; generalise that to every rule.

Re-notification as a window approaches

Unbuilt, and the most likely reason someone would delete the app. The timing question is a design question: when does a reminder stop being help and become noise.

A consistency test suite for the walkers

The walkers caught each other whenever they happened to overlap. Make that a suite run on purpose: the same block, two walkers, compared automatically. The gap named on The Agentic Walkers page.

Time-limited parking

The "check the sign" timer is designed and decided. Build it, so that a two-hour block warns before the two hours are up instead of staying silent.

A wider field test

One driver, one car, one summer. The next test is other people's cars, other neighborhoods, and the failures I cannot produce myself.

If you want more

Two appendices

The build log is the whole month of Curb in the order it happened, from the running log I kept the entire time. How I check is the eight habits above, with the moment each one caught something. Neither is required reading. Both are there for anyone who wants to see the work before it was tidy.

The Curb series

  1. 1Curb19 min
  2. 2Designing how the agent reasons about data10 min
  3. 3The Agentic Walkers46 min
  4. 4AI in the Wild: the day the agents went rogue for the mission13 min
  5. 5Where the build of Curb is, and what I learned You are here5 min

Share this post

Written by Suzanne Sallaj

Product designer working on agentic AI, six years across healthcare, fintech and consumer.