SaferSkills independently audited learn-socratic (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill supports graph ingestion and concept learning with four interaction modes:
ingest: convert structured payload into a validated knowledge graph revision.learn: explain and coach new material.quiz: assess current mastery.review: reinforce retention and weak points.Applies to every session regardless of mode.
mode and one actionable next_step.summary and one actionable next_step.shared only for clarification/recovery.shared/ingest/learn/quiz/review) per turn; never mix per-mode rules.references/*.md).graph_id for the whole book; ingest one chapter per turn into that same graph (chapters as topics with topic_type: chapter, sections under parent_topic_id). Do not split a single book into parallel root graphs or try to build the full book payload in one shot. Chapter reorder uses reorder-graph-topics inside references/ingest.md.learn / quiz / review.add_interaction_record per judged question, regardless of quiz_pacing (per_concept vs per_chapter); pacing only changes how many questions appear in one user turn.add_interaction_record with concept_id and outcome payload.Map natural language intent to target mode and reference contract file:
| User intent hint | Target mode | Contract file |
|---|---|---|
| import materials, build graph, update graph | ingest | references/ingest.md |
| fix chapter order, reorder topics, 章节顺序 | ingest | references/ingest.md |
| explain, teach me, learn | learn | references/learn.md |
| test me, quiz, ask questions, 一题一题, 批量测验, 一章测验 | quiz | references/quiz.md |
| review, recap, due items | review | references/review.md |
| weak points, mastery report, chapter performance, 薄弱点, 掌握程度 | shared (discovery) then diagnostics CLI | references/shared.md |
| ambiguous or conflicting intent | shared | references/shared.md |
Routing flow rules:
shared for one clarification turn and then re-route.summary with failure reason and next_step to continue in shared.shared also handles recoverable execution failures and long-tail capability discovery, then must hand off back to one main mode (ingest/learn/quiz/review) when context is ready.When the user asks for weak points, mastery by chapter, or learning performance analysis (not an interactive review/quiz turn):
plan_id is unknown, run discovery (list-learning-plans or shared flow) and let the user pick a plan.by_topic, by_concept, ranked_weak_concepts, summary). Do not query SQLite or invent table names.--topic-id for a chapter subtree, or --concept-id for a concept plus all part_of sub-concepts.review / learn / quiz with a concrete next_step.Shell (required prefix on every command): cd <skill-repo-root> && python -m scripts.cli.main …
Examples:
cd …/learn-socratic && python -m scripts.cli.main get-mastery-diagnostics --plan-id PLAN_ID
cd …/learn-socratic && python -m scripts.cli.main get-mastery-diagnostics --plan-id PLAN_ID --topic-id t1
cd …/learn-socratic && python -m scripts.cli.main get-mastery-diagnostics --plan-id PLAN_ID --concept-id c1
Forbidden for diagnostics: ad-hoc SQL or from scripts.knowledge_graph.api import create_app. Python entry point when needed: from scripts.app import create_app.
`list-learning-plans` semantics: progress.pending_tasks counts LearningTask queue rows, not “number of review questions due”.
`get-mode-context` vs diagnostics: CLI stdout includes context_summary for session continuation in learn/quiz/review; for mastery reports use `get-mastery-diagnostics` instead.
Run commands from the skill repo root (the directory that contains scripts/), e.g. cd …/learn-socratic && python -m scripts.cli.main ….
Naming
| Surface | Style | Example |
|---|---|---|
CLI subcommands, flags, API discovery name (list-apis, get-api-spec --api-name) | kebab-case | create-learning-plan, --plan-id |
| JSON request/response fields in API payloads | snake_case | graph_id, plan_id, concept_id |
Discovery (authoritative)
name values (kebab-case), aligned with CLI subcommands where a dedicated command exists.name from `list-apis` (e.g. create-learning-plan). Snake_case names (e.g. create_learning_plan) are rejected.list-apis).Allowed CLI subcommands only (must match scripts/cli/main.py; do not invent names such as get-concepts):
list-apis, get-api-spec, list-knowledge-graphs, get-knowledge-graph, ingest-knowledge-graph, reorder-graph-topics, remove-knowledge-graph-entities, list-learning-plans, create-learning-plan, extend-learning-plan-topics, get-mode-context, get-mastery-diagnostics, add-interaction-record
Notes
get-concepts CLI. To fetch concept briefs from the terminal by graph (and optionally topic), use `get-knowledge-graph` with --graph-id and optional --topic-id, --concept-limit, --offset.scripts.knowledge_graph.api.get_concepts is a Python module helper, not a method on OrchestrationAppService and not exposed as a subcommand.get_discovery_context) have no dedicated CLI; call them via from scripts.app import create_app in Python (or call_api if you use it).Examples:
python -m scripts.cli.main get-mode-context --mode learn --plan-id PLAN_ID --topic-id t1
python -m scripts.cli.main get-mode-context --mode learn --plan-id PLAN_ID --session-context-json '{"served_concept_ids":["c1"],"last_completed_concept_id":"c1","last_result":"ok"}'
On learn re-entry, always call get-mode-context --mode learn with the prior turn's next_session_context (or rely on server DB fallback). Teach only session_queue.current_item.concept_id.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.