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 |