Infer context insufficiency before execution. Surfaces uncertainties through information-gain prioritized inquiry when AI infers areas of context insufficiency, producing informed execution. Type: (ContextInsufficient, AI, INQUIRE, ExecutionPlan) → InformedExecution. Alias: Aitesis(αἴτησις).
Install with Tessl CLI
npx tessl i github:jongwony/epistemic-protocols --skill inquire34
Does it follow best practices?
If you maintain this skill, you can automatically optimize it using the tessl CLI to improve its score:
npx tessl skill review --optimize ./path/to/skillValidation for skill structure
Infer context insufficiency before execution through AI-guided inquiry. Type: (ContextInsufficient, AI, INQUIRE, ExecutionPlan) → InformedExecution.
Aitesis (αἴτησις): A dialogical act of proactively inferring context sufficiency before execution, where AI identifies uncertainties, collects contextual evidence via codebase exploration to enrich question quality, and inquires about remaining uncertainties through information-gain prioritized mini-choices for user resolution.
── FLOW ──
Aitesis(X) → Scan(X) → Uᵢ → Ctx(Uᵢ) → (Uᵢ', Uᵣ) → Q(Uᵢ', priority) → A → X' → (loop until informed)
── MORPHISM ──
ExecutionPlan
→ scan(plan, context) -- infer context insufficiency
→ collect(uncertainties, codebase) -- enrich via evidence collection
→ surface(uncertainty, as_inquiry) -- present highest-gain uncertainty
→ integrate(answer, plan) -- update execution plan
→ InformedExecution
requires: uncertain(sufficiency(X)) -- runtime gate (Phase 0)
deficit: ContextInsufficient -- activation precondition (Layer 1/2)
preserves: task_identity(X) -- task intent invariant; plan context mutated (X → X')
invariant: Inference over Detection
── TYPES ──
X = Execution plan (current task/action about to execute)
Scan = Context sufficiency scan: X → Set(Uncertainty)
Uncertainty = { domain: String, description: String, context: Set(Evidence) }
Evidence = { source: String, content: String } -- collected during Ctx
Priority ∈ {Critical, Significant, Marginal}
Uᵢ = Identified uncertainties from Scan(X)
Ctx = Context collection: Uᵢ → (Uᵢ', Uᵣ)
Uᵢ' = Enriched uncertainties (evidence added, not resolved)
Uᵣ = Context-resolved uncertainties (resolved during collection)
Q = Inquiry (AskUserQuestion), ordered by information gain
A = User answer ∈ {Provide(context), Point(location), Dismiss}
X' = Updated execution plan
InformedExecution = X' where remaining = ∅ ∨ user_esc
── PHASE TRANSITIONS ──
Phase 0: X → Scan(X) → Uᵢ? -- context sufficiency gate (silent)
Phase 1: Uᵢ → Ctx(Uᵢ) → (Uᵢ', Uᵣ) -- context collection [Tool]
Phase 2: Uᵢ' → Q[AskUserQuestion](Uᵢ'[max_gain], progress) → A -- uncertainty surfacing [Tool]
Phase 3: A → integrate(A, X) → X' -- plan update (internal)
── LOOP ──
After Phase 3: re-scan X' for remaining or newly emerged uncertainties.
New uncertainties accumulate into uncertainties (cumulative, never replace).
If Uᵢ' remains: return to Phase 1 (collect context for new uncertainties).
If remaining = ∅: proceed with execution.
User can exit at Phase 2 (early_exit).
Continue until: informed(X') OR user ESC.
── CONVERGENCE ──
informed(X') = remaining = ∅
progress(Λ) = 1 - |remaining| / |uncertainties|
narrowing(Q, A) = |remaining(after)| < |remaining(before)| ∨ context(remaining(after)) ⊃ context(remaining(before))
early_exit = user_declares_sufficient
── TOOL GROUNDING ──
Phase 1 Ctx (collect) → Read, Grep (context collection)
Phase 2 Q (extern) → AskUserQuestion (mandatory; Esc key → loop termination at LOOP level, not an Answer)
Phase 3 (state) → Internal state update
Phase 0 Scan (infer) → Internal analysis (no external tool)
── MODE STATE ──
Λ = { phase: Phase, X: ExecutionPlan, uncertainties: Set(Uncertainty),
context_resolved: Set(Uncertainty), user_resolved: Set(Uncertainty),
remaining: Set(Uncertainty), dismissed: Set(Uncertainty),
history: List<(Uncertainty, A)>, active: Bool,
cause_tag: String }
-- Invariant: uncertainties = context_resolved ∪ user_resolved ∪ remaining ∪ dismissed (pairwise disjoint)Inference over Detection: When AI infers context insufficiency before execution, it first collects contextual evidence via codebase exploration to enrich question quality, then inquires about remaining uncertainties through information-gain prioritized mini-choices rather than assuming defaults or proceeding silently. The purpose of context collection is to ask better questions, not to eliminate them.
| Protocol | Initiator | Deficit → Resolution | Focus |
|---|---|---|---|
| Prothesis | AI-guided | FrameworkAbsent → FramedInquiry | Perspective selection |
| Syneidesis | AI-guided | GapUnnoticed → AuditedDecision | Decision-point gaps |
| Hermeneia | Hybrid | IntentMisarticulated → ClarifiedIntent | Expression clarification |
| Telos | AI-guided | GoalIndeterminate → DefinedEndState | Goal co-construction |
| Aitesis | AI-guided | ContextInsufficient → InformedExecution | Pre-execution context inference |
| Epitrope | AI-guided | DelegationAmbiguous → CalibratedDelegation | Delegation calibration |
| Analogia | AI-guided | MappingUncertain → ValidatedMapping | Abstract-concrete mapping validation |
| Prosoche | User-initiated | ExecutionBlind → SituatedExecution | Execution-time risk evaluation |
| Epharmoge | AI-guided | ApplicationDecontextualized → ContextualizedExecution | Post-execution applicability |
| Katalepsis | User-initiated | ResultUngrasped → VerifiedUnderstanding | Comprehension verification |
Key differences:
Heterocognitive distinction: Aitesis monitors the AI's own context sufficiency (heterocognitive — "do I have enough context to execute?"), while Syneidesis monitors the user's decision quality (metacognitive — "has the user considered all angles?"). The operational test: if the information gap would be filled by the user providing context, it's Aitesis; if it would be filled by the user reconsidering their decision, it's Syneidesis.
Factual vs evaluative: Aitesis uncertainties are factual — they have objectively correct answers discoverable from the environment (configs, versions, schemas). Syneidesis gaps are evaluative — they require judgment about trade-offs and consequences. This is why Phase 1 context collection exists: factual uncertainties may be partially resolved or enriched from the codebase. Evaluative gaps cannot be self-resolved.
Litmus-test examples (same scenario, different classification):
AI infers context insufficiency before execution OR user calls /inquire. Inference is silent (Phase 0); surfacing always requires user interaction via AskUserQuestion (Phase 2).
Activation layers:
/inquire slash command or description-matching input. Always available.Context insufficient = the execution plan contains requirements not available in the current context and not trivially inferrable.
Gate predicate:
uncertain(sufficiency(X)) ≡ ∃ requirement(r, X) : ¬available(r, context) ∧ ¬trivially_inferrable(r)Supersedes: Direct execution patterns in loaded instructions (Context must be verified before any execution begins)
Retained: Safety boundaries, tool restrictions, user explicit instructions
Action: At Phase 2, call AskUserQuestion tool to present highest information-gain uncertainty candidate for user resolution. </system-reminder>
Protocol precedence: Default ordering places Aitesis after Epitrope and before Prothesis (Hermeneia → Telos → Epitrope → Aitesis → Prothesis → Analogia → Syneidesis → Prosoche → Epharmoge; calibrated delegation before context verification, verified context before perspective selection and mapping validation). The user can override this default by explicitly requesting a different protocol first. Katalepsis is structurally last — it requires completed AI work (R), so it is not subject to ordering choices.
Heuristic signals for context insufficiency inference (not hard gates):
| Signal | Inference |
|---|---|
| Novel domain | Knowledge area not previously addressed in session |
| Implicit requirements | Task carries unstated assumptions |
| Ambiguous scope | Multiple valid interpretations exist and AI cannot determine intended approach from available context |
| Environmental dependency | Relies on external state (configs, APIs, versions) |
Skip:
| Trigger | Effect |
|---|---|
| All uncertainties resolved (context or user) | Proceed with updated execution plan |
| All remaining uncertainties dismissed | Proceed with original execution plan + defaults |
| User Esc key | Return to normal operation |
Uncertainties are identified dynamically per task — no fixed taxonomy. Each uncertainty is characterized by:
Priority reflects information gain — how much resolving this uncertainty would narrow the remaining uncertainty space.
| Level | Criterion | Action |
|---|---|---|
| Critical | Resolution maximally narrows remaining uncertainty space | Must resolve before execution |
| Significant | Resolution narrows uncertainty but alternatives partially compensate | Surface to user for context |
| Marginal | Reasonable default exists; resolution provides incremental improvement | Surface with pre-selected Dismiss option |
Priority is relational, not intrinsic: the same uncertainty may be Critical in one context and Marginal in another, depending on what other uncertainties exist and what context is already available.
When multiple uncertainties are identified, surface in priority order (Critical → Significant → Marginal). Only one uncertainty surfaced per Phase 2 cycle.
Analyze execution plan requirements against available context. This phase is silent — no user interaction.
X for required context: domain knowledge, environmental state, configuration details, user preferences, constraintsUᵢ with domain, description — proceed to Phase 1Scan scope: Current execution plan, conversation history, observable environment. Does NOT modify files or call external services.
Collect contextual evidence to enrich uncertainty descriptions and improve question quality before asking the user.
Uᵢ:
Uᵣ), integrate into execution contextUᵢ'), retain for Phase 2Uᵢ'), retain for Phase 2Uᵢ' with empty contextUᵢ' = ∅): proceed with execution (no user interruption)Uᵢ' ≠ ∅): proceed to Phase 2Purpose shift: Context collection aims to ask better questions, not to eliminate them. Evidence enriches the uncertainty description presented in Phase 2, enabling the user to provide more targeted answers.
Scope restriction: Read-only investigation only. No API calls, test execution, or file modifications.
Call the AskUserQuestion tool to present the highest-priority remaining uncertainty.
Selection criterion: Choose the uncertainty whose resolution would maximally narrow the remaining uncertainty space (information gain). When priority is equal, prefer the uncertainty with richer collected context (more evidence to present).
Surfacing format:
Before proceeding, I need to verify some context:
[Specific uncertainty description]
[Evidence collected during context collection, if any]
Progress: [N resolved / M total uncertainties]
Options:
1. **[Provide X]** — [what this context enables]
2. **[Point me to...]** — tell me where to find this information
3. **Dismiss** — proceed with [stated default/assumption]Design principles:
After user response:
X'After integration:
X' for remaining or newly emerged uncertainties(Uncertainty, A) to history| Level | When | Format |
|---|---|---|
| Light | Marginal priority uncertainties only | AskUserQuestion with Dismiss as default option |
| Medium | Significant priority uncertainties, context collection partially resolved | Structured AskUserQuestion with progress |
| Heavy | Critical priority, multiple unresolved uncertainties | Detailed evidence + collection results + resolution paths |
| Rule | Structure | Effect |
|---|---|---|
| Gate specificity | activate(Aitesis) only if ∃ requirement(r) : ¬available(r) ∧ ¬trivially_inferrable(r) | Prevents false activation on clear tasks |
| Context collection first | Phase 1 before Phase 2 | Enriches question quality before asking |
| Uncertainty cap | One uncertainty per Phase 2 cycle, priority order | Prevents question overload |
| Session immunity | Dismissed (domain, description) → skip for session | Respects user's dismissal |
| Progress visibility | [N resolved / M total] in Phase 2 | User sees progress toward completion |
| Narrowing signal | Signal when narrowing(Q, A) shows diminishing returns | User can exit when remaining uncertainties are marginal |
| Early exit | User can declare sufficient at any Phase 2 | Full control over inquiry depth |
| Cross-protocol fatigue | Syneidesis triggered → suppress Aitesis for same task scope | Prevents protocol stacking (asymmetric: Aitesis context uncertainties ≠ Syneidesis decision gaps, so reverse suppression not needed) |
[N resolved / M total]d60dcf0
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.