Skip to content

Job Psychologist

job_psychologist — G6 Psychologist job agent.

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

Overview

Domain-specialist job agent for psychologists and counsellors. Supports client assessment, treatment plan development, session documentation, literature review, outcome evaluation, and psychometric analysis — all within a strictly human-review-flagged, safety-bounded JobAgentBlock framework designed as a clinical decision-support tool rather than an autonomous practitioner.

Mental-health decision-support caveat

job_psychologist is suitable for MVP pilots, supervised clinical-support workflows, structured documentation, literature review, and assessment/treatment-planning drafts where a qualified clinician remains accountable for the final decision. It is not an autonomous therapist, diagnostic authority, emergency service, regulated medical device, or proof of clinical safety.

The public JobPsychologistBlock applies crisis detection, strict professional-attestation safety gates for advisory operations, provenance metadata, and regulated-domain disclaimers. These controls reduce launch risk, but they do not verify licences, jurisdiction-specific scope of practice, consent, privacy obligations, mandatory reporting duties, or local clinical governance requirements.

Production use should route user-facing calls through JobPsychologistBlock or JobPsychologistMCPBlock, keep human review in the workflow, verify all clinical claims against current professional guidance, and avoid marketing this component as autonomous mental-health treatment, diagnosis, crisis triage, or regulated compliance evidence.

When to use:

  • Generating structured assessment summaries from presenting concern narratives and test scores
  • Drafting evidence-based treatment plans aligned to CBT, ACT, or DBT frameworks
  • Producing structured session notes compliant with professional documentation standards
  • Reviewing recent literature on a specific condition or intervention to inform practice

Example:

from mvp.job_psychologist import JobPsychologistBlock, JobPsychologistInput

block = JobPsychologistBlock()
result = block.infer(JobPsychologistInput(
    task="Summarise the intake assessment for a client presenting with generalised anxiety and draft a 12-week CBT treatment plan",
    context={"presenting_concern": "GAD", "GAD7_score": 14, "PHQ9_score": 8, "requires_human_review": True},
))
# result.ok → True; result.value → JobPsychologistOutput with result, artifacts

Works well with: job_framework, job_allied_health, job_education

Public API

PsychologistDecision

Validated op-classification decision for a clinical task.

Field Type Default
op str required
recommendation str ''
rationale str ''
signals list[str] field(default_factory=list)
citations list[str] field(default_factory=list)
confidence float 0.0
completion_state str 'qualified-draft'
degraded bool False
requires_human_review bool False
raw_response str ''

PsychologistPlanner

Runtime-first facade with deterministic fallback (ACTION tier).

Constructor:

Parameter Type Default
runtime PsychologistRuntime \| None None

Methods:

classify(task: str, context: dict | None = None) -> PsychologistDecision

JobPsychologistBlock(JobAgentBlock)

G6 Psychologist job agent — crisis detection + MCP delegation with safety gate.

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

Methods:

infer(data)

Public entrypoint with an UNBYPASSABLE crisis precheck (Codex CRITICAL fix).

JobPsychologistInput(JobInput)

Input for the Psychologist job agent.

JobPsychologistOutput(JobOutput)

Output from the Psychologist job agent.

ClinicalRecordAdapter(ABC)

Abstract base class for clinical record storage backends.

Methods:

create_client(demographics: dict, presenting_concerns: str, referral_source: str = '', risk_level: str = 'low') -> str

Create a new client record. Returns client_id.

get_client(client_id: str) -> dict | None

Retrieve a client record by ID.

list_clients(status: str = '', limit: int = 50) -> list[dict]

List client records, optionally filtered by status.

create_assessment(client_id: str, instrument: str, raw_scores: dict, interpretation: str = '') -> str

Create an assessment record. Returns assessment_id.

get_assessments(client_id: str, instrument: str = '') -> list[dict]

Retrieve assessments for a client.

create_session(client_id: str, session_number: int, progress_notes: str = '', interventions: list | None = None) -> str

Create a session record. Returns session_id.

get_sessions(client_id: str) -> list[dict]

Retrieve sessions for a client.

create_treatment_plan(client_id: str, diagnosis_codes: list, goals: list, modality: str = 'individual') -> str

Create a treatment plan. Returns plan_id.

get_treatment_plans(client_id: str) -> list[dict]

Retrieve treatment plans for a client.

create_outcome_record(client_id: str, measure: str, baseline: float, current: float, target: float, session_number: int = 0) -> str

Create an outcome tracking record. Returns tracking_id.

get_outcome_records(client_id: str, measure: str = '') -> list[dict]

Retrieve outcome records for a client.

InMemoryClinicalAdapter(ClinicalRecordAdapter)

In-memory implementation for testing and development.

Methods:

create_client(demographics: dict, presenting_concerns: str, referral_source: str = '', risk_level: str = 'low') -> str

get_client(client_id: str) -> dict | None

list_clients(status: str = '', limit: int = 50) -> list[dict]

create_assessment(client_id: str, instrument: str, raw_scores: dict, interpretation: str = '') -> str

get_assessments(client_id: str, instrument: str = '') -> list[dict]

create_session(client_id: str, session_number: int, progress_notes: str = '', interventions: list | None = None) -> str

get_sessions(client_id: str) -> list[dict]

create_treatment_plan(client_id: str, diagnosis_codes: list, goals: list, modality: str = 'individual') -> str

get_treatment_plans(client_id: str) -> list[dict]

create_outcome_record(client_id: str, measure: str, baseline: float, current: float, target: float, session_number: int = 0) -> str

get_outcome_records(client_id: str, measure: str = '') -> list[dict]

JobPsychologistMCPBlock(AIBlock[MCPJobPsychologistInput, MCPJobPsychologistOutput, dict])

26-op MCP block for the Psychologist job agent.

Field Type Default
name str 'job_psychologist_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: MCPJobPsychologistInput) -> Result[MCPJobPsychologistOutput]

MCPJobPsychologistInput(BaseModel)

Input to JobPsychologistMCPBlock — 26-op dispatch.

Field Type Default
op Literal['assess_client', 'plan_treatment', 'document_session', 'review_literature', 'evaluate_outcome', 'analyze_assessment', 'evaluate_progress', 'assess_risk', 'benchmark_intervention', 'audit_notes', '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', 'get_capabilities', 'info', 'list_patterns'] required
task str ''
context dict[str, Any] Field(default_factory=dict)
parameters dict[str, Any] Field(default_factory=dict)
artifact_id str ''
query str ''
run_mode str 'beta'
reviewer_signature str ''

MCPJobPsychologistOutput(BaseModel)

Output from JobPsychologistMCPBlock.

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
human_review_required bool False

PsychologistStore(JobStore)

SQLite store for the Psychologist job agent.

Constructor:

Parameter Type Default
db_path str ':memory:'

Methods:

create_client(demographics: dict | None = None, presenting_concerns: str = '', referral_source: str = '', risk_level: str = 'low', status: str = 'active') -> str

get_client(client_id: str) -> dict | None

list_clients(status: str = '', limit: int = 50) -> list[dict]

update_client(client_id: str, **fields: Any) -> bool

create_assessment(client_id: str, instrument: str = '', raw_scores: dict | None = None, scaled_scores: dict | None = None, interpretation: str = '', administered_date: str = '') -> str

get_assessments(client_id: str, instrument: str = '', limit: int = 50) -> list[dict]

create_session(client_id: str, session_number: int = 1, session_type: str = 'individual', modality: str = 'in_person', interventions: list | None = None, progress_notes: str = '', duration_mins: int = 50, session_date: str = '') -> str

get_sessions(client_id: str, limit: int = 50) -> list[dict]

create_treatment_plan(client_id: str, diagnosis_codes: list | None = None, goals: list | None = None, interventions: list | None = None, modality: str = 'individual', status: str = 'active', review_date: str = '') -> str

get_treatment_plans(client_id: str, status: str = '', limit: int = 50) -> list[dict]

create_outcome_record(client_id: str, measure: str = '', baseline: float = 0.0, current: float = 0.0, target: float = 0.0, session_number: int = 0, measured_date: str = '') -> str

get_outcome_records(client_id: str, measure: str = '', limit: int = 100) -> list[dict]

Functions

summarize_job_psychologist_agentic_evidence(decisions: list[dict[str, Any]]) -> dict[str, Any]

Summarise runtime-vs-fallback psychologist decisions with path redaction.

agentic_planner_enabled(default_enabled: bool) -> bool

Decide whether the agentic psychologist planner should be used.

deterministic_classify(task: str, context: dict | None = None) -> PsychologistDecision

Demoted real keyword op-classifier -- the honest offline floor.

assemble_review_text(output: Any) -> str

Collect the reviewable free text from a JobPsychologistOutput (duck-typed).

assess_psychologist_output(output: Any, qa_block: Any | None = None, generate: Any | None = None) -> GroundedRunResult

Run grounded four-valued QA over a psychologist output.

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

Return compact metadata for the psychologist-applied vendored patterns.

applied_agentic_patterns_summary() -> dict[str, Any]

Compact roll-up used by the list_patterns handler / skill catalog.

get_skill_catalog() -> PsychologistSkillCatalog

MCP Tools

Operation Source
assess_client psychologist_mcp
plan_treatment psychologist_mcp
document_session psychologist_mcp
review_literature psychologist_mcp
evaluate_outcome psychologist_mcp
analyze_assessment psychologist_mcp
evaluate_progress psychologist_mcp
assess_risk psychologist_mcp
benchmark_intervention psychologist_mcp
audit_notes psychologist_mcp
create_proposal psychologist_mcp
review_deliverable psychologist_mcp
delegate_task psychologist_mcp
report_status psychologist_mcp
request_feedback psychologist_mcp
store_artifact psychologist_mcp
retrieve_artifact psychologist_mcp
list_artifacts psychologist_mcp
search_artifacts psychologist_mcp
archive psychologist_mcp
plan_sprint psychologist_mcp
track_progress psychologist_mcp
reflect_on_outcome psychologist_mcp
get_capabilities psychologist_mcp
info psychologist_mcp
list_patterns psychologist_mcp