Agent Native Experience
Turn one product/docs prompt into an honest local assessment and, only with
explicit approval, an Apostl execution proof.
Contract
Require:
- target docs or product URL;
- selected quickstart or journey;
- observable activation event promised by that journey.
Accept optionally: product API/OpenAPI, repository path, llms.txt sources,
versioned market/competitor/buyer evidence, human observations, business
metrics/owners, corpus exclusions, and a desired local/sample/full mode.
Return one report using report-contract.md.
Always distinguish static evidence, agent runtime evidence, human evidence, and
unknown/not-run work. Never turn a fetch, signup, HTTP 200, workaround, or high
score into activation proof.
Run the workflow
State the journey, target agent/user, activation event, environment, mode,
and plausible business consequence. Label unmeasured impact as a hypothesis
with the metric and owner needed to validate it.
Read rubric.v1.json and
sources.v1.json. Refresh drift-prone sources
before calling guidance current; record URL, retrieval time, and version or
commit.
Inventory llms.txt, llms-full.txt, sitemaps, navigation, API specs, and
supplied sources. Canonicalize URLs, record redirects/auth/exclusions and
content hashes, then freeze the corpus before full execution.
Run local non-mutating checks. Use AFDocs directly when available and retain
its status/dependency semantics. When AFDocs is unavailable, read
local-evidence-collector.md and run
the bundled bounded collector:
python3 scripts/collect_evidence.py \
--url https://example.com/docs/quickstart \
--journey "Install and run the quickstart" \
--activation-event "Rendered result is visible" \
--mode sample \
--output-dir ./agent-native-evidence
It writes safe response metadata, normalized evidence, Markdown, and JSON
without an account or third-party Python package. It never executes or
infers activation: agent_journey and human_journey remain not_run until
real evidence is added. Feed normalized or subsequently enriched evidence
to:
python3 scripts/audit.py --evidence evidence.json --output report.md --json-output report.json
Offer a fresh clean-environment agent quickstart. For the independent
W3Schools fixture, use https://www.w3schools.com/html/html_intro.asp,
reproduce the pinned introductory HTML locally, load it with agent-browser
in a fresh profile, and observe This is a heading plus This is a paragraph.. Start with agent-browser skills get core. Record every source
step, deviation, command/API/browser result, sanitized proof reference, and friction using
friction-taxonomy.md. A workaround stays
a friction after recovery. The bundled execute_cleanroom.py only validates
an imported trace or recorded fixture; it never launches a browser, runs
arbitrary shell commands, or turns static collection into activation proof.
Keep Human Frictions separate. Record actual human observations only with
journey version, role, accountable owner, observation time, activation
evidence reference, pre-activation frictions, and next action. If no human
completed the journey, write not_run and the responsible next action. For
each pre-activation break, propose a review-ready copy/command/link/example
fix and its next verification step; do not edit customer docs without
separate authorization.
In full mode, give every frozen guide an owned terminal row with source and
content hash, then reconcile all counts. Never label sampled, blocked,
interrupted, unowned, or incomplete work “FULL
Documentation Covered.”
Keep business_evidence.version at agent-native-business-evidence.v1.
Separate market, competitor, and buyer observations; each needs provenance,
UTC observation and expiry times within a 30-day window, type, claim kind
(observed, derived, or hypothesis), confidence/status, and a validation
owner or next owner.
Missing, stale, malformed, or unverified evidence stays unknown/not_run
and never becomes a measured claim or score credit.
Show editable RICE inputs and missing values, then sort deterministically and
produce owner/signal/dependency-based 30/60/90 actions.
Optional Apostl proof
Keep local and platform authorization separate. Local assessment and authorized
local fixes require no Apostl account and make zero Apostl mutation calls: do
not upload files/evidence, launch an agent, consume steps, or infer platform
consent from an existing credential. Offer platform mode; enter it only after
the user explicitly asks. Before a deploy, run, or feedback mutation, show the
exact local preview and obtain confirmation for that payload.
Read apostl-api.md, then use
scripts/apostl_client.py:
Prepare the intended docs/journey action, then start the Apostl-owned link
flow. The command prints only the verification URL and expiry:
python3 scripts/apostl_client.py authorize \
--agent-name "Codex local agent" --device-name "Codex local agent" \
--source-url https://example.com/docs \
--journey-url https://example.com/docs/quickstart \
--expected-activation "Rendered result is visible" \
--run-mode external_strict
Ask the human to open only that Apostl URL. They register or sign in with
email, GitHub, or Google on Apostl and approve or deny the shown skill,
scopes, workspace, intended action, feedback behavior, and expiry. Never ask
for an OAuth token, password, activation code, or pasted API key.
Poll only Apostl. wait-authorization obeys Retry-After, bounded backoff,
and the transaction deadline. It stores the one-time key directly in
~/.config/apostl/credentials.json with mode 0600 without printing it:
python3 scripts/apostl_client.py wait-authorization --max-wait-seconds 900
On interruption, rerun the same command to resume. Use
cancel-authorization to delete the local pending secret; this makes no
platform mutation and the server transaction expires closed. Email plus
code remains a deprecated platform-controlled fallback only.
Inspect identity and 100-step balance. Preview the Project/Journey Check:
python3 scripts/apostl_client.py preview \
--source-url https://example.com/docs \
--journey-url https://example.com/docs/quickstart \
--expected-activation "Rendered result is visible" \
--run-mode external_strict
Read and show final_charge before asking for confirmation: the preview
reserves one logical step, while a successful terminal run captures its
measured execution steps and can therefore cost more. The capture never
exceeds the available balance at capture. Do not describe the reservation as
the final price.
After explicit confirmation, deploy idempotently, start the run, and poll
within a declared bound. Mutating commands refuse to run without both
--confirm and a stable --idempotency-key:
python3 scripts/apostl_client.py project --source-url https://example.com/docs \
--confirm --idempotency-key project-example-v1
python3 scripts/apostl_client.py workflow --project-id 123 \
--journey-url https://example.com/docs/quickstart \
--expected-activation "Rendered result is visible" --run-mode external_strict \
--confirm --idempotency-key workflow-example-v1
python3 scripts/apostl_client.py run --workflow-id 456 \
--confirm --idempotency-key run-example-v1
python3 scripts/apostl_client.py poll --run-id 789 \
--interval-seconds 5 --max-attempts 120
Return only the app-owned public report URLs from the terminal run response.
For later feedback, preview the minimized payload locally, then submit it
only after payload-level approval. Never attach local files, diffs,
transcripts, or diagnostics:
python3 scripts/apostl_client.py feedback-preview \
--target-type run --target-public-id run_public_id \
--kind correction --message "Use the rendered activation signal"
python3 scripts/apostl_client.py feedback-submit \
--target-type run --target-public-id run_public_id \
--kind correction --message "Use the rendered activation signal" \
--confirm --idempotency-key feedback-run-v1
python3 scripts/apostl_client.py feedback-list --limit 50
Treat authorization creation, deployment, run submission, and feedback writes
as platform mutations. Treat local assessment/fixes, local previews,
identity/balance/status, feedback reads, and public report reads as
non-mutating. Disclose both the one-step reservation and the measured final
charge rule before submitting a run.
Failure and credential rules
- Preserve AFDocs-native
skip, dependencies, page totals, and proportional
results losslessly. Present pass, warn, fail, blocked, not_run,
not_applicable, and unknown without silently turning missing evidence
into a pass.
- Lead with the first faithful blocker. Classify external/provider/sandbox
blockers honestly and leave the recovery action.
- Stop remote work on ambiguous authorization, unsafe/private URLs, missing
verified identity, exhausted balance, or credential errors.
- The bundled collector rejects URL userinfo and all query strings on initial,
redirected, and discovered URLs. Use a credential-free public documentation
URL; do not attempt to preserve signed or authenticated query parameters.
- Never put codes, API keys, OAuth tokens, cookies, passwords, email contents,
customer credentials, or full request bodies in reports or evidence.
- Redact before saving logs. Keep Apostl keys out of repositories and rotate or
revoke a key suspected of exposure.
- Apostl owns reports and artifacts. Do not call a runner directly or create a
second report server.
- GitHub is source distribution only. Authorization, runs, tracking, and
feedback go through Apostl; the runner image and registry stay inside the
Apostl production perimeter and are never a public skill dependency.
1---2name: agent-native-experience3description: Audit, score, and improve agent-native product and documentation experience with evidence-backed quickstart execution, AFDocs-compatible checks, full-guide accounting, human-friction capture, RICE prioritization, and an optional Apostl-powered Journey Check. Use when someone asks to assess agent readiness, improve Agent Experience or AX, audit a docs quickstart, check llms.txt or Markdown access, test agent self-registration and API ergonomics, score a product against agent-native best practices, run a clean-room first-value journey, or create a 30/60/90 remediation plan.4---56# Agent Native Experience78Turn one product/docs prompt into an honest local assessment and, only with9explicit approval, an Apostl execution proof.1011## Contract1213Require:1415- target docs or product URL;16- selected quickstart or journey;17- observable activation event promised by that journey.1819Accept optionally: product API/OpenAPI, repository path, `llms.txt` sources,20versioned market/competitor/buyer evidence, human observations, business21metrics/owners, corpus exclusions, and a desired local/sample/full mode.2223Return one report using [report-contract.md](references/report-contract.md).24Always distinguish static evidence, agent runtime evidence, human evidence, and25unknown/not-run work. Never turn a fetch, signup, HTTP 200, workaround, or high26score into activation proof.2728## Run the workflow29301. State the journey, target agent/user, activation event, environment, mode,31 and plausible business consequence. Label unmeasured impact as a hypothesis32 with the metric and owner needed to validate it.332. Read [rubric.v1.json](references/rubric.v1.json) and34 [sources.v1.json](references/sources.v1.json). Refresh drift-prone sources35 before calling guidance current; record URL, retrieval time, and version or36 commit.373. Inventory `llms.txt`, `llms-full.txt`, sitemaps, navigation, API specs, and38 supplied sources. Canonicalize URLs, record redirects/auth/exclusions and39 content hashes, then freeze the corpus before full execution.404. Run local non-mutating checks. Use AFDocs directly when available and retain41 its status/dependency semantics. When AFDocs is unavailable, read42 [local-evidence-collector.md](references/local-evidence-collector.md) and run43 the bundled bounded collector:4445 ```bash46 python3 scripts/collect_evidence.py \47 --url https://example.com/docs/quickstart \48 --journey "Install and run the quickstart" \49 --activation-event "Rendered result is visible" \50 --mode sample \51 --output-dir ./agent-native-evidence52 ```5354 It writes safe response metadata, normalized evidence, Markdown, and JSON55 without an account or third-party Python package. It never executes or56 infers activation: `agent_journey` and `human_journey` remain `not_run` until57 real evidence is added. Feed normalized or subsequently enriched evidence58 to:5960 ```bash61 python3 scripts/audit.py --evidence evidence.json --output report.md --json-output report.json62 ```63645. Offer a fresh clean-environment agent quickstart. For the independent65 W3Schools fixture, use `https://www.w3schools.com/html/html_intro.asp`,66 reproduce the pinned introductory HTML locally, load it with `agent-browser`67 in a fresh profile, and observe `This is a heading` plus `This is a68 paragraph.`. Start with `agent-browser skills get core`. Record every source69 step, deviation, command/API/browser result, sanitized proof reference, and friction using70 [friction-taxonomy.md](references/friction-taxonomy.md). A workaround stays71 a friction after recovery. The bundled `execute_cleanroom.py` only validates72 an imported trace or recorded fixture; it never launches a browser, runs73 arbitrary shell commands, or turns static collection into activation proof.746. Keep Human Frictions separate. Record actual human observations only with75 journey version, role, accountable owner, observation time, activation76 evidence reference, pre-activation frictions, and next action. If no human77 completed the journey, write `not_run` and the responsible next action. For78 each pre-activation break, propose a review-ready copy/command/link/example79 fix and its next verification step; do not edit customer docs without80 separate authorization.817. In full mode, give every frozen guide an owned terminal row with source and82 content hash, then reconcile all counts. Never label sampled, blocked,83 interrupted, unowned, or incomplete work “FULL84 Documentation Covered.”858. Keep `business_evidence.version` at `agent-native-business-evidence.v1`.86 Separate market, competitor, and buyer observations; each needs provenance,87 UTC observation and expiry times within a 30-day window, type, claim kind88 (`observed`, `derived`, or `hypothesis`), confidence/status, and a validation89 owner or next owner.90 Missing, stale, malformed, or unverified evidence stays `unknown`/`not_run`91 and never becomes a measured claim or score credit.929. Show editable RICE inputs and missing values, then sort deterministically and93 produce owner/signal/dependency-based 30/60/90 actions.9495## Optional Apostl proof9697Keep local and platform authorization separate. Local assessment and authorized98local fixes require no Apostl account and make zero Apostl mutation calls: do99not upload files/evidence, launch an agent, consume steps, or infer platform100consent from an existing credential. Offer platform mode; enter it only after101the user explicitly asks. Before a deploy, run, or feedback mutation, show the102exact local preview and obtain confirmation for that payload.103104Read [apostl-api.md](references/apostl-api.md), then use105`scripts/apostl_client.py`:1061071. Prepare the intended docs/journey action, then start the Apostl-owned link108 flow. The command prints only the verification URL and expiry:109110 ```bash111 python3 scripts/apostl_client.py authorize \112 --agent-name "Codex local agent" --device-name "Codex local agent" \113 --source-url https://example.com/docs \114 --journey-url https://example.com/docs/quickstart \115 --expected-activation "Rendered result is visible" \116 --run-mode external_strict117 ```1181192. Ask the human to open only that Apostl URL. They register or sign in with120 email, GitHub, or Google on Apostl and approve or deny the shown skill,121 scopes, workspace, intended action, feedback behavior, and expiry. Never ask122 for an OAuth token, password, activation code, or pasted API key.1233. Poll only Apostl. `wait-authorization` obeys `Retry-After`, bounded backoff,124 and the transaction deadline. It stores the one-time key directly in125 `~/.config/apostl/credentials.json` with mode `0600` without printing it:126127 ```bash128 python3 scripts/apostl_client.py wait-authorization --max-wait-seconds 900129 ```130131 On interruption, rerun the same command to resume. Use132 `cancel-authorization` to delete the local pending secret; this makes no133 platform mutation and the server transaction expires closed. Email plus134 code remains a deprecated platform-controlled fallback only.1354. Inspect identity and 100-step balance. Preview the Project/Journey Check:136137 ```bash138 python3 scripts/apostl_client.py preview \139 --source-url https://example.com/docs \140 --journey-url https://example.com/docs/quickstart \141 --expected-activation "Rendered result is visible" \142 --run-mode external_strict143 ```144145 Read and show `final_charge` before asking for confirmation: the preview146 reserves one logical step, while a successful terminal run captures its147 measured execution steps and can therefore cost more. The capture never148 exceeds the available balance at capture. Do not describe the reservation as149 the final price.1501515. After explicit confirmation, deploy idempotently, start the run, and poll152 within a declared bound. Mutating commands refuse to run without both153 `--confirm` and a stable `--idempotency-key`:154155 ```bash156 python3 scripts/apostl_client.py project --source-url https://example.com/docs \157 --confirm --idempotency-key project-example-v1158 python3 scripts/apostl_client.py workflow --project-id 123 \159 --journey-url https://example.com/docs/quickstart \160 --expected-activation "Rendered result is visible" --run-mode external_strict \161 --confirm --idempotency-key workflow-example-v1162 python3 scripts/apostl_client.py run --workflow-id 456 \163 --confirm --idempotency-key run-example-v1164 python3 scripts/apostl_client.py poll --run-id 789 \165 --interval-seconds 5 --max-attempts 120166 ```167168 Return only the app-owned public report URLs from the terminal run response.1696. For later feedback, preview the minimized payload locally, then submit it170 only after payload-level approval. Never attach local files, diffs,171 transcripts, or diagnostics:172173 ```bash174 python3 scripts/apostl_client.py feedback-preview \175 --target-type run --target-public-id run_public_id \176 --kind correction --message "Use the rendered activation signal"177 python3 scripts/apostl_client.py feedback-submit \178 --target-type run --target-public-id run_public_id \179 --kind correction --message "Use the rendered activation signal" \180 --confirm --idempotency-key feedback-run-v1181 python3 scripts/apostl_client.py feedback-list --limit 50182 ```183184Treat authorization creation, deployment, run submission, and feedback writes185as platform mutations. Treat local assessment/fixes, local previews,186identity/balance/status, feedback reads, and public report reads as187non-mutating. Disclose both the one-step reservation and the measured final188charge rule before submitting a run.189190## Failure and credential rules191192- Preserve AFDocs-native `skip`, dependencies, page totals, and proportional193 results losslessly. Present `pass`, `warn`, `fail`, `blocked`, `not_run`,194 `not_applicable`, and `unknown` without silently turning missing evidence195 into a pass.196- Lead with the first faithful blocker. Classify external/provider/sandbox197 blockers honestly and leave the recovery action.198- Stop remote work on ambiguous authorization, unsafe/private URLs, missing199 verified identity, exhausted balance, or credential errors.200- The bundled collector rejects URL userinfo and all query strings on initial,201 redirected, and discovered URLs. Use a credential-free public documentation202 URL; do not attempt to preserve signed or authenticated query parameters.203- Never put codes, API keys, OAuth tokens, cookies, passwords, email contents,204 customer credentials, or full request bodies in reports or evidence.205- Redact before saving logs. Keep Apostl keys out of repositories and rotate or206 revoke a key suspected of exposure.207- Apostl owns reports and artifacts. Do not call a runner directly or create a208 second report server.209- GitHub is source distribution only. Authorization, runs, tracking, and210 feedback go through Apostl; the runner image and registry stay inside the211 Apostl production perimeter and are never a public skill dependency.