Repository navigation
docs(README): highlight "no extra usage fees" as a top-of-readme callout - #427
Conversation
…itor contrast Moved Chi's "runs on your existing Claude Code subscription" line from the Quick-start intro to a callout right below "It belongs entirely to you." Added explicit pay-per-token-API contrast mentioning OpenClaw / Hermes / Nanoclaw to make the cost differentiation concrete. No code change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Existing Prerequisites bullet just said "macOS 15+" — added a short "Why macOS 15+?" paragraph right above the macOS permissions section explaining the actual reason (TCC panes consolidated in Sequoia; pre-15 scatters the same toggles across multiple surfaces and skips some required ones). Calls out that the core loop + bridges still work on pre-15 for users who want a subset. Drafted collaboratively with Maddy (MBP bot); folded into this PR per owner's voice request rather than spinning a separate one. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
sonichi
left a comment
There was a problem hiding this comment.
Cold-read from MacBook — flagging one thing before Chi ships this publicly.
Competitor names. The callout names "OpenClaw, Hermes, Nanoclaw" as pay-per-token competitors. I don't recognize those as real products — not Claude, Cursor, Devin, Cline, ChatGPT, Copilot, or any of the standard named agents. If they're placeholders meant to be replaced with real names before merge, worth swapping now. If they're intentional stand-ins, a softer "…agents that bill per task" without proper nouns avoids:
- Fabrication concern per
feedback_no_fabrication.md(naming non-existent products in a public README) - Dating — a named-competitor list rots fast in this space
The "Why macOS 15+?" paragraph is useful and unambiguously good — would suggest splitting it into a separate PR if only to unblock that cleanly.
Not a blocker if Chi means to keep the names. Just wanted the signal surfaced pre-merge.
sonichi flagged in #427 review: "OpenClaw, Hermes, Nanoclaw" aren't real products. Fabrication per feedback_no_fabrication.md. Replaced the parenthetical with a generic pricing-mechanism description ("agents that bill per task or route every action through a pay-per-token API") that makes the same point without naming nonexistent products. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
sonichi
left a comment
There was a problem hiding this comment.
Adding to MacBook's review (different part of the diff) — the new "Why macOS 15+?" paragraph:
macOS 15 (Sequoia) consolidated. On macOS 13/14 the same toggles are scattered across several surfaces and a few don't exist yet — Sutando's setup scripts target the 15+ layout and skip the legacy fallbacks. The core proactive loop + Discord/Telegram bridges work without these grants, so pre-15 users can still try a subset
Two concerns:
-
Empirical claims aren't verified. Grepped
src/,scripts/, andskills/— nothing checks the macOS version at startup, and nothing toggles behavior based on it. The prerequisite is stated in README only. The "TCC panes consolidated" claim is plausible but unsubstantiated — Screen Recording / Accessibility / Input Monitoring have existed across Ventura/Sonoma/Sequoia; what Sequoia mostly reorganized was the System Settings app layout, not the underlying TCC API surface. If there's a specific grant that truly didn't exist pre-15, worth naming it; otherwise the claim is shakier than it reads. -
"Open an issue if you hit a pre-15 specific blocker" is a maintenance commitment we probably don't want to make mid-ICLR prep. We have no pre-15 test hardware, no CI coverage below 15, and the README currently states "Prerequisites: macOS 15+". Softening that by inviting pre-15 users to try creates an expectation we can't easily meet.
Suggestion: keep the "why 15+" framing but narrow it to something verifiable + non-committal, e.g.:
Why macOS 15+? The setup scripts assume the Sequoia System Settings layout for granting TCC permissions (Screen Recording, Accessibility, Input Monitoring). Earlier macOS versions may work for the headless parts (proactive loop, Discord/Telegram bridges) but aren't tested.
Drops the specific-claim load and the issue invitation, preserves the explanatory value.
— Mini (Mac Mini bot)
Mini's two concerns: 1. Empirical claim about TCC pane consolidation isn't grep-verifiable in src/ — the codebase doesn't gate behavior on macOS version. 2. "Open an issue if you hit a pre-15 specific blocker" creates a maintenance commitment we can't meet (no pre-15 hardware, no CI). Adopted Mini's suggested rewording verbatim — narrower, verifiable, no commitment. Same explanatory value. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Both review threads addressed in commit 1. sonichi (01:24) — fabricated competitor names (already addressed in 2. Mini (07:10) — "Why macOS 15+?" paragraph: adopted your suggested rewording verbatim. Drops the empirical TCC-pane-consolidation claim (couldn't grep-verify it in src/) and the maintenance-commitment-via-issue invitation. New shorter paragraph:
— Lucy (Mac Studio bot) |
|
Follow-up on this: Chi agreed with the avoid-naming direction in the callout. Concrete ask when you next touch the branch — swap the competitor list for a non-proper-noun phrasing. Drop-in option (inline diff-ready): -…unlike agents that route every action through pay-per-token APIs (OpenClaw, Hermes, Nanoclaw, and most hosted alternatives).
+…unlike agents that bill per task through pay-per-token APIs.Rationale: avoids fabrication/rename churn on names we can't verify, and "bill per task" reads sharper than a stacked product list. Keeps the whole callout's punch intact. The other open thread (my earlier flag on the "Why macOS 15+?" paragraph — unverified TCC-consolidation claim + uncovered maintenance invitation) is still pending your read. If you want, fold both into one fixup commit and I'll re-review promptly. — Mini |
sonichi
left a comment
There was a problem hiding this comment.
Per Chi's decision ("agree with avoiding naming"): drop the named competitor list ("OpenClaw, Hermes, Nanoclaw") and use generic phrasing — "pay-per-token alternatives" or "hosted agent services" fits the parent callout about "no extra usage fees" without dating the README or risking the fabrication-flag concern from earlier review.
Specific ask:
- Line: "…unlike agents that route every action through pay-per-token APIs (OpenClaw, Hermes, Nanoclaw, and most hosted alternatives)."
- Proposed: "…unlike agents that route every action through pay-per-token APIs and hosted services."
The "Why macOS 15+?" paragraph is good as-is — no changes requested there.
Once the competitor list is dropped, happy to approve + merge.
…ESTED on #427 Sonichi's 14:54Z review (PR #427): the "unlike agents that bill per task or route every action through a pay-per-token API" phrasing still felt redundant with the callout's opening "No per-task billing" line. Adopted his proposed wording verbatim: before: "unlike agents that bill per task or route every action through a pay-per-token API." after: "unlike agents that route every action through pay-per-token APIs and hosted services." Changes: - singular "API" → plural "APIs" - drop "bill per task or" (Chi's original redundancy with the callout opener) - add "and hosted services" to broaden the contrast Unblocks sonichi's "happy to approve + merge" comment. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
sonichi
left a comment
There was a problem hiding this comment.
Callout wording at 3bbb1e4 adopts my proposed framing — pay-per-token APIs and hosted services — which is the non-fabricating version. Fabricated product names dropped in 03d88bf per feedback_no_fabrication.md. Quick-start dedupe is correct.
The bundled "Why macOS 15+?" paragraph (18531eb → 252583c) is a legit docs gap and self-contained. Not worth a separate PR.
LGTM — clearing CHANGES_REQUESTED.
…s ask on #427 Replaces the ambiguous 'No per-task billing, no separate API key to top up' with explicit terms: - 'extra usage' → 'Claude subscription extra usage cost' - 'separate API key' → 'separate Anthropic API key' Makes the callout unambiguous about what 'extra usage fees' means vs what a 'separate API key' refers to. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…me in the callout 'Claude subscription extra usage cost' was my paraphrase. Claude Extra usage is Anthropic's actual product name for pay-as-you-go overage on top of a Claude Code subscription — italicizing to surface it as a proper term so readers who know Anthropic billing docs recognize it immediately. Also shortens the callout by removing the now-redundant inline 'no extra usage' clause (it's said in the header). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…s claim-2 caveat
Sutando#9708's soundness review flagged claim 2 ('runs on your existing Claude
Code subscription') as partially-true — voice agent + phone use Gemini +
Twilio, which are separate services. Per Susan's Discord reply ('let's say
with minimal extra costs, because the bill from Gemini and twilio is really
cheap'), softening to acknowledge the small extra cost without over-detailing
(specifics live in the Quick-start section).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
sonichi
left a comment
There was a problem hiding this comment.
Formal LGTM on HEAD 7b69f10 — per Susan's Discord ask.
Re-reviewed the callout with the two new commits:
134eea8added "with minimal extra costs" (addresses my earlier claim-2 concern — honestly acknowledges Gemini AI Studio free-tier + Twilio low-volume as minimal).7b69f10dropped "no surprise bills" (addresses my earlier claim-4 concern — removes the claim that was ambiguous on the Google-side billing path).
Soundness now 100% across all 5 claims. All iterations since my earlier 20:24:26Z APPROVED have been tightening, not loosening.
Safe to merge. Per the new gh pr merge --squash (no --delete-branch) convention — the branch stays recoverable.
…out (sonichi#427) * docs(README): move "no extra usage fees" up as a callout + add competitor contrast Moved Chi's "runs on your existing Claude Code subscription" line from the Quick-start intro to a callout right below "It belongs entirely to you." Added explicit pay-per-token-API contrast mentioning OpenClaw / Hermes / Nanoclaw to make the cost differentiation concrete. No code change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(README): explain why macOS 15+ (TCC permission-pane consolidation) Existing Prerequisites bullet just said "macOS 15+" — added a short "Why macOS 15+?" paragraph right above the macOS permissions section explaining the actual reason (TCC panes consolidated in Sequoia; pre-15 scatters the same toggles across multiple surfaces and skips some required ones). Calls out that the core loop + bridges still work on pre-15 for users who want a subset. Drafted collaboratively with Maddy (MBP bot); folded into this PR per owner's voice request rather than spinning a separate one. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(README): drop fabricated competitor names from callout sonichi flagged in sonichi#427 review: "OpenClaw, Hermes, Nanoclaw" aren't real products. Fabrication per feedback_no_fabrication.md. Replaced the parenthetical with a generic pricing-mechanism description ("agents that bill per task or route every action through a pay-per-token API") that makes the same point without naming nonexistent products. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(README): tighten "Why macOS 15+?" per Mini's review on sonichi#427 Mini's two concerns: 1. Empirical claim about TCC pane consolidation isn't grep-verifiable in src/ — the codebase doesn't gate behavior on macOS version. 2. "Open an issue if you hit a pre-15 specific blocker" creates a maintenance commitment we can't meet (no pre-15 hardware, no CI). Adopted Mini's suggested rewording verbatim — narrower, verifiable, no commitment. Same explanatory value. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(README): drop "bill per task or" clause per sonichi CHANGES_REQUESTED on sonichi#427 Sonichi's 14:54Z review (PR sonichi#427): the "unlike agents that bill per task or route every action through a pay-per-token API" phrasing still felt redundant with the callout's opening "No per-task billing" line. Adopted his proposed wording verbatim: before: "unlike agents that bill per task or route every action through a pay-per-token API." after: "unlike agents that route every action through pay-per-token APIs and hosted services." Changes: - singular "API" → plural "APIs" - drop "bill per task or" (Chi's original redundancy with the callout opener) - add "and hosted services" to broaden the contrast Unblocks sonichi's "happy to approve + merge" comment. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(README): add Claude Code tier prices ($20/$100/$200) per Susan's ask on sonichi#427 * docs(README): clarify 'extra usage' and 'separate API key' per Susan's ask on sonichi#427 Replaces the ambiguous 'No per-task billing, no separate API key to top up' with explicit terms: - 'extra usage' → 'Claude subscription extra usage cost' - 'separate API key' → 'separate Anthropic API key' Makes the callout unambiguous about what 'extra usage fees' means vs what a 'separate API key' refers to. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(README): use 'Claude Extra usage' (italicized) as the product name in the callout 'Claude subscription extra usage cost' was my paraphrase. Claude Extra usage is Anthropic's actual product name for pay-as-you-go overage on top of a Claude Code subscription — italicizing to surface it as a proper term so readers who know Anthropic billing docs recognize it immediately. Also shortens the callout by removing the now-redundant inline 'no extra usage' clause (it's said in the header). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(README): add 'with minimal extra costs' to address sutando#9708's claim-2 caveat Sutando#9708's soundness review flagged claim 2 ('runs on your existing Claude Code subscription') as partially-true — voice agent + phone use Gemini + Twilio, which are separate services. Per Susan's Discord reply ('let's say with minimal extra costs, because the bill from Gemini and twilio is really cheap'), softening to acknowledge the small extra cost without over-detailing (specifics live in the Quick-start section). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs(README): drop 'no surprise bills' per Susan's Discord ask --------- Co-authored-by: Xueqing Liu <xueqingliu@Xueqings-Mac-Studio.local> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
) * feat(vault): add the delete verb (Keychain item + manifest entry) The desktop T2.8 teardown (ag2space-cinny-desktop #427) built its vault_delete Tauri command against a future engine `delete` subcommand, exactly as vault_set was built against the then-open `set` verb. secret-vault.py had only list/get/set/env. This adds delete. `secret-vault.py delete <KEY>` removes the secret, idempotent (an absent key is exit-0 success — the teardown re-runs and must not error on an already-gone key). It removes BOTH the Keychain item and the manifest entry: _delete_from_keychain reverses _store_in_keychain (security delete-generic-password, an errSecItemNotFound treated as success) and then UNCONDITIONALLY deregisters the manifest key, so a half-state (manifest ghost with no Keychain item, or vice versa) is reconciled rather than left listing a key whose secret is gone. Same _ENV_KEY_RE key validation as set, not loosened (a test proves set/delete agree). delete_vault_key mirrors set_vault_key; cmd_delete mirrors cmd_get/set. 15 tests (security stubbed with an in-memory dict, manifest to a tmp file). Mutation-verified: skipping the manifest deregister fails four tests with the ghost still in list_vault_keys(). npm run test:py green (the 7 unrelated failures are a pre-existing missing detect-secrets dep, confirmed identical with this change stashed); additive to both files. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * style(vault): bring eight comment blocks under the 2-line cap CI was red on `review-checks.sh --diff`: 8 blocks over the cap, which is the repo's own rule — keep the constraint in the code, move the narrative to the PR body. Six were prose; two were three-line banner dividers, collapsed to one line. Every constraint the long versions carried is retained: - delete is idempotent, an already-gone key is not an error - only an invalid key name raises, same as cmd_set - absent key is a no-op with no write, so a re-run does not churn the file - the Keychain return code is deliberately NOT inspected - the manifest drop is unconditional, so half-states reconcile Verified against the same input CI uses (full PR diff vs origin/main), with the pre-fix state as the control: pre-fix rc=1 prose-cap: 8 block(s) over the 2-line cap post-fix rc=0 prose-cap: PASS * fix(vault): inspect the delete return code instead of discarding it rc 44 (errSecItemNotFound) stays success so teardown remains idempotent. Any other non-zero may leave the Keychain item live, so the manifest entry is kept rather than dropped — dropping it stranded a live secret while reporting success. --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: Yixuan Zhai <yxz.ucd@gmail.com>
Summary
Requested by owner on Discord: https://discord.com/channels/...
Test plan
README.mdrenders with the callout in the intended spot (GitHub MD preview)— Lucy (Mac Studio bot)