Skip to content
Merged
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
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,18 @@ Prefer Claude? Use `--agent byokit:claude --model claude-sonnet-5-5` in step 2 w
- **See the market first.** `--competitors` finds 3–5 real products of the brief's kind, captures their public pages through the same robots/terms review as a reference, and shows them beside the options with their sources and every refusal.
- **Keep the original.** Refine into a new option, or send the choices to [sign-off](https://github.com/umeranjum17/sign-off) for someone's pick.

**Polish one direction.** Pick one option you already generated and refine only that direction. An independent judge scores each version, and the loop stops at 9/10, at `--max-rounds` (default 5), or after two rounds without improvement. It does not guarantee 9/10: a version below the bar is reported as below the bar, not as finished.

```sh
first-draft-axi polish notes-1.html "A notes app" \
--out-dir notes-polished \
--max-rounds 4 \
--feedback "Warmer paper background"
first-draft-axi polish-feedback notes-polished "Make the sidebar narrower"
```

`polish-feedback <run-folder> "<request>"` adds cumulative feedback while a run is in progress; the next round judges it. The original file is untouched.

`first-draft-axi init` also installs the [agent skill](skills/first-draft-axi/SKILL.md) for Claude Code, Codex and pi in your repo. Commands return JSON, so your coding agent can drive the same workflow.

## Proof, not a promise of perfect design
Expand Down Expand Up @@ -85,7 +97,7 @@ Same brief, same model (Claude Sonnet 5.5), 24 October 2026 — First Draft on t

One run per cell, scored by the review worker, not customers and not an independent judge; before our fixes First Draft scored **4** on both of these. **[How good is it?](docs/quality.md)** has all four briefs side by side, the method, the limits, what we fixed and the rerun command.

- [Published npm releases](https://www.npmjs.com/package/first-draft-axi?activeTab=versions): the clean install path was checked with the packed **0.5.0** build; the release workflow publishes after merge.
- [Published npm releases](https://www.npmjs.com/package/first-draft-axi?activeTab=versions): the clean install path was checked with the packed **0.6.0** build; the release workflow publishes after merge.
- [CI](https://github.com/umeranjum17/first-draft/actions/workflows/ci.yml): builds and drives CLI/browser checks with local provider stand-ins, without paid generation. The **25 October 2026** local run passed **74 tests, zero failures, zero skips**.
- [Comparison contract](CONTRIBUTING.md): wrapper additions need paired rendered evidence; our own tool must not quietly lower the plain model's output bar.

Expand Down
2 changes: 1 addition & 1 deletion docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ <h3>Hand it to your coding agent.</h3>
</section>
</main>

<footer><span>first-draft <span class="version">0.5.0</span> · Open source · MIT · Design engine: <a href="https://github.com/umeranjum17/open-design">OpenDesign</a> · Apache-2.0</span><a href="https://github.com/umeranjum17/first-draft#reference">CLI reference ↗</a></footer>
<footer><span>first-draft <span class="version">0.6.0</span> · Open source · MIT · Design engine: <a href="https://github.com/umeranjum17/open-design">OpenDesign</a> · Apache-2.0</span><a href="https://github.com/umeranjum17/first-draft#reference">CLI reference ↗</a></footer>
</div>
<script>document.addEventListener('click', (e) => { const b = e.target.closest('[data-copy]'); if (b) navigator.clipboard?.writeText(b.dataset.copy).then(() => b.setAttribute('aria-label', 'Copied'), () => {}); });</script>
</body>
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "first-draft-axi",
"version": "0.5.0",
"version": "0.6.0",
"description": "Pick a design direction before writing app code. A CLI for developers and coding agents.",
"keywords": [
"ai",
Expand Down
8 changes: 7 additions & 1 deletion skills/first-draft-axi/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ description: "Drive first-draft-axi to prototype and explore designs: several se
Use it by judgement: bigger redesigns, new screens, landing pages, or "show me 3 options to pick from". A small UI fix (a colour, a margin, a label) does not need it; edit the code.
Every command prints JSON; its `help` list says what to do next, and a failure is `{"error": {"code", "message"}, "help": [...]}`: read the message, do not retry blindly.

## The 5 commands
## The 7 commands

1. **init**, once per repo (safe to re-run; writes only inside the repo):
`first-draft-axi init`
Expand All @@ -28,6 +28,12 @@ Every command prints JSON; its `help` list says what to do next, and a failure i
`first-draft-axi post .first-draft/designs/settings.html --title "Which settings layout?" --recommend a --option a="Grouped list" --option b="Tabs" --option c="Single scroll"`
Copies the options to the board's `mocks/`, starts the view, and each option card gets an Open link to its live Play page (desktop and phone urls are in the output). The board is the nearest `.sign-off/` above the folder, or `--board <board.json>`, or `$FIRST_DRAFT_BOARD`. You choose `--recommend` (the option you would pick); a second post on the same title needs `--key <new-key>`. Tests, journeys and demos ask nobody: `--evidence --media shot.png` instead of `--recommend`.
On a machine without a tailnet address pass `--host <address>` (or `FIRST_DRAFT_VIEW_HOST`).
6. **polish**, to refine only the one direction the user picked (an independent judge scores every version; run it in the background, it takes several rounds):
`first-draft-axi polish .first-draft/designs/settings-2.html "A settings page for a podcast app" --out-dir .first-draft/designs/settings-polished --max-rounds 4 --feedback "Calmer billing section"`
Stops at a score of 9/10, at `--max-rounds` (default 5), or after two rounds without improvement; it does not guarantee 9/10. Each round prints a `polish_round` line (`score`, `accepted`, `file`, `gaps`), and `polished` holds the result. A version below 9 is below the bar: report its score and gaps, never call it finished. The original file is untouched.
7. **polish-feedback**, to add the user's request to a polish run that is still going:
`first-draft-axi polish-feedback .first-draft/designs/settings-polished "Make the tabs larger"`
Feedback is cumulative and each later round is judged against it. A run that has stopped refuses it: start a new `polish`.

For reference-grounded screen comparison: `first-draft-axi benchmark --product "AI chat app" --screen "phone chat" --input screens.json --width 390 --theme light --out benchmark.html`. The manifest must contain at least one current/candidate and is an array of `{role,name,file,source,permission,captured_at,theme}` captures; roles are `current`, `candidate`, `reference`, `counterexample`, paths resolve beside the manifest, capture time may be null if unknown. Search reuses public robots/terms capture; every refusal remains in the sheet/report. Positive references and targets must match the requested theme; negative examples may differ. The self-contained sheet scales original images to one width without recolouring them; adjacent JSON records per-axis reference observations, cited capture IDs and target scores (1–10 or null when not comparable). Every current/candidate is judged separately by the configured independent subscription judge, never a prose-only bar. Public acquisition currently supports light HTML captures only, not app-store/press image extraction. The central resolver requires an authenticated engine and a judge on a different engine, named in the output. `--no-discovery` and `--no-judge` are private test plumbing only (`FIRST_DRAFT_TEST_BENCHMARK=1`), not user modes. Missing references, unavailable judges and failed reviews publish no new sheet/report, including no partial scores; credential failures give one sign-in step. An earlier complete result remains unchanged.

Expand Down
Loading