Install
openclaw skills install mbti-analyzerAnalyze a user's MBTI from authorized OpenClaw memory, session history, and workspace notes. Use when the user asks for MBTI analysis, personality inference without a questionnaire, an evidence-backed personality report, or a structured type hypothesis from historical conversations.
openclaw skills install mbti-analyzerGenerate an evidence-backed MBTI report from authorized OpenClaw history and workspace notes.
This package is a skill. The public handoff line for other agents lives in README.md.
Primary entry points:
MBTI, personality analysis, type membti-reportMinimal runtime requirement:
python3Local install for development or manual setup:
ln -s /absolute/path/to/mbti "$CODEX_HOME/skills/mbti"
Start an analysis by invoking the skill in chat:
Analyze my MBTI using only my authorized memory and session history
For agents and maintainers:
What this skill produces:
report.html: primary deliverablereport.md: compact summaryanalysis_result.json: type hypothesis, confidence, follow-up questionsevidence_pool.json: scored and traceable evidenceWhat the first interaction should do:
Always separate the workflow into two layers:
Do not infer MBTI directly from the full raw history.
Use this skill when the user wants:
Do not use this skill for clinical diagnosis or mental-health assessment.
Before reading any source content:
Default candidate categories:
MEMORY.mdmemory/*.md~/.openclaw/agents/*/sessions/*.jsonl~/.openclaw/memory/main.sqlite~/.openclaw/tasks/runs.sqlite~/.openclaw/cron/runs/*.jsonlDefault exclusions:
.envcredentials/*identity/*If the user does not provide an output directory, write results to:
./.mbti-reports/<timestamp>/
Recommended order:
python3 {baseDir}/scripts/discover_sources.py \
--workspace-root . \
--openclaw-home ~/.openclaw \
--output /tmp/mbti-source-manifest.json
Use the manifest to explain what can be analyzed. Do not read content yet.
python3 {baseDir}/scripts/ingest_all_content.py \
--manifest /tmp/mbti-source-manifest.json \
--approved-source-types workspace-long-memory,workspace-daily-memory,openclaw-sessions \
--output-dir ./.mbti-reports/<timestamp>
This creates:
raw_records.jsonlsource_summary.jsonpython3 {baseDir}/scripts/build_evidence_pool.py \
--raw-records ./.mbti-reports/<timestamp>/raw_records.jsonl \
--source-summary ./.mbti-reports/<timestamp>/source_summary.json \
--output ./.mbti-reports/<timestamp>/evidence_pool.json
This stage should:
python3 {baseDir}/scripts/infer_mbti.py \
--evidence-pool ./.mbti-reports/<timestamp>/evidence_pool.json \
--source-summary ./.mbti-reports/<timestamp>/source_summary.json \
--output ./.mbti-reports/<timestamp>/analysis_result.json
Inference rules:
If analysis_result.json contains needs_followup: true and the user is available to answer, ask the follow-up questions before finalizing the report.
After the user answers the low-confidence questions, rerun the pipeline with the answers incorporated as additional user evidence:
python3 {baseDir}/scripts/apply_followup_answers.py \
--raw-records ./.mbti-reports/<timestamp>/raw_records.jsonl \
--source-summary ./.mbti-reports/<timestamp>/source_summary.json \
--analysis ./.mbti-reports/<timestamp>/analysis_result.json \
--output-dir ./.mbti-reports/<timestamp> \
--answer "S/N=<user answer>" \
--answer "J/P=<user answer>"
This updates:
raw_records.jsonlsource_summary.jsonfollowup_answers.jsonevidence_pool.jsonanalysis_result.jsonreport.mdreport.htmlIf the user declines to answer, keep the current report and surface the uncertainty explicitly.
python3 {baseDir}/scripts/render_report.py \
--analysis ./.mbti-reports/<timestamp>/analysis_result.json \
--evidence-pool ./.mbti-reports/<timestamp>/evidence_pool.json \
--output-dir ./.mbti-reports/<timestamp> \
--quote-mode summary \
--open
Add --open to automatically open the HTML report in the default browser after rendering.
This creates:
report.mdreport.htmlWhen you only need to tune layout, CSS, spacing, or badge/theme behavior, use the built-in preview mode instead of rerunning discovery, ingestion, evidence construction, and inference:
python3 {baseDir}/scripts/render_report.py \
--debug-preview \
--debug-type INTP \
--output-dir /tmp/mbti-preview
This creates a fully populated report.html and report.md from a bundled fixture so report debugging does not depend on prior pipeline artifacts.
When you want to test one stage in isolation, prepare a synthetic fixture for that stage and then run the real stage script against those files.
Prepare fixture inputs:
python3 {baseDir}/scripts/prepare_stage_fixture.py \
--stage infer \
--output-dir /tmp/mbti-stage-infer
Then run the stage you actually want to inspect:
python3 {baseDir}/scripts/infer_mbti.py \
--evidence-pool /tmp/mbti-stage-infer/evidence_pool.json \
--source-summary /tmp/mbti-stage-infer/source_summary.json \
--output /tmp/mbti-stage-infer/analysis_result.json
Supported fixture stages:
discover: generates synthetic workspace and OpenClaw source filesingest: adds source_manifest.jsonevidence: adds raw_records.jsonl and source_summary.jsoninfer: adds evidence_pool.jsonrender: adds analysis_result.jsonfollowup: adds answers_input.json for apply_followup_answers.pySmoke-test all stage entrypoints with:
python3 -m unittest tests.test_stage_smoke
The HTML report is the primary artifact. The chat reply should only provide:
Do not freestyle the full report in chat if report.html already exists.
Treat the following as high-risk pseudo-signals:
Treat the following as stronger evidence:
Read these references when needed: