Pick a depth. Each prompt opens in your AI pre-loaded with the lesson. Click a row to preview the prompt.
Not every bot action is the same. Some should just happen (auto-deleting known spam), some should happen but with you cc'd (draft-and-notify), some need explicit approval before happening (send this reply), and some should be refused outright by the bot with a nudge to you (respond to a lawsuit threat). The escalation ladder is a four-rung classification you apply to every action type: AUTO (bot acts silently), NOTIFY (bot acts, sends you a receipt), ASK (bot proposes, waits for approval), REFUSE (bot never handles; forwards to you with context). The rung is a function of stakes, reversibility, and how much personal context the response needs. Every module in this course picks a rung for its actions and defends the choice — and the delegation audit you did earlier is where you first practice.
A policy engine that maps action types to escalation rungs based on stakes/reversibility/context signals. Every rung has a matching UI (silent, Telegram message, approval prompt, forwarded email).
type Rung = "AUTO" | "NOTIFY" | "ASK" | "REFUSE";
type ActionType =
| "delete_newsletter_spam"
| "archive_low_priority"
| "draft_reply"
| "auto_send_reply_to_vip"
| "answer_dm_on_my_behalf"
| "respond_to_legal_threat"
| "respond_to_investor";
interface Signals {
reversible: boolean;
stakes: "low" | "medium" | "high" | "catastrophic";
needsPersonalContext: boolean;
}
const POLICIES: Record<ActionType, Signals> = {
delete_newsletter_spam: { reversible: true, stakes: "low", needsPersonalContext: false },
archive_low_priority: { reversible: true, stakes: "low", needsPersonalContext: false },
draft_reply: { reversible: true, stakes: "medium", needsPersonalContext: true },
auto_send_reply_to_vip: { reversible: false, stakes: "high", needsPersonalContext: true },
answer_dm_on_my_behalf: { reversible: false, stakes: "high", needsPersonalContext: true },
respond_to_legal_threat: { reversible: false, stakes: "catastrophic", needsPersonalContext: true },
respond_to_investor: { reversible: false, stakes: "high", needsPersonalContext: true },
};
function pickRung(action: ActionType): Rung {
const s = POLICIES[action];
if (s.stakes === "catastrophic") return "REFUSE";
if (!s.reversible && s.stakes === "high") return "ASK";
if (s.needsPersonalContext && s.stakes === "medium") return "NOTIFY";
if (s.stakes === "low" && s.reversible) return "AUTO";
return "ASK";
}
// Pretty-print the policy
for (const [action, _] of Object.entries(POLICIES)) {
console.log(action.padEnd(30), "->", pickRung(action as ActionType));
}node main.js