Skip to content

A usability round: model suggestions, efforts that fit each tier, clearer texts, and lists that scale to dozens - #73

Merged
ne0x86 merged 4 commits into
mainfrom
usability-round
Oct 27, 2026
Merged

ne0x86 merged 4 commits into
mainfrom
usability-round

Conversation

@ne0x86

@ne0x86 ne0x86 commented Oct 27, 2026

Copy link
Copy Markdown
Owner

What and why

A usability round from the owner's test with dozens of projects and containers.

Models and effort

  • Model suggestions. Each Model field has a list to pick from, and any other name can still be typed, because catalogs change every month.

    • Claude Code and Codex. The list comes from data/tiers.json: the aliases haiku, sonnet and opus for Claude Code, and the models of the Codex CLI that the runner pins. fable is left out: claude -p can bill it to usage credits without asking, and lastcall never spends paid usage.
    • API keys. The list is the provider's models from models.dev's public catalog (lastcall/catalog.py): those that call tools, have a price and are not deprecated.
    • The catalog request. The Accounts page asks for it once a day, waiting 5 s at most. It is bounded at 32 MB packed or unpacked, and at 1,000 models per provider. When the request fails, the page shows no suggestions and tries again after 10 minutes. The README says that the page asks models.dev.
  • Default efforts that fit the task, for both engines:

    • fast: medium. Only a repository's own reviewers ask for it.
    • balanced: high. The reviewers.
    • deep: xhigh. The judge, the implementers and the plans, where quality matters most and the quota would expire anyway.

    Codex used to say "Default (high)" for every tier.

Clearer texts on a project's settings

  • "Writes in" / "The account's" becomes "Language of its pull requests and issues" / "Same as the account", with a hint.
  • The four options say plainly what they add: "Tests too", "Dependencies too", "Merge after my approval" and "Watch after the merge".
  • The watch's text says what it does not do. It looks only at the checks of the merged commit and at the health address. Container logs, Loki and the error tracker feed the audits, not the watch.

Lists that scale

  • Settings › Container logs and Logs in Loki come in three parts:

    • Read now: a compact list, where each chosen row can stop being read.
    • Suggested: checkboxes, with "Read the N suggested" and "Skip the ticked" above the list and "Read the ticked" at the bottom of the screen.
    • Everything else: a fold with a filter by name, where a project is typed into one <input list> with type-ahead instead of a select of every project in every row.

    lastcall's own containers and sources are hidden. The server checks every typed project against the projects, in any case, and a form is applied whole or not at all. A choice for a removed project still survives every save.

  • Projects.

    • Search and filters. The page has a search by name, and filters with counts: All, Active, Inactive, and Waiting for you (pull requests, decisions or ideas). They show from the seventh project on, or while one is set.
    • Shorter cards. With more than 6 projects, each card's "Run now" starts folded.

Docs

  • README.md: Models and effort, the privacy note about models.dev, and the Container logs and Loki paragraphs.
  • DESIGN.md: section 6 (tiers, suggestions, why the efforts differ) and section 13 (the lists and the Projects page).
  • CONTRIBUTING.md: models and Provider.catalog.

How it was verified

  • The checks. uv run ruff check && uv run ruff format --check && uv run mypy && uv run pytest passes: 832 tests pass and 33 are skipped. 114 tests are new. They cover:

    • the datalists, and models.dev with its cache, timeout, failure, bounds and gzip bomb;
    • the new defaults, and the texts in English and Spanish;
    • the three parts for containers and sources: ticked, all suggested, skip, stop, the typed project checked, and forged forms refused;
    • the filters, and the search and filters of the Projects page with their counts;
    • Run now folded.

    Seven existing assertions changed on purpose: they pinned the old efforts, or the old rows of the logs lists.

  • Screenshots at 390 and 1280 px, in English and Spanish, light and dark, of:

    • the Accounts page for Claude Code, Codex and OpenRouter accounts;
    • a project's settings;
    • the logs and Loki lists, with 40 containers and 30 sources;
    • the Projects page, with 30 projects.

    Every page answers 200, and nothing is wider than the screen. The real lastcall web was checked with 30 projects too.

🤖 Generated with Claude Code

ne0x86 and others added 4 commits October 27, 2026 13:05
…fort and say plainly what a project's options do

- The Model field of every tier on the Accounts page, and the model fields of the form that adds an API key, point
  to a datalist, so the owner picks a name or types any other. Claude Code and Codex suggest the new "models" of
  data/tiers.json (the aliases haiku, sonnet and opus; the Codex models that its own catalog lists for choosing).
  An account on an API key suggests what models.dev lists for its provider, read by the web UI through the same
  fetch as its other lookups: at most once a day, waiting 5 seconds, asking for gzip with a User-Agent of its own
  (models.dev answers 403 without one), a failure kept 10 minutes, at most 1000 models for each provider, and only
  the models that call tools, have a price and are not deprecated. A local model server gets none.
- The default efforts are medium for fast, high for balanced and xhigh for deep, for Claude Code and for Codex.
  README and DESIGN say why they differ and where the suggestions come from.
- A project's language says what it is ("Language of its pull requests and issues", default "Same as the account",
  with a hint), as the account's own field does. The hints and the help of Tests too, Dependencies too, Merge after
  my approval and Watch after the merge say what each adds, and that the watch looks only at the checks of the merged
  commit and at the health address: logs, Loki and the error tracker feed the audits.
- The two selects of a project's settings get a row each, so that a closed select does not cut its text short.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… of entries

Settings > Container logs and Logs in Loki now come in three parts. Read now lists what lastcall reads: a container with the label lastcall.project (its label decides) or one the owner chose, with a Stop reading button. Suggested has the Projects page's add-many tiles: a checkbox with the container and its project, a button that reads all of them, and a bar that reads or skips the ticked ones. The rest go in a fold that says how many there are, with a filter by name (logs_q, loki_q, from the seventh on) and one text field for each, with a single datalist of the projects, checked on the server against the projects whatever the case. lastcall's own containers (its Compose project, or lastcall-...) never show, in either list.

The forms post name-N, project-N and pick. shown-N is gone: a save changes only what it names, so no choice, such as one kept for a removed project, can be erased by it. Both lists share logs.parts, logs.apply_form and templates/_lists.html. The containers' form now refuses lastcall-step-... as the sources' form already did.

The Projects page gets a search by name and the filter links All, Active, Inactive and Waiting for you (pull requests, decisions or ideas that wait for the owner), each with its count for the current search, from the seventh project on. With more than 6 projects each card's Run now starts folded, like its Settings. README and DESIGN describe the new layout.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ontainers and sources

Skip the ticked joins Read the N suggested above the list, as on the Projects page, so that the bar stays one button
high on a phone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ne0x86
ne0x86 merged commit d49fd11 into main Oct 27, 2026
3 checks passed
@ne0x86 ne0x86 mentioned this pull request Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant