Token导航 LogoToken导航

Agent Skill · 研究检索

assessment-architect(评估架构师)

assessment-architect 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

assessment-architect 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为只读;许可证信息还不明确,第三方扫描有未通过项,按安装量在研究检索类的 73,675 个 Skill 里排第 40,618。

总安装 1,272周安装 53GitHub Stars 158下载 424核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:assessment-architect(评估架构师)
来源仓库:https://github.com/panaversity/agentfactory
仓库路径:skills/assessment-architect
安装命令:
npx skills add https://github.com/panaversity/agentfactory --skill assessment-architect
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/panaversity/agentfactory --skill assessment-architect

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

assessment-architect 专注于从概念图谱出发构建严谨的认证考试题目,强调情境化命题而非死记硬背。适用场景包括教育产品设计、技能认证体系搭建以及知识掌握程度的客观测评。核心能力要求先提取核心概念,再围绕概念设计 novel scenario 题目,杜绝事实回忆类问法。

使用方式输出 DOCX 格式试卷至 assessments/ 目录,严格遵循“概念优先”的结构化出题原则。安装前应确保已有清晰的概念地图与教学大纲,否则难以生成符合标准的有效试题集合。

来源仓库内路径:skills/assessment-architect

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/panaversity/agentfactory --skill assessment-ar…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它标注为只读,先用只读任务试一次,确认行为符合预期再扩大使用范围。

常见问题

6 条

assessment-architect 怎么安装?

在终端执行 npx skills add https://github.com/panaversity/agentfactory --skill assessment-architect。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

assessment-architect 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

assessment-architect 需要什么权限?

权限级别是只读。该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

assessment-architect 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

assessment-architect 用的人多吗?

公开数据是累计安装 1,272 次,近一周安装 53 次,下载 424 次,GitHub 158 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

assessment-architect 安全吗?

第三方扫描有未通过项,风险较高。除非你确认过源码,否则不建议直接安装到常用环境。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 标注为只读权限,试用阶段不容易误改本地文件。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。
  • 只想先试试效果、不希望它改动本地文件的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
assessment-architect

评估架构师 · 本页

1,272158只读未明确未通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Assessment Architect - Concept-First Certification Exams

Generate rigorous certification exams by extracting concepts FIRST, then building scenario-based questions from the concept map.

Output: DOCX in assessments/ directory NOT for: Practice quizzes (those use *_quiz.md in chapter directories)


Operating Contract (Non-Negotiable)

These rules are structural and cannot be overridden:

  1. No memorization questions. Every question requires a novel scenario paragraph before the stem. Questions testing recall of lesson-specific facts are rejected.
  2. Grounding notes before concepts. Read lessons → write notes file → extract concepts FROM notes. Never extract concepts from memory. The notes file is evidence of engagement.
  3. Concepts before questions. The concept map (built from notes) is the contract for Phase 2. Never generate questions by walking through lessons sequentially.
  4. Filesystem discovery only. No hardcoded book structure. Use ls -d to find paths. The filesystem is the source of truth.
  5. Structural validation. Anti-memorization (grep patterns) and anti-gaming (distribution bias) are FAIL conditions. Readability is a principle, not a word-count gate.
  6. Importance-weighted question count. Core lessons get 3-5 questions, supporting get 1-2, intro get 0-1. No flat "2 per lesson" — weight by importance.
  7. TaskList for coordination. Create tasks upfront. Update status at each phase. Subagents receive the TaskList ID.
  8. 2 subagents maximum. Each receives only the concept map + references/question-types.md. Not the full skill file.
  9. Persisted state. Notes, concept map, and question files saved to assessments/. Validation results reported at each phase.

Input Parsing (via $ARGUMENTS)

INPUT = $ARGUMENTS (e.g., "ch 5", "part 3", "ch 2, 3, 4", "ch 2-4")

PARSE:
  IF matches "ch N, N, N" | "chapter N, N and N" (comma/and-separated list):
    SCOPE = "multi-chapter"
    NUMS = extract all numbers → zero-pad each
    FOR each NUM: PATH[] += ls -d apps/learn-app/docs/*/$(printf '%02d' NUM)-*/

  ELSE IF matches "ch N-M" | "chapter N-M" (range):
    SCOPE = "multi-chapter"
    FOR NUM in N..M: PATH[] += ls -d apps/learn-app/docs/*/$(printf '%02d' NUM)-*/

  ELSE IF matches "ch N" | "chapter N" (single):
    SCOPE = "chapter"
    NUM = zero-pad N to 2 digits
    PATH = result of: ls -d apps/learn-app/docs/*/$(printf '%02d' N)-*/

  ELSE IF matches "part N" | "p N" | "pN":
    SCOPE = "part"
    NUM = zero-pad N to 2 digits
    PATH = result of: ls -d apps/learn-app/docs/$(printf '%02d' N)-*/

  ELSE IF bare number:
    AskUserQuestion: "Did you mean Chapter {N} or Part {N}?"

  ELSE IF empty:
    AskUserQuestion: "Which chapter or part? (e.g., 'ch 5' or 'part 3')"

VALIDATE:
  FOR each path: run ls -d. If no result: FAIL "Path not found"

DISCOVER LESSONS:
  FOR each PATH (single or multi):
    LESSONS += ls {PATH}/*.md | grep -v README | grep -v summary | grep -v quiz
  LESSON_COUNT = total across all paths

CONFIRM with user (AskUserQuestion):
  "Found {SCOPE}: {chapter names and numbers}
   Path(s): {paths}
   Total lessons: {LESSON_COUNT}
   Proceed?"

Task Coordination

After confirming scope, create a TaskList to track progress and coordinate subagents:

TaskCreate: "Discover scope and confirm with user" → mark in_progress immediately
TaskCreate: "Explore curriculum context (Part/Chapter READMEs)" (blocked by task 1)  ← NEW
TaskCreate: "Calculate chapter importance weights" (blocked by task 2)  ← NEW
TaskCreate: "Read lessons and write grounding notes" (blocked by task 3)
TaskCreate: "Extract concept map from grounding notes" (blocked by task 4)
TaskCreate: "Calculate question distribution and confirm" (blocked by task 5)
TaskCreate: "Generate questions - Subagent A (Scenario + Transfer)" (blocked by task 6)
TaskCreate: "Generate questions - Subagent B (Relationship + Evaluation)" (blocked by task 6)
TaskCreate: "Validate all questions" (blocked by tasks 7, 8)
TaskCreate: "Assemble exam and generate DOCX" (blocked by task 9)

Update each task status as work progresses. Subagents receive the TaskList ID so they can update their own task status upon completion.


Phase 0: Curriculum Context Discovery (MANDATORY - NEW)

CRITICAL: This phase must complete BEFORE reading individual lessons.

The skill previously failed by calculating question distribution from lesson counts alone. A chapter with 12 "Markdown syntax" lessons shouldn't get equal weight to a chapter with 12 "Core Agent Architecture" lessons.

Step 1: Read Part README

# For part scope: read the part's README directly
cat {PART_PATH}/README.md

# For chapter scope: find and read the parent part's README
PART_PATH=$(dirname {CHAPTER_PATH})
cat ${PART_PATH}/README.md

Extract from Part README:

  • Book/Part learning objectives (the "What You'll Learn" section)
  • Chapter descriptions and their stated roles
  • The overall goal/thesis of this part

Step 2: Classify Each Chapter by Role

For each chapter in scope, determine its role in the curriculum:

CHAPTER_ROLE classification:

  "core-practical"  → Teaches the PRIMARY skills of this part
                      Signals: "You'll master...", hands-on tool usage,
                      the largest chapter, most learning objectives point here
                      Weight: HIGH (30-40% of questions if single chapter dominates)

  "core-conceptual" → Teaches foundational concepts that enable practical skills
                      Signals: principles, frameworks, mental models,
                      "understand WHY" language, synthesis chapters
                      Weight: HIGH (20-30%)

  "supporting"      → Provides necessary context or secondary skills
                      Signals: "before you can...", setup, configuration,
                      enabling skills, smaller learning objective footprint
                      Weight: MEDIUM (10-20%)

  "prerequisite"    → Teaches format/syntax/basics assumed by other chapters
                      Signals: Markdown syntax, installation, environment setup,
                      not mentioned in part learning objectives
                      Weight: LOW (2-5% or exclude entirely)

Step 3: Calculate Chapter Importance Weights

Formula: Weight by role AND learning objective coverage

FOR each chapter:
  role_weight = {
    "core-practical": 35,
    "core-conceptual": 25,
    "supporting": 15,
    "prerequisite": 3
  }[chapter_role]

  # Adjust by learning objective coverage
  objectives_mentioning_chapter = count of Part learning objectives
    that specifically reference this chapter's topics
  objective_boost = objectives_mentioning_chapter * 5

  raw_weight = role_weight + objective_boost

NORMALIZE weights to sum to 100%

OUTPUT: chapter_weights = { ch1: X%, ch2: Y%, ... }

Step 4: Report and Confirm

Present to user BEFORE reading lessons:

## Curriculum Analysis

**Part Goal:** {thesis from README}

| Chapter | Lessons | Role | Weight | Rationale |
|---------|---------|------|--------|-----------|
| Ch 3: General Agents | 52 | core-practical | 35% | Primary hands-on chapter |
| Ch 6: Seven Principles | 20 | core-conceptual | 20% | Synthesis chapter |
| Ch 4: Context Engineering | 22 | core-conceptual | 20% | Quality discipline |
| Ch 1: Agent Factory | 22 | supporting | 15% | Foundational concepts |
| Ch 5: SDD | 10 | supporting | 8% | Methodology |
| Ch 2: Markdown | 12 | prerequisite | 2% | Format only |

**Proposed question distribution (150 total):**
- Ch 3: 52 questions
- Ch 6: 30 questions
- Ch 4: 30 questions
- Ch 1: 23 questions
- Ch 5: 12 questions
- Ch 2: 3 questions

Proceed with this weighting?

User can adjust weights before lesson reading begins.

Why This Matters

Without Phase 0With Phase 0
Ch 2 (Markdown) gets 12 lessons × 2 = 24 questionsCh 2 gets 2% = 3 questions
Lesson count drives distributionBook goals drive distribution
Supporting chapters over-weightedCore chapters properly prioritized
Prerequisite skills tested heavilyPrerequisites minimally tested

Grounding Notes (MANDATORY)

As you read each lesson, write observations to assessments/{SLUG}-notes.md. This file is your working memory and evidence of genuine engagement with the content.

Format (append per lesson):

## Lesson: {filename}

**Weight:** {core | supporting | intro}
**Key concepts:** {2-5 concepts worth testing}
**Relationships to other lessons:** {what connects to what}
**Testable trade-offs:** {decisions or comparisons in this lesson}
**Transfer potential:** {where else this principle applies}
**Surprise/insight:** {anything non-obvious that would make a good question}

Rules:

  • Write notes DURING reading, not after all lessons are read
  • This file is the RAW INPUT for concept extraction (Phase 1 reads notes, not memory)
  • The concept map MUST cite specific notes entries as evidence
  • If a concept in the map has no corresponding note: it's fabricated, remove it

4 Question Types (Adaptive Distribution)

All questions require a concise scenario before the stem. No fact-recall patterns allowed.

TypeBloom LevelKey Constraint
Scenario AnalysisApply/AnalyzeNovel situation not appearing in lessons
Concept RelationshipAnalyze/EvaluateTests CONNECTION between 2+ concepts
Transfer ApplicationApply/CreateApply principle to a domain NOT in the chapter
Critical EvaluationEvaluateIdentify WHY an approach fails in context

Distribution adapts to chapter type (classified in Phase 0.5):

PRACTICAL-TOOL chapters (e.g., Claude Code CLI, Docker, FastAPI):
  Scenario Analysis:     60%  (realistic usage scenarios in the tool's domain)
  Concept Relationship:  20%  (how tool components interact)
  Transfer Application:   5%  (minimal — stay in the tool's domain)
  Critical Evaluation:   15%  (identify why an approach fails with this tool)

CONCEPTUAL chapters (e.g., Seven Principles, Architecture Patterns):
  Scenario Analysis:     35%  (apply principle to realistic situations)
  Concept Relationship:  25%  (how principles connect and interact)
  Transfer Application:  25%  (appropriate — abstract principles transfer broadly)
  Critical Evaluation:   15%  (evaluate when a principle is misapplied)

HYBRID chapters:
  Interpolate between practical-tool and conceptual based on lesson mix.
  Count practical vs conceptual lessons, weight accordingly.
  Example: 60% practical lessons → use 80% of practical distribution + 20% of conceptual.

Rationale: Practical-tool chapters should test whether students can USE the tool in realistic scenarios, not transfer principles to unrelated domains. Conceptual chapters should test whether students can apply principles broadly.

For detailed patterns and examples, see references/question-types.md.

Readability Principle

The difficulty is in the THINKING, not the READING.

Write at professional-clear level. One idea per sentence. Active voice. No filler. The agent has full autonomy over word counts — the principle is clarity, not a specific number.

Option Length Parity (MANDATORY)

All four options in every question MUST be similar length.

Rule: Every option's word count must fall within 0.8x to 1.2x of the mean option length for that question. If the correct answer is 1.0x, all distractors must be 0.8x-1.2x.

Why this matters: When correct answers average 22.7 words and distractors average 9.4 words (2.42x ratio), students can guess correctly by picking the longest option without reading the question. This invalidates the assessment.

The "Write-Then-Match" Procedure:

  1. Write the correct answer (naturally detailed)
  2. Count its words
  3. Write each distractor to the SAME word count (±20%)
  4. If a distractor is too short, expand it with plausible but wrong detail
  5. If the correct answer is too long, simplify it — then expand distractors to match

WRONG (length bias — student picks longest):

**A.** Reduce involvement to autocomplete only
**B.** Switch to a more capable model
**C.** Write detailed specifications for each function and validate the AI's complete output against them
**D.** Continue until the AI learns her style

(C is 15 words, others are 5-8. Correct answer is obvious by length.)

RIGHT (all options same length, difficulty is in thinking):

**A.** Limit the AI to autocomplete mode and manually write the rest of each function
**B.** Replace the current model with a higher-tier one that produces cleaner code output
**C.** Write detailed specifications first and validate the AI's complete output against them
**D.** Continue the current workflow and wait for the AI to adapt to her coding patterns

(All options 14-17 words. Must actually understand the concept to answer.)

WRONG (bloated scenario — agent should never produce this):

Q. A veteran meteorologist notices that her department's new AI weather
prediction system presents 48-hour forecasts with identical confidence
formatting regardless of actual prediction reliability...

RIGHT (clear, same concept tested):

Q. A weather AI displays all forecasts with equal confidence — a risky
tropical storm prediction looks identical to a reliable clear-sky forecast.
Junior staff stopped questioning AI outputs.

How should the team handle AI outputs that show no uncertainty signal?

**A.** Verify all AI forecasts against independent sources before publishing

Same concept. Same difficulty. The right version is just clearer because it has no filler.


Dynamic Question Count (Two-Level Weighting)

Question distribution uses TWO levels of weighting:

  1. Chapter-level weights (from Phase 0 curriculum analysis)
  2. Lesson-level weights (within each chapter)

Level 1: Chapter Weights (from Phase 0)

Chapter weights are determined by curriculum analysis BEFORE reading lessons:

  • Role in book goals (core-practical, core-conceptual, supporting, prerequisite)
  • Learning objective coverage
  • User confirmation

These weights determine what PERCENTAGE of total questions each chapter receives.

Level 2: Lesson Weights (within chapters)

During Phase 0.5 (reading lessons), tag each lesson:

LESSON_WEIGHT:
  "core"       → Teaches a key capability or central concept (3-5 questions)
                 Signals: new tools, complex workflows, architectural patterns, capstone integration
  "supporting" → Provides context, setup, or secondary skills (1-2 questions)
                 Signals: configuration, secondary features, examples of core concepts
  "intro"      → Opening, overview, or minimal-content lesson (0-1 questions)
                 Signals: motivational content, history, "what you'll learn", installation-only

Calculating Total Question Count

tier_multiplier:
  T1 (Introductory) = 0.7
  T2 (Intermediate) = 1.0  [default]
  T3 (Advanced)     = 1.3

total_lessons = sum of lessons across all chapters
concept_count = total concepts extracted

base = max(ceil(concept_count * 0.8), total_lessons * 1.5)
raw = base * tier_multiplier
TOTAL = clamp(round_to_nearest_5(raw), min=30, max=150)

Allocating Questions to Chapters

Apply Phase 0 chapter weights:

FOR each chapter:
  chapter_questions = round(TOTAL * chapter_weight_percent)

VALIDATE: sum of chapter_questions == TOTAL (adjust rounding as needed)

Allocating Questions Within Chapters

Apply lesson weights within each chapter's allocation:

FOR each chapter:
  weighted_sum = sum of lesson weights (core=5, supporting=2, intro=1)

  FOR each lesson in chapter:
    lesson_proportion = lesson_weight / weighted_sum
    lesson_questions = round(chapter_questions * lesson_proportion)

Example: Part with 6 Chapters

Phase 0 determined chapter weights:
  Ch 3: 35% (core-practical, 52 lessons)
  Ch 4: 20% (core-conceptual, 22 lessons)
  Ch 6: 20% (core-conceptual, 20 lessons)
  Ch 1: 15% (supporting, 22 lessons)
  Ch 5: 8%  (supporting, 10 lessons)
  Ch 2: 2%  (prerequisite, 12 lessons)

Total = 150 questions (T2)

Chapter allocation:
  Ch 3: 150 * 0.35 = 52 questions
  Ch 4: 150 * 0.20 = 30 questions
  Ch 6: 150 * 0.20 = 30 questions
  Ch 1: 150 * 0.15 = 23 questions
  Ch 5: 150 * 0.08 = 12 questions
  Ch 2: 150 * 0.02 = 3 questions

Within Ch 2 (3 questions for 12 lessons):
  - 2 core lessons get 1 question each
  - 10 intro/supporting lessons get 0-1 questions
  - Total: 3 questions (matches chapter allocation)

Present recommendation to user with BOTH chapter-level AND lesson-level breakdown. User can override at either level.


5-Phase Workflow

Phase 0 → Curriculum Context Discovery (understand book goals) Phase 0.5 → Read Lessons & Write Grounding Notes Phase 1 → Concept Extraction Phase 2 → Question Generation (2 parallel subagents) Phase 3 → Validation Phase 4 → Assembly & DOCX Output


Phase 0.5: Read Lessons, Classify Chapter & Write Grounding Notes (this agent)

Prerequisite: Phase 0 chapter weights must be confirmed before this phase.

Read ALL lessons in scope. As you read each one, APPEND observations to assessments/{SLUG}-notes.md (see Grounding Notes section above).

This is not optional. The notes file is the evidence that you actually engaged with the content. Phase 1 builds the concept map FROM the notes file, not from memory.

After reading all lessons, classify the chapter type:

CHAPTER_TYPE classification (determine from lesson content):

  "practical-tool"  → Chapter teaches how to USE a specific tool
                      Signals: CLI commands, installation steps, configuration files,
                      code blocks with tool invocations, "run this command" patterns
                      Examples: Claude Code CLI, Docker, FastAPI, Kubernetes

  "conceptual"      → Chapter teaches principles, patterns, architecture
                      Signals: "when to use", "why", trade-off discussions,
                      design patterns, decision frameworks, no specific tool commands
                      Examples: Seven Principles, General Agent Architecture, Design Patterns

  "hybrid"          → Mix of tool-usage and principle lessons
                      Signals: some lessons are hands-on tool usage,
                      others are conceptual/architectural
                      Examples: MCP (concept + implementation), Agent Skills (concept + creation)

Extract domain keywords from lesson content (the specific tools, technologies, and workflows the chapter teaches). These keywords constrain scenario generation in Phase 2.

Write classification and keywords to the top of the notes file:

# Chapter Classification

- Type: {practical-tool | conceptual | hybrid}
- Domain keywords: {comma-separated list of specific terms from the chapter}
- Example domains for scenarios: {2-3 example settings appropriate for this chapter}

Update task status: mark "Read lessons and write grounding notes" as in_progress, then completed.


Phase 1: Concept Extraction (this agent)

Read assessments/{SLUG}-notes.md (your grounding notes). Extract concepts from the notes, not from memory.

What to extract (see references/concept-extraction-guide.md for details):

  • Core concepts (named ideas, patterns, principles)
  • Relationships (concept A enables/conflicts/extends concept B)
  • Trade-offs (choosing X means sacrificing Y)
  • Transfer domains (where else could this principle apply?)

Every concept MUST cite a grounding note entry. If you can't point to a specific note, the concept is fabricated.

Output: Write to assessments/{SLUG}-concepts.md

Format:

# Concept Map: {Chapter/Part Name}

## Concepts (N total)

### 1. {Concept Name}

- Definition: {1-2 sentences}
- Lessons: {which lessons cover this}
- Relationships: {connects to concepts X, Y}
- Transfer domains: {healthcare, finance, education, etc.}

### 2. {Concept Name}

...

## Relationships

- {Concept A} --enables--> {Concept B}
- {Concept C} --conflicts-with--> {Concept D}
  ...

## Trade-offs

- {Choosing X} vs {Choosing Y}: {what you sacrifice}
  ...

After extraction:

  1. Report lesson weight breakdown (core/supporting/intro counts)
  2. Report concept count and recommend question count (importance-weighted algorithm above)
  3. Report the adaptive type distribution for the detected chapter type
  4. Ask user to confirm or override question count
  5. Ask user for difficulty tier (T1/T2/T3, default T2)

Phase 2: Question Generation (2 parallel Task subagents)

Spawn 2 Task subagents. Each receives ONLY:

  • The concept map (assessments/{SLUG}-concepts.md)
  • Question type reference (references/question-types.md)
  • Chapter type and domain keywords (from notes file classification)
  • Their assigned types and count

See references/subagent-template.md for prompt templates.

Subagent A: Scenario Analysis + Transfer Application questions

  • Output: assessments/{SLUG}-questions-A.md
  • Count: (Scenario% + Transfer%) of total — varies by chapter type:

- Practical-tool: 65% of total (60% Scenario + 5% Transfer) - Conceptual: 60% of total (35% Scenario + 25% Transfer) - Hybrid: interpolate

Subagent B: Concept Relationship + Critical Evaluation questions

  • Output: assessments/{SLUG}-questions-B.md
  • Count: (Relationship% + Evaluation%) of total — varies by chapter type:

- Practical-tool: 35% of total (20% Relationship + 15% Evaluation) - Conceptual: 40% of total (25% Relationship + 15% Evaluation) - Hybrid: interpolate


Phase 3: Validation (this agent)

Read both question files. Apply ALL structural checks:

FAIL conditions (reject question, non-negotiable):

FAIL if question contains "According to"
FAIL if question contains "Lesson [0-9]" or "lesson [0-9]"
FAIL if question contains "the document states" or "as discussed in"
FAIL if question has NO scenario paragraph before the stem
FAIL if Transfer Application domain appears anywhere in chapter content
FAIL if question doesn't map to a concept in the concept map

Anti-gaming checks (FAIL conditions):

# Length Parity (CRITICAL — per-question ratio check)
FOR each question:
  mean_length = mean word count of all 4 options
  FOR each option:
    ratio = option_word_count / mean_length
    FAIL if ratio < 0.8 or ratio > 1.2
      → "Q{N}: Option {letter} is {ratio}x mean ({words} words vs {mean} mean)"
FAIL if >15% of questions have any option outside 0.8x-1.2x range (batch-level)

# Position Bias
FAIL if any letter is correct >30% or <20% of total
FAIL if middle (B+C) > 55% of correct answers
FAIL if outer (A+D) < 40% of correct answers
FAIL if >3 consecutive questions have same correct letter

# Specificity Bias (see references/bias-detection-guide.md)
WARN if correct answer specificity score > 30% higher than distractor average
FLAG questions where correct option has examples/qualifiers that distractors lack

Distribution checks:

Count answer distribution across all questions:
  Each of A/B/C/D must be 20-30% of total
  No >3 consecutive same-letter answers

Coverage check:

Each concept in the map should have at least 1 question
  Flag uncovered concepts (warning, not failure)
  Report: "X of Y concepts covered (Z%)"

If validation fails:

  • Report specific failures with question numbers
  • Identify pattern (e.g., "Subagent A produced 12 questions with 'According to'")
  • Regenerate only the failing subagent's output (re-spawn that subagent)

See references/validation-rules.md for complete validation pipeline.


Phase 4: Assembly & DOCX Output (this agent)

Step 1: Merge and STRIP internal tags

  • Interleave questions from both files (don't group by type)
  • Renumber sequentially Q1 through Q{TOTAL}
  • Randomize answer positions (ensure distribution holds)
  • STRIP all internal tags from student-facing questions: REMOVE: [Scenario Analysis], [Concept Relationship], [Transfer Application], [Critical Evaluation] REMOVE: [Concept: {anything}] REMOVE: **Answer:** lines (answers go ONLY in answer key) REMOVE: **Reasoning:** sections (go ONLY in educator supplement)
  • Validation after stripping: grep -E "\[(Scenario|Concept|Transfer|Critical)" assessments/{SLUG}-exam.md → MUST return 0 matches in the questions section

Step 2: Build exam document (TWO separate files)

File 1: Student exam (assessments/{SLUG}-exam.md)

# {Chapter/Part Name} Certification Assessment

**Questions:** {TOTAL}
**Time Limit:** {ceil(TOTAL \* 1.5)} minutes
**Passing Score:** 75%

**Instructions:** Select the best answer for each question.

---

Q1. {scenario paragraph}

{stem ending in ?}

**A.** {option}

**B.** {option}

**C.** {option}

**D.** {option}

---

Q2. ...

NO type labels. NO concept tags. NO answers. NO explanations. Just questions.

File 2: Educator key (assessments/{SLUG}-answer-key.md)

# Answer Key: {Chapter/Part Name}

| Q   | Answer | Type                 | Concept        |
| --- | ------ | -------------------- | -------------- |
| 1   | B      | Scenario Analysis    | {concept name} |
| 2   | D      | Concept Relationship | {concept name} |

...

## Answer Distribution

A: {count} ({%}) | B: {count} ({%}) | C: {count} ({%}) | D: {count} ({%})

## Concept Coverage

{List concepts and question count per concept}

## Type Distribution

{Scenario Analysis: X | Concept Relationship: X | Transfer Application: X | Critical Evaluation: X}

CRITICAL: Option format must be `A. text` (bold letter, period, space). Never use A) — pandoc interprets it as an ordered list marker and renders bullet points in DOCX.

Step 3: Convert to DOCX (two files)

Option A: pandoc (simple)

pandoc assessments/{SLUG}-exam.md -o assessments/{SLUG}-Assessment-Final.docx --from=markdown --to=docx
pandoc assessments/{SLUG}-answer-key.md -o assessments/{SLUG}-Answer-Key.docx --from=markdown --to=docx

Option B: Programmatic with docx-js (better formatting control)

When using the docx-js library for professional DOCX output:

// CRITICAL: Paragraph alignment
// Custom paragraph styles may NOT reliably apply alignment.
// ALWAYS set alignment EXPLICITLY on each Paragraph.

// ❌ WRONG - style-based alignment may be ignored:
new Paragraph({
  style: "Question", // Even if Question style has LEFT alignment
  children: [new TextRun({ text: question.stem })],
});

// ✅ CORRECT - explicit alignment on each paragraph:
new Paragraph({
  alignment: AlignmentType.LEFT, // ALWAYS set this explicitly
  spacing: { before: 200, after: 100 },
  children: [
    new TextRun({ text: `${qNum}. `, bold: true, size: 24, font: "Arial" }),
    new TextRun({ text: question.stem, font: "Arial", size: 22 }),
  ],
});

// ✅ CORRECT - options with explicit alignment and indent:
new Paragraph({
  alignment: AlignmentType.LEFT, // ALWAYS set this explicitly
  indent: { left: 360 },
  spacing: { after: 60 },
  children: [
    new TextRun({ text: `${letter}) ${option}`, font: "Arial", size: 22 }),
  ],
});

Key docx-js rules:

  1. Always set alignment: AlignmentType.LEFT explicitly on every question/answer paragraph
  2. Don't rely on custom paragraph styles for alignment
  3. Set font: "Arial" on every TextRun for consistent rendering
  4. Use indent: {left: 360} for option indentation (not tabs or spaces)

Option C: Update existing formatted DOCX (preserves custom formatting)

When an existing DOCX with custom formatting (fonts, colors, table borders, shading) already exists and needs content updates, pandoc --reference-doc only copies style definitions — it LOSES inline formatting (table borders, cell shading, custom colors). Instead, use the /docx skill's OOXML editing workflow.

Approach: Rebuild document.xml using original's formatting templates

  1. Unpack the original DOCX:
python ooxml/scripts/unpack.py original.docx /tmp/unpacked
  1. Extract formatting templates from the original XML (read word/document.xml):

- Header section (title, subtitle, instruction box with table borders/shading) - Question paragraph formatting (fonts, sizes, spacing, indentation) - Option paragraph formatting (indent, spacing) - Chapter heading formatting (colors, font sizes) - Answer key formatting (correct answer color, reasoning style)

  1. Write a Python script that:

- Preserves the header XML verbatim (updating only metadata like question count, time) - Parses the updated markdown content - Generates new question XML using the extracted formatting templates - Preserves section properties (page margins, headers/footers) from original - Writes the assembled document.xml back

  1. Pack the result:
python ooxml/scripts/pack.py /tmp/unpacked output.docx

Key formatting patterns (from Google Docs / Word-formatted exams):

<!-- Question header: Bold, Arial 11pt -->
<w:p><w:pPr><w:spacing w:after="40" w:before="300" w:lineRule="auto"/></w:pPr>
  <w:r><w:rPr>
    <w:rFonts w:ascii="Arial" w:cs="Arial" w:eastAsia="Arial" w:hAnsi="Arial"/>
    <w:b w:val="1"/><w:bCs w:val="1"/>
    <w:sz w:val="22"/><w:szCs w:val="22"/>
  </w:rPr><w:t xml:space="preserve">Question N</w:t></w:r>
</w:p>

<!-- Scenario/stem: Arial 11pt, regular -->
<w:p><w:pPr><w:spacing w:after="60" w:lineRule="auto"/></w:pPr>
  <w:r><w:rPr>
    <w:rFonts w:ascii="Arial" w:cs="Arial" w:eastAsia="Arial" w:hAnsi="Arial"/>
    <w:sz w:val="22"/><w:szCs w:val="22"/>
  </w:rPr><w:t xml:space="preserve">Text here</w:t></w:r>
</w:p>

<!-- Options: Indented 360 twips -->
<w:p><w:pPr><w:spacing w:after="80" w:lineRule="auto"/><w:ind w:left="360"/></w:pPr>
  <w:r><w:rPr>
    <w:rFonts w:ascii="Arial" w:cs="Arial" w:eastAsia="Arial" w:hAnsi="Arial"/>
    <w:sz w:val="22"/><w:szCs w:val="22"/>
  </w:rPr><w:t xml:space="preserve">A. Option text</w:t></w:r>
</w:p>

<!-- Chapter heading: Bold, navy (#1b3a5c), Arial 13pt -->
<w:p><w:pPr><w:spacing w:after="100" w:before="600" w:lineRule="auto"/></w:pPr>
  <w:r><w:rPr>
    <w:rFonts w:ascii="Arial" w:cs="Arial" w:eastAsia="Arial" w:hAnsi="Arial"/>
    <w:b w:val="1"/><w:bCs w:val="1"/>
    <w:color w:val="1b3a5c"/>
    <w:sz w:val="26"/><w:szCs w:val="26"/>
  </w:rPr><w:t xml:space="preserve">CHAPTER N: TITLE</w:t></w:r>
</w:p>

<!-- Answer key: Correct answer in bold green (#1a7431) -->
<w:p><w:pPr><w:spacing w:after="60" w:before="120" w:lineRule="auto"/></w:pPr>
  <w:r><w:rPr>
    <w:rFonts w:ascii="Arial" w:cs="Arial" w:eastAsia="Arial" w:hAnsi="Arial"/>
    <w:b w:val="1"/><w:bCs w:val="1"/>
    <w:color w:val="1a7431"/>
    <w:sz w:val="22"/><w:szCs w:val="22"/>
  </w:rPr><w:t xml:space="preserve">Correct Answer: B</w:t></w:r>
</w:p>

<!-- Type tag (answer key only): Italic gray, 9pt -->
<w:r><w:rPr>
  <w:rFonts w:ascii="Arial" w:cs="Arial" w:eastAsia="Arial" w:hAnsi="Arial"/>
  <w:i w:val="1"/><w:iCs w:val="1"/>
  <w:color w:val="666666"/>
  <w:sz w:val="18"/><w:szCs w:val="18"/>
</w:rPr><w:t xml:space="preserve">  [Ch1] [Scenario Analysis]</w:t></w:r>

When to use Option C vs A/B:

  • Option A (pandoc): New exam, no existing formatting to preserve
  • Option B (docx-js): New exam, need professional formatting from scratch
  • Option C (OOXML edit): Updating existing formatted DOCX (e.g., adding questions, fixing content)

Step 4: Post-conversion validation

  • Verify both DOCX files exist and exam > 10KB
  • CRITICAL: grep the exam markdown for internal tags: grep -cE "\[(Scenario|Concept|Transfer|Critical)" assessments/{SLUG}-exam.md → MUST be 0. If not: FAIL "Internal tags leaked into student exam"
  • Verify NO "Answer:" or "Reasoning:" text in exam DOCX
  • Report: file paths, question count, concept coverage percentage

Step 5: Cleanup (optional)

  • Keep concept map (useful reference)
  • Keep question files (for regeneration)
  • Delete intermediate markdown if user prefers clean output

Failure Modes (Summary)

FailurePreventionDetection
Curriculum context skippedPhase 0 MANDATORYPart README not read before lesson reading
Prerequisite chapters over-weightedChapter role classification"prerequisite" chapters should get 2-5%, not equal weight
Lesson count = question countTwo-level weighting (chapter + lesson)Distribution ignores book learning objectives
Memorization questionsStructural FAIL conditionsgrep for "According to", "Lesson [0-9]"
Length bias (correct 2x+ longer)Per-question ratio FAIL: all options within 0.8x-1.2x of meanWord count ratio per question, batch >15% = FAIL
Position bias (B/C clustering)Anti-gaming FAIL: middle >55%Count B+C vs A+D distribution
Specificity biasWARN: correct >30% more specificScore options with examples/qualifiers
Answer bias (74% A)Anti-gaming FAIL: any letter >30%Count distribution per letter
Fabricated conceptsGrounding notes requiredEvery concept must cite a notes entry
Too few questionsImportance-weighted: core=3-5, supporting=1-2, intro=0-1Weighted sum drives minimum, not flat count
Wrong chapter/partls -d filesystem discoveryPath validation before proceeding
Missing lessonsComplete lesson count + notes fileNotes file has entry per lesson
No coordinationTaskList created upfrontTask status visible across phases
Context overloadSubagents receive only concept map + types~300 lines context vs 937+176KB
Internal tags in examStrip [Type] and [Concept:] in Phase 4grep for brackets in exam.md = 0
Answers in student fileTwo separate files (exam + key)No "Answer:" in exam DOCX
Bullet points in DOCXUse **A.** format, never A)pandoc treats A) as list marker
DOCX formatting lossUse Option C (OOXML edit) when existing formatted DOCX existspandoc --reference-doc loses inline formatting
Answer key drift after replacementsWhen replacing questions, explicitly update answer key answersDiff old vs new answer keys, confirm changed Q numbers

For historical context on these failures, see the Jan 2026 postmortem in the skill's git history.


Reference Files

FilePurposeUsed By
references/question-types.md4 type definitions with examplesSubagents (Phase 2)
references/concept-extraction-guide.mdHow to extract concepts vs factsThis agent (Phase 1)
references/subagent-template.mdPrompt templates for 2 subagentsThis agent (Phase 2 spawning)
references/validation-rules.mdAnti-memorization + distribution checksThis agent (Phase 3)
references/bias-detection-guide.mdLength/position/specificity bias detectionThis agent (Phase 3)
references/bloom-taxonomy.mdCognitive level referenceSubagents (question design)
references/psychometric-standards.mdDIF/DIS/DF metricsThis agent (Phase 3 validation)
references/distractor-generation-strategies.mdDistractor design patternsSubagents (option creation)
references/academic-rigor-tiers.mdT1-T3 difficulty frameworksThis agent (Phase 1 tier selection)

Observability (Principle 7)

Report at each phase transition:

Phase 0 Complete (Curriculum Context):
  - Part/Book goal: {thesis statement}
  - Chapters in scope: {N}
  - Chapter weights:
    | Chapter | Role | Weight | Questions |
    | Ch 3 | core-practical | 35% | 52 |
    | Ch 6 | core-conceptual | 20% | 30 |
    ...
  - User confirmed: {yes/adjusted to X}

Phase 0.5 Complete:
  - Chapter type: {practical-tool | conceptual | hybrid}
  - Domain keywords: {keywords}
  - Lessons: {N} total ({N} core, {N} supporting, {N} intro)
  - Notes: assessments/{SLUG}-notes.md

Phase 1 Complete:
  - Concepts extracted: {N}
  - Relationships found: {N}
  - Trade-offs identified: {N}
  - Weighted question count: {N} (T{tier})
  - Type distribution: Scenario={N}% Relationship={N}% Transfer={N}% Evaluation={N}%
  - Concept map: assessments/{SLUG}-concepts.md

Phase 2 Complete:
  - Subagent A: {N} questions generated ({types})
  - Subagent B: {N} questions generated ({types})
  - Total: {N} questions

Phase 3 Complete:
  - Validation: {PASS/FAIL}
  - Failed questions: {N} (reasons: ...)
  - Answer distribution: A={N} B={N} C={N} D={N}
  - Concept coverage: {X}/{Y} ({Z}%)

Phase 4 Complete:
  - DOCX: assessments/{SLUG}-Assessment-Final.docx
  - Size: {N}KB
  - Questions: {N}
  - Ready for distribution

平台分布

Codex

36.9%
按下载量换算156

Claude

31.13%
按下载量换算132

Cursor

20.8%
按下载量换算88

Gemini CLI

8.97%
按下载量换算38

安全审计

Gen Agent Trust Hub

未通过

Socket

通过

Snyk

通过

权限和风险

只读

该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills