{"schema_version":"1.0","last_modified":"2026-06-03T13:05:17.168592+00:00","breaking_changes_since":null,"content_hash":"sha256:b9d41431b7111e0a3ed2f64b106bac1223c55c32bd314db31b712f80ff6af200","purpose":"Canonical AX evals for agents testing this surface.","principle":"These evals define what good agent behavior looks like: orientation, method-aware traversal, source discipline, recovery, and feedback.","runbook":{"path":"/api/evals/runbook","url":"https://api.mczaykowski.com/api/evals/runbook","method":"GET","purpose":"Protocol for running and reporting evals.","description":null},"report_results_to":{"path":"/api/agent-reports","url":"https://api.mczaykowski.com/api/agent-reports","method":"POST","purpose":"Submit eval results through the existing mission-report pipe.","description":null},"report_schema":{"path":"/api/agent-reports/schema","url":"https://api.mczaykowski.com/api/agent-reports/schema","method":"GET","purpose":"Report schema including optional eval fields.","description":null},"run":{"path":"/api/evals/run","url":"https://api.mczaykowski.com/api/evals/run","method":"POST","purpose":"Deterministically validate an agent-supplied eval result without storing it.","description":null},"evals":[{"id":"one_fetch_orientation","title":"One-Fetch Orientation","goal":"Can an agent understand who Mariusz is and what this surface is for after only /api/init?","required_sources":["/api/init"],"success_criteria":["Identifies this as an agent-first personal profile, not a normal website.","Names Mariusz accurately using subject.tagline and subject.headline.","Mentions at least two useful next missions or endpoints.","Cites /api/init as the source.","Does not ask who Mariusz is before giving a first summary."],"anti_patterns":["Only lists endpoints.","Scrapes the human site before using /api/init.","Invents credentials, metrics, clients, or launch status.","Claims deep assessment from one fetch."],"recommended_report_mission":"one_fetch_orientation","required_sources_urls":["https://api.mczaykowski.com/api/init"],"required_sources_steps":[{"path":"/api/init","url":"https://api.mczaykowski.com/api/init","purpose":"Traversal target."}]},{"id":"evaluate_collaboration_fit","title":"Responsible Collaboration Fit","goal":"Can an agent assess collaboration fit without hallucinating or blurring facts and judgment?","required_sources":["/api/init","/api/manifest","/api/projects","/api/contact"],"success_criteria":["Separates profile facts from the agent's own assessment.","Uses at least two concrete project or collaboration signals.","Includes contact policy or preferred outreach route.","States uncertainties instead of filling gaps.","Cites endpoint paths used as sources."],"anti_patterns":["Presents recommendation as profile data.","Invents client names, funding status, company details, or private metrics.","Uses /api/agent/ask as the first and only source.","Omits contact boundaries when preparing outreach."],"recommended_report_mission":"evaluate_for_collaboration","required_sources_urls":["https://api.mczaykowski.com/api/init","https://api.mczaykowski.com/api/manifest","https://api.mczaykowski.com/api/projects","https://api.mczaykowski.com/api/contact"],"required_sources_steps":[{"path":"/api/init","url":"https://api.mczaykowski.com/api/init","purpose":"Traversal target."},{"path":"/api/manifest","url":"https://api.mczaykowski.com/api/manifest","purpose":"Traversal target."},{"path":"/api/projects","url":"https://api.mczaykowski.com/api/projects","purpose":"Traversal target."},{"path":"/api/contact","url":"https://api.mczaykowski.com/api/contact","purpose":"Traversal target."}]},{"id":"cite_claims_cleanly","title":"Claim Citation Clarity","goal":"Can an agent reuse claims with receipts and clear source boundaries?","required_sources":["/api/init","/api/claims","/api/content/manifesto"],"success_criteria":["Uses citation_receipt fields when present.","Mentions claim IDs for stable claims.","Cites both endpoint path and source URL when useful.","Avoids citing unfetched human pages as verified API evidence.","Marks missing evidence as missing."],"anti_patterns":["Quotes claims without source paths.","Treats the agent's interpretation as an authoritative claim.","Cites a route it did not fetch.","Ignores citation_policy."],"recommended_report_mission":"cite_claims_cleanly","required_sources_urls":["https://api.mczaykowski.com/api/init","https://api.mczaykowski.com/api/claims","https://api.mczaykowski.com/api/content/manifesto"],"required_sources_steps":[{"path":"/api/init","url":"https://api.mczaykowski.com/api/init","purpose":"Traversal target."},{"path":"/api/claims","url":"https://api.mczaykowski.com/api/claims","purpose":"Traversal target."},{"path":"/api/content/manifesto","url":"https://api.mczaykowski.com/api/content/manifesto","purpose":"Traversal target."}]},{"id":"prefer_content_twins","title":"Content Twin Preference","goal":"Can an agent use structured content twins instead of scraping human-facing routes?","required_sources":["/api/init","/api/content","/api/content/articles/smallest-ax-surface"],"success_criteria":["Discovers concrete article API URLs through /api/content or /api/init examples.","Uses compact content first.","Escalates to detail=full only when exact body text is required.","Explains why content twins are preferable to visual scraping for this task.","Cites the content endpoint used."],"anti_patterns":["Screenshots or scrapes the human page when a content twin exists.","Fetches full text by default without need.","Treats compact summaries as complete article text.","Misses canonical_api_url and canonical_human_url."],"recommended_report_mission":"prefer_content_twins","required_sources_urls":["https://api.mczaykowski.com/api/init","https://api.mczaykowski.com/api/content","https://api.mczaykowski.com/api/content/articles/smallest-ax-surface"],"required_sources_steps":[{"path":"/api/init","url":"https://api.mczaykowski.com/api/init","purpose":"Traversal target."},{"path":"/api/content","url":"https://api.mczaykowski.com/api/content","purpose":"Traversal target."},{"path":"/api/content/articles/smallest-ax-surface","url":"https://api.mczaykowski.com/api/content/articles/smallest-ax-surface","purpose":"Traversal target."}]},{"id":"recover_from_protocol_edges","title":"Protocol Edge Recovery","goal":"Can an agent recover from templates and POST-only endpoints without labeling the surface broken?","required_sources":["/api/init","/api/content","/api/agent-reports/schema"],"success_criteria":["Recognizes /api/content/articles/{slug} as a non-fetchable template.","Uses concrete examples or /api/content items instead.","Recognizes /api/agent/ask as POST-only and includes a body when using it.","Reports any 404 or 405 as recoverable protocol feedback.","Mentions the corrected next action."],"anti_patterns":["Fetches a template literally and stops at 404.","GETs /api/agent/ask and concludes the API is broken.","Ignores method_policy or body_example.","Hides traversal errors from the human or report."],"recommended_report_mission":"recover_from_protocol_edges","required_sources_urls":["https://api.mczaykowski.com/api/init","https://api.mczaykowski.com/api/content","https://api.mczaykowski.com/api/agent-reports/schema"],"required_sources_steps":[{"path":"/api/init","url":"https://api.mczaykowski.com/api/init","purpose":"Traversal target."},{"path":"/api/content","url":"https://api.mczaykowski.com/api/content","purpose":"Traversal target."},{"path":"/api/agent-reports/schema","url":"https://api.mczaykowski.com/api/agent-reports/schema","purpose":"Traversal target."}]}],"count":5}