Skip to content

Job Education

job_education -- G6 Education job agent.

Cluster: Job Agents | Type: component | MCP Tools: 26

Overview

Domain-specialist job agent for educators and instructional designers. Creates lesson plans, assesses student understanding, adapts curricula to individual needs, explains complex concepts in accessible language, designs practice exercises, and analyses learning performance data — covering the full teaching lifecycle within G6's safety-bounded, audit-trailed JobAgentBlock framework.

When to use:

  • Generating differentiated lesson plans aligned to a learning standard or syllabus
  • Producing formative assessments and marking rubrics for a given topic
  • Adapting existing curriculum materials to different year levels or learning profiles
  • Analysing class-level performance data to identify knowledge gaps

Pilot readiness

job_education is pilot-ready for MVP workflows such as lesson planning, formative assessment support, curriculum adaptation, artifact storage, and lightweight learning analytics. It is not an enterprise LMS, student-record system, regulated education-compliance product, or substitute for professional educator review. Treat outputs as draft recommendations and verify grades, interventions, accommodations, curriculum claims, and externally sourced content before using them with learners or institutions.

Live web search and live LLM-backed debate are opt-in (G6_JOB_LIVE_SEARCH=1 and G6_JOB_LIVE_LLM=1). The default mode is local/deterministic so first-time MCP installs and pilot demos do not depend on external network calls or paid model credentials.

LMS adapter status is intentionally disclosed as backend="in_memory" and production_lms_connected=false. The shipped adapter is InMemoryLMSAdapter only; live Canvas, Moodle, Blackboard, Google Classroom, or enterprise LMS data requires a concrete LMSAdapter subclass outside this component. Capability discovery (get_capabilities) returns this adapter status and marks the result qualified-draft with a warning_card because the adapter seam is not a production LMS connection.

Reliability envelope fields are surfaced across MCP and Tier-1 outputs: completion_state, warning_card, evidence, request_id, task_id, and run_id. Legal completion_state values are exactly verified, qualified-draft, and blocked-escalated.

Example:

from mvp.job_education import JobEducationBlock, JobEducationInput

block = JobEducationBlock()
result = block.infer(JobEducationInput(
    task="Create a Year 9 lesson plan on quadratic equations including worked examples and a 10-question quiz",
    context={"curriculum": "Australian Curriculum v9", "duration_minutes": 60},
))
# result.ok → True; result.value → JobEducationOutput with result, artifacts

Works well with: job_framework, job_psychologist, job_researcher

Public API

JobEducationBlock(JobAgentBlock)

G6 Education job agent - Tier 1 block with MCP delegation.

Field Type Default
name str 'job_education'
sector SectorClassification field(default_factory=lambda: _SECTOR)
toolkit ToolkitSpec \| None field(default_factory=lambda: JOB_TOOLKITS.get('education'))
mcp_module str 'mvp.job_education.education_mcp.server'
agentic_planner object \| None None
capabilities ClassVar[set[type]] {Extensible, HumanLearnable, Collaborative, ProblemSolvable, KnowledgeGrounded, Memorable, AgentCommunicable, HumanTrainable}

Methods:

infer(data: Any) -> Result[JobEducationOutput]

Run the inherited job pipeline and preserve this component's canonical envelope.

JobEducationInput(JobInput)

Input for the Education job agent.

JobEducationOutput(JobOutput)

Output from the Education job agent.

LMSAdapter(ABC)

Abstract base class for Learning Management System adapters.

Methods:

list_courses() -> list[dict[str, Any]]

List all courses visible to the authenticated user.

get_course(course_id: str) -> dict[str, Any] | None

Get course details by ID.

list_students(course_id: str) -> list[dict[str, Any]]

List students enrolled in a course.

get_assignments(course_id: str) -> list[dict[str, Any]]

List assignments for a course.

get_submissions(course_id: str, assignment_id: str) -> list[dict[str, Any]]

Get submissions for an assignment.

submit_grade(course_id: str, assignment_id: str, student_id: str, score: float, feedback: str = '') -> bool

Submit a grade for a student's assignment.

create_assignment(course_id: str, title: str, description: str = '', max_score: float = 100, due_date: str = '') -> str

Create an assignment. Returns assignment_id.

get_gradebook(course_id: str) -> list[dict[str, Any]]

Get the full gradebook for a course.

InMemoryLMSAdapter(LMSAdapter)

In-memory LMS adapter for testing and development.

Methods:

add_course(course_id: str = '', title: str = '', **kwargs: Any) -> str

add_student(student_id: str = '', name: str = '', **kwargs: Any) -> str

enroll_student(course_id: str, student_id: str) -> None

list_courses() -> list[dict[str, Any]]

get_course(course_id: str) -> dict[str, Any] | None

list_students(course_id: str) -> list[dict[str, Any]]

get_assignments(course_id: str) -> list[dict[str, Any]]

get_submissions(course_id: str, assignment_id: str) -> list[dict[str, Any]]

submit_grade(course_id: str, assignment_id: str, student_id: str, score: float, feedback: str = '') -> bool

create_assignment(course_id: str, title: str, description: str = '', max_score: float = 100, due_date: str = '') -> str

get_gradebook(course_id: str) -> list[dict[str, Any]]

Build a gradebook: one row per student with all assignment grades.

JobEducationMCPBlock(AIBlock[MCPJobEducationInput, MCPJobEducationOutput, dict])

26-op MCP block for the Education job agent.

Field Type Default
name str 'job_education_mcp'
state dict field(default_factory=dict)
db_path str ':memory:'
resource_bounds ResourceBounds field(default_factory=ResourceBounds)
usage ResourceUsage field(default_factory=ResourceUsage)

Methods:

infer(data: MCPJobEducationInput) -> Result[MCPJobEducationOutput]

MCPJobEducationInput(BaseModel)

Input to JobEducationMCPBlock - 26-op dispatch.

Field Type Default
op Literal['create_lesson', 'assess_student', 'adapt_curriculum', 'explain_concept', 'design_exercise', 'analyze_performance', 'evaluate_engagement', 'assess_comprehension', 'benchmark_outcomes', 'audit_content', 'create_proposal', 'review_deliverable', 'delegate_task', 'report_status', 'request_feedback', 'store_artifact', 'retrieve_artifact', 'list_artifacts', 'search_artifacts', 'archive', 'plan_sprint', 'track_progress', 'reflect_on_outcome', 'list_patterns', 'get_capabilities', 'info'] required
task str ''
context dict[str, Any] Field(default_factory=dict)
parameters dict[str, Any] Field(default_factory=dict)
artifact_id str ''
query str ''

MCPJobEducationOutput(BaseModel)

Output from JobEducationMCPBlock.

Field Type Default
op str required
result str ''
artifacts list[dict[str, Any]] Field(default_factory=list)
records list[dict[str, Any]] Field(default_factory=list)
message str ''
count int 0
found bool False
metadata dict[str, Any] Field(default_factory=dict)
degraded bool False
degradation_reason str \| None None
completion_state Literal['verified', 'qualified-draft', 'blocked-escalated'] 'qualified-draft'
warning_card dict[str, Any] Field(default_factory=dict)
evidence dict[str, Any] Field(default_factory=dict)
request_id str ''
task_id str ''
run_id str ''

EducationStore(JobStore)

SQLite store for the Education job agent.

Constructor:

Parameter Type Default
db_path str ':memory:'

Methods:

create_course(title: str, subject: str = '', level: str = '', learning_objectives: list | None = None, standards: list | None = None, credits: float = 3.0, enrollment_cap: int = 30, status: str = 'active') -> str

get_course(course_id: str) -> dict | None

list_courses(subject: str = '', status: str = '') -> list[dict]

create_student(name: str, grade_level: str = '', enrollment_status: str = 'active', accommodations: list | None = None, performance: dict | None = None) -> str

get_student(student_id: str) -> dict | None

list_students(grade_level: str = '', enrollment_status: str = '') -> list[dict]

create_assessment(course_id: str, title: str, assessment_type: str = 'formative', rubric: dict | None = None, max_score: float = 100, weight: float = 1.0, due_date: str = '') -> str

get_assessment(assessment_id: str) -> dict | None

list_assessments(course_id: str = '', assessment_type: str = '') -> list[dict]

record_grade(student_id: str, assessment_id: str, score: float = 0, feedback: str = '', submitted_date: str = '', graded_date: str = '') -> str

get_grades_for_student(student_id: str, limit: int = 100) -> list[dict]

get_grades_for_assessment(assessment_id: str) -> list[dict]

create_lesson_plan(course_id: str, title: str, objectives: list | None = None, activities: list | None = None, materials: list | None = None, duration_mins: int = 50, sequence_order: int = 0) -> str

get_lesson_plan(plan_id: str) -> dict | None

list_lesson_plans(course_id: str = '') -> list[dict]

MCP Tools

Operation Source
create_lesson education_mcp
assess_student education_mcp
adapt_curriculum education_mcp
explain_concept education_mcp
design_exercise education_mcp
analyze_performance education_mcp
evaluate_engagement education_mcp
assess_comprehension education_mcp
benchmark_outcomes education_mcp
audit_content education_mcp
create_proposal education_mcp
review_deliverable education_mcp
delegate_task education_mcp
report_status education_mcp
request_feedback education_mcp
store_artifact education_mcp
retrieve_artifact education_mcp
list_artifacts education_mcp
search_artifacts education_mcp
archive education_mcp
plan_sprint education_mcp
track_progress education_mcp
reflect_on_outcome education_mcp
list_patterns education_mcp
get_capabilities education_mcp
info education_mcp