Free · Goal

Learn Goal by contrast

Every lesson is one way a Goal fails — and how to write it so Goal mode can finish.

ObjectiveScopeConstraintsVerification / Done when

01 · objective

Objective must be verifiable

You want an agent on the login module — wording decides whether it can stop itself.

Weak

/goal Optimize the login module and improve the UX

Strong

/goal Fix missing error message when invalid email is submitted on the login page

## Objective
When a user submits an invalid email, a clear error message appears under the field and no network request is sent.

## Scope
In scope:
- app/(auth)/login page and related form validation components

Out of scope:
- Signup flow, OAuth, backend auth logic

## Constraints
- Do not introduce a new UI library
- Keep existing i18n key style

## Verification / Done when
Criteria:
- Invalid email shows an error message
- Valid email can still submit

Commands:
- bun run lint
- Manual check of both form states

Done when:
All criteria above pass and lint is clean.
  • Objective: bad side uses “optimize/better” — not a checklist
  • Scope: good side names paths and out-of-scope
  • Verification: good side has observables + commands
Try this in Build →Opens Build with this objective prefilled

02 · scope

Scope needs hard boundaries

Turn the test suite green vs letting the agent roam half the repo.

Weak

/goal Make all tests pass; refactor anything if needed

Strong

/goal Fix failing unit tests for src/lib/date.ts so bun test src/lib/date.test.ts exits 0

## Objective
All date utility unit tests pass.

## Scope
In scope:
- src/lib/date.ts
- src/lib/date.test.ts

Out of scope:
- Product pages, API routes, dependency upgrades

## Constraints
- Do not change the business meaning of assertions (flake/time mocks OK)
- No new dependencies

## Verification / Done when
Criteria:
- bun test src/lib/date.test.ts exits 0

Commands:
- bun test src/lib/date.test.ts

Done when:
The command exits with code 0.
  • Scope: “any code” makes the goal unbounded
  • Constraints: good side freezes test meaning and deps
  • Verification: a single command can decide done
Try this in Build →Opens Build with this objective prefilled

03 · verification

Verification must be machine-checkable

“Make it elegant” vs converging with lint/tsc.

Weak

/goal Make this module more elegant and professional

Strong

/goal Clear all ESLint errors in src/components/ChatArea.tsx (warnings may remain)

## Objective
ChatArea.tsx reports 0 ESLint errors.

## Scope
In scope:
- src/components/ChatArea.tsx and local types it directly depends on

Out of scope:
- Repo-wide lint rule changes, unrelated formatting

## Constraints
- Do not disable rules to “fix” issues
- Do not change external prop behavior

## Verification / Done when
Criteria:
- Lint for this file reports 0 errors

Commands:
- bunx biome check src/components/ChatArea.tsx

Done when:
Command exits 0 with no error findings.
  • Verification: taste is not a stop condition
  • Objective: good side is countable (0 errors)
  • Same four sections as Build: Objective / Scope / Constraints / Verification
Try this in Build →Opens Build with this objective prefilled

When Goal is clear, agents stop guessing.

Build