feat: support free-tier browser chat (Claude Free, ChatGPT Free) - #107
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
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.txtrewritten 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.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:AGENTS.mdbut not inAGENTS_CHAT.mdIt also warns when a complete skill belongs to no group, so new skills don't silently fail to ship.
audit_skill_apis.py --dump-symbolsemits the 655-symbol public API surface, making the bundle's API currency generated rather than prose-maintained.Wired into the
wiki-currencyworkflow (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 isdataset/imaging/cosmos_web_ring.Verification
Against the exactly pinned stack —
autolens 2026.7.29.2on Python 3.12:--check-version:[drift] clean — installed public API surface matches baselineNot tested: the live browser flows (no free-tier accounts or browser available).
FREE_TIER_SETUP.mdis dated and describes observed behaviour rather than promising plan features, permodes/maintainer.md; per-route smoke tests are inmodes/maintainer.mdfor 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_cardsfails on this branch and on pristineorigin/main(verified with zero commits ahead). Theeasy_cosmos_web_ringbenchmark 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 nonexistentworkspace_index.json. That file does exist in bothautolens_workspaceandHowToGalaxy, so no change was made there.🤖 Generated with Claude Code
https://claude.ai/code/session_01AbbSTnUxkWgAuoiBTv8Uhb
Generated by Claude Code