Skip to content

Teach agents to generate and edit paywalls#38

Draft
joshdholtz wants to merge 21 commits into
rc-cli-project-setup-workflowsfrom
rc-cli-astra-paywall-workflows
Draft

Teach agents to generate and edit paywalls#38
joshdholtz wants to merge 21 commits into
rc-cli-project-setup-workflowsfrom
rc-cli-astra-paywall-workflows

Conversation

@joshdholtz

Copy link
Copy Markdown
Member

What

Updates the project-creation and paywall skills to use the new AI paywall workflow when available: generate a draft from product context, revise it with natural-language edits, review it, and publish separately.

Agents also get explicit guidance for async tasks and the non-AI fallback.

Validation

  • Both skill folders pass quick_validate.py
  • Forward-tested against an annual-first Test Store paywall scenario

joshdholtz and others added 17 commits July 15, 2026 21:55
Native integrations must register the app's custom URL scheme and wire
presentPaywall(from:)/previewPaywall so dashboard paywall previews open
on device, per docs/tools/paywalls/testing-paywalls.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace the stale MCP-era flags (--context/--async/task) with the real
session-file flow, call out the persistence limitation (publish ships
the default template, not the AI design), and teach agents to run
design turns concurrently with app-code integration.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paywall drafts now receive the AI design on every turn (khepri v2
PATCH), edit works on any paywall, and the custom URL scheme is
readable from the App read model instead of a dashboard handoff.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The plan warnings for review notes, the review screenshot, and
subscription group localizations are App Review submission requirements
agents were silently skipping — and one agent concluded the plan path
could not set them after a nesting error ('Additional properties are
not allowed'). Documents the exact store_state nesting, the CSV
columns, the screenshot upload->reference flow, and the rule: resolve
these warnings or surface them to the user, never move past them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- warnings live at plan AND plan_items levels; check both before
  reporting clear (agent gave a false all-clear off the top level)
- verify configured Apple access via rc apps show --json, not
  rc apps apple check (which dead-ends at interactive 2FA)
- review screenshot is a post-apply step; its plan warning is expected
- CSV product-level fields must be identical across a product's rows
- note where prices are readable (plan diff / Test Store only)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The skill told agents to run three rc schema calls before starting;
sessions were burning turns re-deriving the CLI surface. Invocations
in the skill are authoritative; discovery, when needed, is one call
(rc commands --schemas).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live fresh-laptop session showed two burns this skill caused: it
instructed an upfront RevenueCat MCP inventory (so agents reached for
MCP before the CLI that launched them) and per-command rc schema
research. Now: the CLI is the primary tool, MCP is a lazy fallback
only where a step names it, and discovery is one rc commands --schemas
call consulted thereafter.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…board

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Live session produced a paywall that read as the stock template with
swapped text. The skills now require a design brief before the first
generate call: extract the app's actual brand from its code (exact hex,
font, voice, real feature names), ask the user for the customization
level, pass an app screenshot via --image when possible, and judge the
result against the brief — iterating with named deltas instead of
accepting template-adjacent output.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… entry point

The skills treated the three presentation mechanisms as interchangeable
choices, so integrations shipped with the paywall gated solely behind a
locked-feature tap. Now: every app ships a persistent upgrade entry
point (settings/profile CTA) PLUS at least one contextual trigger
(feature gate, moment-of-value, or onboarding paywall); the agent asks
which monetization model fits and must name both placements in its
completion report.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Agent post-mortem from a live integration traced its missteps to
prompt framing:

- the goal is now stated as a user experience (find Upgrade -> open
  paywall -> purchase -> entitlement unlocks, driven in-app in the
  app's normal dev run mode), not 'a simulated purchase that unlocks
  the entitlement' — CLI shortcuts supplement, never replace
- 'debug test_ key' conflated WHICH key with WHEN to configure: the
  key selects the environment; configure() runs on every normal
  launch, never gated behind DEBUG/test/storage flags
- RevenueCatUI renders ALL paywall UI: custom upsell/fallback purchase
  screens are forbidden; the only allowed custom view is a minimal
  'unavailable' state

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Agents created only the test_store app by default, deferring the
app_store/play_store record until the credential stage. The record
needs no credentials to exist: create it at bootstrap with the bundle
ID/applicationId read from the codebase so the project mirrors real
life, the credential stages have their target, and both Apple keys
attach together whenever available.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e build

Agent-driven simulator puppeteering (boot/install/tap/screenshot
loops) is slow, flaky, and permission-prompt heavy. Verification
splits by nature: the agent proves the build and hands the user a
30-second checklist; the human confirms the experiential outcome.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
joshdholtz and others added 4 commits July 22, 2026 16:59
An agent parked mid-run waiting for the user to do Apple sign-in the
user had deliberately deferred. Stage 7/8 are never blocking: when the
human defers Apple, finish every independent stage (paywall, SDK,
Test Store verification) and surface the Apple commands as remaining
work in the completion report.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-to-file

From an agent post-mortem: empty stdout read as 'silent non-JSON'
(errors are a JSON envelope on stderr + exit code); activeness was
asserted from simulate-purchase's differing shape (canonical:
customer show active_entitlements.items[]); the schemas document
truncated in a read buffer (write to file, query with jq).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
An offering has one paywall. When it's taken, agents were recreating an
offering by hand from the old one's shape. The CLI now forks it:
rc paywalls create --offering-id <id> --duplicate-offering (packages +
products copied), or --standalone to attach later.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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