Skip to content

feat: support free-tier browser chat (Claude Free, ChatGPT Free) - #107

Merged
Jammy2211 merged 2 commits into
mainfrom
claude/autolens-free-setup-yxtq94
Aug 3, 2026
Merged

feat: support free-tier browser chat (Claude Free, ChatGPT Free)#107
Jammy2211 merged 2 commits into
mainfrom
claude/autolens-free-setup-yxtq94

Conversation

@Jammy2211

Copy link
Copy Markdown
Collaborator

Why

The assistant's front door assumed a GitHub connector and told users without one to give up. It also bootstrapped from a blob/ URL — a JavaScript shell to most chats, not the file — and linked onward relatively, so even a successful fetch was a dead end. Those were the actual causes of a failed free-tier setup attempt, not a plan limitation.

Two platform facts shape the fix:

  • The GitHub connector is available on all Claude plans, including Free (docs).
  • ChatGPT connectors are paid-only, and free users can use custom GPTs but not create them (docs).

What

Setup surface

  • FREE_TIER_SETUP.md — per-platform setup with troubleshooting for the observed failure modes (blob/ URLs, indirect-link fetch refusal, stale-plotter output, context exhaustion, quota fallback), plus a build recipe for a shareable custom GPT.
  • llms.txt rewritten as a harness router: absolute raw URLs throughout, the workspace's "paste this entire file" affordance, and the "without a connector, give up" sentence removed.
  • README gains a plan/route matrix and links the setup page.

Content tiers

  • llms-chat.txt (~6.3k tokens) — self-contained paste bundle, budgeted to fit ChatGPT Free's small context with room left to converse.
  • chat_pack/ (11 files, ~61k tokens) — upload tier for a Claude Project or GPT knowledge, chunked one topic per file because GPT knowledge is retrieved by RAG rather than read whole.
  • AGENTS_CHAT.md — chat-mode instructions: keeps the rules that hold with no execution, drops those needing a shell, checkout or write access.

Generation and guards

Both tiers are generated by autoassistant/chat_bundle.py, which fails on:

Guard Catches
Verbatim-anchor drift A rule reworded in AGENTS.md but not in AGENTS_CHAT.md
Dead links A rewritten raw URL that resolves nowhere
Staleness Committed artifacts not matching a fresh build
Budgets Paste tier over its token budget; pack over the 20-file GPT limit

It also warns when a complete skill belongs to no group, so new skills don't silently fail to ship. audit_skill_apis.py --dump-symbols emits the 655-symbol public API surface, making the bundle's API currency generated rather than prose-maintained.

Wired into the wiki-currency workflow (same trigger that already grades wiki staleness), make chat-bundle{,-check}, and the maintainer chat-surface smoke test.

Fix: README example prompts pointed at dataset/cosmos_web_ring; the real path is dataset/imaging/cosmos_web_ring.

Verification

Against the exactly pinned stackautolens 2026.7.29.2 on Python 3.12:

  • --check-version: [drift] clean — installed public API surface matches baseline
  • 81 tests pass (14 new), idiom lint clean over 213 files
  • 254 generated links checked, 0 broken
  • Guards verified by deliberately breaking each one: reworded rule, broken link, staled artifact, ungrouped skill — all four caught

Not tested: the live browser flows (no free-tier accounts or browser available). FREE_TIER_SETUP.md is dated and describes observed behaviour rather than promising plan features, per modes/maintainer.md; per-route smoke tests are in modes/maintainer.md for whoever has the accounts. The custom GPT (Route D) needs a paid account and is marked "not yet built".

Pre-existing failure, untouched

test_repo_readme_prompts_match_cards fails on this branch and on pristine origin/main (verified with zero commits ahead). The easy_cosmos_web_ring benchmark card claims to mirror "Example Prompt 2" of the README, but that slot now holds the SDSSJ0946 subhalo prompt. The card says "fix the README or bump this card's version" — choosing which is authoritative changes the frozen benchmark record, so it is left for a maintainer.

Note on a research claim

The research prompt listed a fix for wiki/core/external/ advertising a nonexistent workspace_index.json. That file does exist in both autolens_workspace and HowToGalaxy, so no change was made there.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AbbSTnUxkWgAuoiBTv8Uhb


Generated by Claude Code

The assistant's front door assumed a GitHub connector and told users without one
to give up. It also bootstrapped from a `blob/` URL (a JS shell to most chats)
and linked onward relatively, so even a successful fetch was a dead end.

Add three routes that work on free plans, and the tooling to keep them honest:

- `FREE_TIER_SETUP.md` — per-platform setup: Claude connector (free on all
  plans), Claude Project + knowledge pack, and a pasteable bundle for ChatGPT
  Free, whose connectors are paid-only. Includes troubleshooting for the
  observed failure modes and a build recipe for a shareable custom GPT.
- `llms-chat.txt` (~6k tokens) — self-contained paste bundle sized for a small
  context window; `chat_pack/` (11 files) — upload tier for a Claude Project or
  GPT knowledge, chunked one topic per file for RAG retrieval.
- `AGENTS_CHAT.md` — the chat-mode instruction set: keeps the rules that hold
  with no execution, drops the ones needing a shell or checkout.

Generation and guards:

- `autoassistant/chat_bundle.py` builds both tiers, rewrites relative links to
  absolute raw URLs, and fails on verbatim-anchor drift (rules shared with
  AGENTS.md must stay word-identical), dead links, stale artifacts, or a
  blown token/file budget. Warns when a complete skill ships in no group.
- `audit_skill_apis.py --dump-symbols` emits the 655-symbol public API surface,
  so the bundle's API currency is generated rather than prose-maintained.
- Wired into the wiki-currency workflow, `make chat-bundle{,-check}`, and the
  maintainer chat-surface smoke test.

Also fix the README example prompts, which pointed at `dataset/cosmos_web_ring`
rather than the real `dataset/imaging/cosmos_web_ring`.

Verified against the pinned stack (autolens 2026.7.29.2, Python 3.12): baseline
API hash clean, 81 tests pass, idiom lint clean, 254 generated links resolve.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbbSTnUxkWgAuoiBTv8Uhb
Two CI failures on #107, both real.

**wiki-currency.** `chat_bundle.py --check` compares the committed artifacts
byte-for-byte against a fresh build, but every header stamped
`date.today()`. That makes the check fail on any day after the bundles were
generated, regardless of whether anything changed — CI ran one day later and
went red. Provenance is now the pinned stack version read from the committed
API baseline, which moves exactly when the content it describes moves. Covered
by a regression test asserting no generation date leaks into an artifact;
verified by re-running `--check` under a simulated future date.

**clone-boundary.** The new files were unclassified in the reference profile,
which blocks every future assistant birth. `modes/maintainer.md`
"## Assistant-as-template" — the prose that owns the seam — now places them:
`AGENTS_CHAT.md` generic, `llms-chat.txt` + `FREE_TIER_SETUP.md` mixed,
`chat_pack/` domain. The matching profile entries are in PyAutoBrain#189,
which must merge first.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AbbSTnUxkWgAuoiBTv8Uhb
Jammy2211 added a commit to PyAutoLabs/PyAutoBrain that referenced this pull request Aug 3, 2026
autolens_assistant gains a chat surface for free-tier browser users
(PyAutoLabs/autolens_assistant#107). Its new files are unclassified in the
reference profile, so the boundary check fails and every future birth would
be blocked — the exact failure this profile exists to prevent.

Place them on the seam:

- `AGENTS_CHAT.md` -> generic. It is the chat-mode counterpart of `AGENTS.md`
  (same skeleton, shell-dependent rules removed), so it clones on identical
  terms — name substitution only.
- `llms-chat.txt`, `FREE_TIER_SETUP.md` -> mixed, alongside `llms.txt`. The
  per-platform setup mechanics clone verbatim; the worked prompts and dataset
  names are domain.
- `chat_pack/*` -> domain, and added to `scaffold_dirs`. It is generated by
  concatenating `al_*` skill bodies, `wiki/core/` pages and a snapshot of the
  lensing stack's API surface — every input is domain, so a newborn must
  regenerate it via `make chat-bundle` rather than copy this one.

The generator itself (`autoassistant/chat_bundle.py`) needs no entry: it is
already generic under `autoassistant/*`.

Verified: check_boundary.py against the paired branch reports
`boundary complete — generic 59 · domain 312 · mixed 91`.


Claude-Session: https://claude.ai/code/session_01AbbSTnUxkWgAuoiBTv8Uhb

Co-authored-by: Claude <noreply@anthropic.com>
@Jammy2211
Jammy2211 merged commit 324e363 into main Aug 3, 2026
2 of 3 checks passed
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.

2 participants