Skip to content

Human Development

human_development -- deskilling prevention & human skill development

Cluster: Experience & Autonomy | Type: component | MCP Tools: 28

Overview

Deskilling prevention and human skill development component that tracks operator competence across domains using a Zone of Proximal Development (ZPD) phase model (Novice → Expert), detects automation bias from consecutive AI-agreement patterns, and generates Socratic metacognitive prompts calibrated to the current skill phase. Persists skill profiles to disk and supports hot-swapping profiles at runtime.

When to use:

  • Monitoring whether a human operator is becoming over-reliant on AI recommendations (automation bias detection)
  • Generating predict/reflect/justify/challenge prompts that keep the operator's skills active at their development edge
  • Tracking skill phase transitions across task domains to inform autonomy governor escalation policy

Launch readiness caveat

human_development is pilot-ready for local MCP workflows and design-partner use. It now uses durable local SQLite state for the MCP server by default, requires a real profile before recording domain outcomes, and can restore saved sessions. Treat it as a single-user/local pilot component rather than hardened enterprise infrastructure: multi-user isolation, database migrations/versioning, backup/retention policy, and phase-threshold calibration from real pilot data still need deployment-level validation before regulated, paid team, or unattended production use.

Example:

from mvp.human_development import HumanDevelopmentBlock, HumanDevelopmentInput

block = HumanDevelopmentBlock(name="hdev")
block.infer(HumanDevelopmentInput(op="record_outcome", domain="diagnosis", task_outcome=True, human_agreed_with_ai=True))
result = block.infer(HumanDevelopmentInput(op="get_prompt", domain="diagnosis"))
# result.ok → True; result.value → HumanDevelopmentOutput with metacognitive_prompt, prompt_type

Works well with: hat_orchestrator, autonomy_governor, experience_loop

Public API

HumanDevelopmentBlock(AIBlock[HumanDevelopmentInput, HumanDevelopmentOutput, SkillProfile])

Deskilling prevention block.

Field Type Default
name str 'human_development'
deskilling_enabled bool field(default_factory=_read_deskilling_default)

Methods:

infer(data: HumanDevelopmentInput) -> Result[HumanDevelopmentOutput]

list_patterns() -> dict[str, object]

Return the applied deterministic-reliability pattern catalog.

SkillPhase(IntEnum)

Human skill development phases (Zone of Proximal Development).

SkillDomain(BaseModel)

Skill tracking for a single domain.

Field Type Default
name str required
task_count int 0
success_count int 0
consecutive_agrees int 0
phase SkillPhase SkillPhase.NOVICE

SkillProfile(BaseModel)

Mutable skill profile for a user (state object).

Field Type Default
user_id str 'default'
domains dict[str, SkillDomain] Field(default_factory=dict)
global_phase SkillPhase SkillPhase.NOVICE
total_tasks int 0
last_updated str ''

MetacognitivePrompt(BaseModel)

A prompt designed to develop metacognitive skills.

Field Type Default
prompt_text str required
prompt_type Literal['predict', 'reflect', 'justify', 'challenge'] required
options list[str] Field(default_factory=list)

HumanDevelopmentInput(BaseModel)

Input for the HumanDevelopmentBlock.

Field Type Default
op Literal['assess', 'record_outcome', 'check_bias', 'get_prompt', 'load_profile', 'save_profile', 'ops', 'help'] required
domain str ''
goal str ''
task_outcome bool False
human_agreed_with_ai bool False
human_prediction str ''
human_confidence float 0.0
profile_path str ''
workspace_root str ''

HumanDevelopmentOutput(BaseModel)

Output from the HumanDevelopmentBlock.

Field Type Default
op str required
skill_phase str ''
metacognitive_prompt str ''
prompt_type str ''
prompt_options list[str] Field(default_factory=list)
automation_bias_detected bool False
is_challenge bool False
phase_changed bool False
message str ''
degraded bool False
degradation_reason str \| None None
completion_state Literal['verified', 'qualified-draft', 'blocked-escalated'] 'qualified-draft'
warning_card dict[str, object] Field(default_factory=dict)
evidence dict[str, object] Field(default_factory=dict)
request_id str ''
task_id str ''
run_id str ''
confidence float 0.0
data_sufficient bool False
calibration_status Literal['pending', 'calibrated'] 'pending'
review_required bool False

DevelopmentMCPBlock(AIBlock[MCPDevelopmentInput, MCPDevelopmentOutput, dict])

25-op MCP block for Human Development tracking.

Field Type Default
name str 'development_mcp'
state dict \| None None
db_path str ''

Methods:

close() -> None

infer(data: MCPDevelopmentInput) -> Result[MCPDevelopmentOutput]

MCPDevelopmentInput(BaseModel)

Field Type Default
op DevelopmentOp required
profile_id str \| None None
user_id str \| None None
domain str \| None None
goal str \| None None
task_outcome bool \| None None
human_agreed_with_ai bool \| None None
deskilling_enabled bool \| None None
outcomes_json str \| None None
profile_ids_json str \| None None
session_id str \| None None
session_name str \| None None
limit int \| None None
query str \| None None

MCPDevelopmentOutput(BaseModel)

Field Type Default
ok bool required
message str required
data_json str \| None None
degraded bool False
degradation_reason str \| None None
completion_state Literal['verified', 'qualified-draft', 'blocked-escalated'] 'qualified-draft'
warning_card dict[str, object] Field(default_factory=dict)
evidence dict[str, object] Field(default_factory=dict)
request_id str ''
task_id str ''
run_id str ''

DevelopmentStore

5-table SQLite store for Human Development tracking.

Constructor:

Parameter Type Default
db_path str ':memory:'

Methods:

create_profile(user_id: str = 'default') -> dict

get_profile(profile_id: str) -> dict | None

list_profiles(limit: int = 50) -> list[dict]

update_profile(profile_id: str, **kwargs) -> bool

close() -> None

Close the underlying SQLite connection.

delete_profile(profile_id: str) -> bool

get_domain(profile_id: str, domain_name: str) -> dict | None

get_or_create_domain(profile_id: str, domain_name: str) -> dict

list_domains(profile_id: str, limit: int = 50) -> list[dict]

update_domain(profile_id: str, domain_name: str, **kwargs) -> bool

reset_domain(profile_id: str, domain_name: str) -> bool

record_outcome(profile_id: str, domain_name: str, task_outcome: bool = False, human_agreed_with_ai: bool = False, phase_before: int = 0, phase_after: int = 0) -> dict

list_outcomes(profile_id: str, domain_name: str | None = None, limit: int = 100) -> list[dict]

record_phase_change(profile_id: str, domain_name: str, old_phase: int, new_phase: int, reason: str = '') -> dict

list_phase_history(profile_id: str, domain_name: str | None = None, limit: int = 100) -> list[dict]

get_domain_stats(profile_id: str, domain_name: str) -> dict

save_session(session_id: str | None = None, name: str = '', data_json: str = '{}') -> dict

load_session(session_id: str) -> dict | None

export_session_data() -> dict

Export restorable development state for session checkpoints.

import_session_data(data: dict) -> None

Replace development state from a session checkpoint.

search(query: str, top_k: int = 10) -> list[dict]

Functions

load_profile(path: str | Path, strict: bool = False) -> SkillProfile

Load a SkillProfile from JSON.

save_profile(profile: SkillProfile, path: str | Path) -> None

Save a SkillProfile to a JSON file.

compute_phase(domain: SkillDomain) -> SkillPhase

Compute the skill phase for a domain based on task counts and patterns.

detect_automation_bias(domain: SkillDomain) -> bool

Detect automation bias: human always agrees with AI.

should_challenge(domain: SkillDomain) -> bool

Determine if the human should be challenged on this task.

generate_metacognitive_prompt(phase: SkillPhase, goal: str, is_challenge: bool = False) -> MetacognitivePrompt

Generate a phase-appropriate metacognitive prompt.

record_task_outcome(profile: SkillProfile, domain_name: str, success: bool, agreed_with_ai: bool) -> tuple[SkillProfile, bool]

Record a task outcome and update the skill profile.

MCP Tools

Operation Source
assess_domain development_mcp
record_outcome development_mcp
check_bias development_mcp
get_prompt development_mcp
get_domain development_mcp
list_domains development_mcp
reset_domain development_mcp
create_profile development_mcp
get_profile development_mcp
list_profiles development_mcp
update_profile development_mcp
delete_profile development_mcp
get_domain_stats development_mcp
get_phase_history development_mcp
get_bias_report development_mcp
get_trends development_mcp
get_profile_summary development_mcp
batch_record development_mcp
batch_assess development_mcp
compare_profiles development_mcp
set_deskilling development_mcp
get_deskilling_status development_mcp
save_session development_mcp
load_session development_mcp
health development_mcp
info development_mcp
ops development_mcp
help development_mcp