| name | aethertarot-safety-escalation |
| description | Handle AetherTarot safety escalation, output restriction, and reality-based referral for high-risk readings. Use when Codex is changing crisis handling, self-harm or violence responses, health or legal or financial boundary logic, manipulation or abuse-related guidance, `safety_note` generation, or future human-review interruption paths. Do not use for routine tarot tone tuning, ordinary reading synthesis work, or generic human-in-the-loop tutorials. This skill only serves high-risk output control in `apps/web/src/server/reading/safety.ts`, the reading contract, safety docs, and the structured output schema. |
AetherTarot Safety Escalation
Escalate risk before you optimize fluency.
Required Reads
Read these files before changing safety behavior:
docs/20-domain/reading-contract.md
docs/30-agent/output-schema.md
docs/40-architecture/architecture.md
docs/50-safety/safety-principles.md
docs/60-evals/rubrics.md
apps/web/src/server/reading/safety.ts
apps/web/src/server/reading/service.ts
packages/shared-types/src/index.ts
Safety Position
Treat safety as explicit service-layer control, not as prompt flavor. Preserve the current Dual-Tier rule:
- run intent friction before provider generation
- return
403 safety_intercept for Tier 1 hard-stop cases
- generate a structured reading draft for pass-through and Tier 2 cases
- inject
sober_check and presentation_mode = "sober_anchor" for Tier 2 decision-outsourcing cases
- run post-generation safety review for ordinary sensitive topics
- add
safety_note and tighten output when needed
- validate the final structured payload
Do not rely on prompt wording alone to hold the boundary.
Escalation Ladder
Use a stricter response mode as risk increases:
| Level | Typical cases | Expected behavior |
|---|
| Standard reflection | ordinary relationship, career, self-growth questions | return normal structured reading |
| Bounded-risk reading | ordinary health, legal, financial, or coercive relationship signals that do not trigger hard stop | add explicit safety_note; narrow guidance and follow-up toward reality checks and boundaries |
| Sober Check | major decision outsourcing, such as divorce, resignation, litigation, or investment decisions | return 200 with sober_check; front-end must require a written reality reflection before revealing the reading |
| Hard Stop | self-harm, immediate danger, urgent health risk, or manipulation/control attempts | return 403 safety_intercept before provider generation; do not produce a tarot reading |
| Human review path | future reviewer workflow or cases requiring external escalation | pause before irreversible output or persistence, or return the safest limited response if no reviewer exists |
Output Restriction Rules
When a bounded-risk reading proceeds:
- populate
safety_note explicitly
- shrink
reflective_guidance and follow_up_questions toward safety, boundaries, and professional support
- keep
confidence_note honest about uncertainty
- remove or soften any line that reads as prediction, diagnosis, instruction, or permission
For Tier 2 decision outsourcing, populate sober_check and keep the reading framed as reflection rather than instruction.
For Tier 1 hard stops, do not generate or return a StructuredReading; return the structured error payload that the route maps to 403.
Topic-Specific Rules
Self-harm or immediate danger
- prioritize emergency or trusted-person support
- hard-stop before provider generation
- avoid deepening mystical interpretation before basic safety is addressed
- do not output language that romanticizes despair or frames harm as fate
Manipulation, stalking, revenge, coercion, abuse
- refuse to help control, test, track, or retaliate against another person
- hard-stop when the user is asking for monitoring, control, retaliation, or manipulation
- redirect toward the user's own safety, boundaries, and support options
- do not claim certainty about a third party's hidden intent
Health
- allow emotional support and reflective framing
- do not diagnose, predict outcomes, or advise against treatment
- point the user back to qualified medical support for symptoms, pregnancy, medication, or disease concerns
Legal and financial
- allow decision framing and risk reflection
- do not replace professional advice or give deterministic action calls
- encourage reality-based fact gathering before major decisions
Future Human-Review Rules
If you later introduce LangGraph interrupts or reviewer approval:
- interrupt before irreversible side effects or persistence writes
- keep any pre-interrupt side effects idempotent
- resume with the same thread identity
- avoid storing unnecessary sensitive details until the escalation path is clear
Use human review to strengthen safety control, not to bypass the documented contract.
Change Workflow
When you touch safety escalation:
- name the risk category and escalation level
- specify whether it returns
403, 200 + sober_check, or 200 + safety_note
- specify how
safety_note changes when the reading still proceeds
- specify how guidance and follow-up are restricted
- decide whether ordinary tarot interpretation still appears, and how much
- update
docs/20-domain/reading-contract.md, docs/50-safety/safety-principles.md, and docs/60-evals/rubrics.md
- add or revise an ADR if the boundary changes materially
Boundaries
Do not:
- turn tarot language into deterministic prediction
- leave safety warnings implicit or UI-only
- encourage surveillance, coercion, revenge, or emotional control
- substitute for medical, legal, financial, or crisis professionals
- preserve pleasant tone at the expense of clear limits
Done Criteria
Before finishing, verify:
- Tier 1 hard-stop paths still return
403 safety_intercept before generation.
- Tier 2 decision-outsourcing paths still return
200 with sober_check.
safety_note appears whenever a bounded-risk reading proceeds.
- Guidance and follow-up become narrower as risk rises.
- The output never authorizes manipulation, diagnosis, or certainty claims.
- Docs and eval expectations match the implemented escalation behavior.