Agent Skillsopensquilla/opensquilla › meta-pdf-intelligence

meta-pdf-intelligence

GitHub

元技能,用于PDF分析、摘要、对比及问答。通过多技能编排实现提取、综合与证据索引,确保结果可追溯并存储结构化记忆。

src/opensquilla/skills/exp/meta-pdf-intelligence/SKILL.md opensquilla/opensquilla

Trigger Scenarios

需要PDF内容分析 PDF摘录摘要或对比 涉及跨文档的综合推理 要求提供可追溯的证据来源

Install

npx skills add opensquilla/opensquilla --skill meta-pdf-intelligence -g -y
More Options

Non-standard path

npx skills add https://github.com/opensquilla/opensquilla/tree/main/src/opensquilla/skills/exp/meta-pdf-intelligence -g -y

Use without installing

npx skills use opensquilla/opensquilla@meta-pdf-intelligence

指定 Agent (Claude Code)

npx skills add opensquilla/opensquilla --skill meta-pdf-intelligence -a claude-code -g -y

安装 repo 全部 skill

npx skills add opensquilla/opensquilla --all -g -y

预览 repo 内 skill

npx skills add opensquilla/opensquilla --list

SKILL.md

Frontmatter
{
    "kind": "meta",
    "name": "meta-pdf-intelligence",
    "always": false,
    "triggers": [
        "看一下这个 PDF",
        "看看这个 PDF",
        "读一下这个 PDF",
        "分析这个 PDF",
        "总结这个 PDF",
        "帮我看 PDF",
        "处理 PDF",
        "PDF 抽要",
        "PDF intelligence",
        "pdf digest",
        "compare these PDFs",
        "page-backed findings",
        "PDF excerpt",
        "pasted PDF excerpt",
        "PDF page says",
        "analyze these PDFs",
        "PDF analysis",
        "PDF comparison",
        "PDF 摘录"
    ],
    "provenance": {
        "origin": "opensquilla-original",
        "license": "Apache-2.0"
    },
    "composition": {
        "steps": [
            {
                "id": "intake",
                "kind": "llm_chat",
                "with": {
                    "task": "Parse the PDF request into a document-analysis contract. Determine\nwhether this is a single-PDF summary, multi-PDF comparison, or a\ntargeted question-answer task. Preserve every file path or URL the\nuser mentioned. Treat quoted page text, pasted excerpts, and phrases\nlike \"I don't have the PDF upload handy\" as first-class source\nstatus signals.\n\nUser request:\n{{ inputs.user_message | xml_escape | truncate(1200) }}\n\nReturn exactly:\nMODE: <single_summary|multi_compare|question_answer>\nSOURCE_STATUS: <readable_pdf|inline_excerpts_only|mixed_pdf_and_inline|reference_without_content>\nDOCUMENTS:\n  - <path or URL>\nUSER_EXCERPTS:\n  - PAGE: <page number or unknown>\n    QUOTE: <verbatim user-provided excerpt or empty>\nQUESTION: <specific question or empty>\nOUTPUT_LANGUAGE: <language>\nNEEDS_CLARIFICATION: <yes|no>\nMISSING_FIELDS:\n  - <source_material|question|none>\nCLARIFY_REASON: <one concise reason, or none>\n",
                    "system": "You parse PDF-analysis requests into strict extraction contracts."
                }
            },
            {
                "id": "pdf_clarify",
                "kind": "user_input",
                "when": "'NEEDS_CLARIFICATION: yes' in outputs.intake",
                "clarify": {
                    "mode": "form",
                    "intro": "PDF 分析缺少可用来源或目标问题。请补齐材料,或确认只基于已提供摘录\/文件名给出有限结论。\n",
                    "fields": [
                        {
                            "name": "source_status",
                            "type": "enum",
                            "prompt": "来源状态 \/ Source status",
                            "choices": [
                                "readable_pdf",
                                "inline_excerpts_only",
                                "reference_only"
                            ],
                            "required": true
                        },
                        {
                            "name": "source_material",
                            "type": "string",
                            "prompt": "PDF 路径\/URL、上传说明,或页面摘录 \/ PDF path, URL, upload note, or excerpts",
                            "required": true,
                            "max_chars": 2000
                        },
                        {
                            "name": "question",
                            "type": "string",
                            "prompt": "具体问题 \/ Specific question",
                            "max_chars": 300
                        },
                        {
                            "name": "output_language",
                            "type": "enum",
                            "prompt": "输出语言 \/ Output language",
                            "choices": [
                                "zh",
                                "en",
                                "ja",
                                "other"
                            ],
                            "default": "zh"
                        }
                    ],
                    "nl_extract": true,
                    "timeout_hours": 24,
                    "cancel_keywords": [
                        "算了",
                        "取消",
                        "cancel",
                        "stop",
                        "abort"
                    ]
                },
                "depends_on": [
                    "intake"
                ]
            },
            {
                "id": "extract",
                "when": "'SOURCE_STATUS: inline_excerpts_only' not in outputs.intake and (\n  'SOURCE_STATUS: reference_without_content' not in outputs.intake\n  or inputs.get('collected', {}).get('pdf_clarify', {}).get('source_status') == 'readable_pdf'\n) and \"don't have the pdf\" not in (inputs.user_message | lower) and \"do not have the pdf\" not in (inputs.user_message | lower) and \"no pdf upload\" not in (inputs.user_message | lower) and \"pdf upload handy\" not in (inputs.user_message | lower) and not ('page ' in (inputs.user_message | lower) and ' says ' in (inputs.user_message | lower))",
                "with": {
                    "task": "Extract text, tables, page numbers, headings, and document names for\nthis PDF analysis contract:\n{{ outputs.intake | truncate(2000) }}\n\nDo not invent PDF content. If no readable local path, URL, or\nattachment is actually accessible, return UNAVAILABLE with the\nreason instead of a synthetic summary.\n"
                },
                "skill": "pdf-toolkit",
                "depends_on": [
                    "intake",
                    "pdf_clarify"
                ],
                "on_failure": "inline_excerpt_extract"
            },
            {
                "id": "inline_excerpt_extract",
                "kind": "llm_chat",
                "with": {
                    "task": "The PDF extraction skill could not read the file in this runtime.\nBuild a minimal evidence packet only from filenames, URLs, quoted\nexcerpts, pasted text, and explicit user claims in the request.\nClearly label missing page evidence as unavailable.\n\nUser request:\n{{ inputs.user_message | xml_escape | truncate(4000) }}\n",
                    "system": "You provide a safe fallback when a PDF file is unavailable to the extractor."
                }
            },
            {
                "id": "per_document_digest",
                "with": {
                    "text": "Intake:\n{{ outputs.intake }}\n\nOriginal user request:\n{{ inputs.user_message | xml_escape | truncate(4000) }}\n\nExtracted PDF content:\n{{ outputs.extract }}\n\nIf extraction was skipped, unavailable, or inconsistent with the\nUSER_EXCERPTS in intake, summarize only the user-provided excerpts\nand explicitly mark all other document content as unavailable.\n",
                    "style": "pdf_per_document_digest",
                    "max_words": 2500
                },
                "skill": "summarize",
                "depends_on": [
                    "extract"
                ]
            },
            {
                "id": "cross_document_synthesis",
                "kind": "llm_chat",
                "with": {
                    "task": "Synthesize the PDF analysis according to the intake mode. For\nsingle_summary, produce a structured summary. For multi_compare,\ncompare agreements, conflicts, and unique claims. For question_answer,\nanswer the question directly first.\n\nRequirements:\n- produce a compact final deliverable, not process commentary\n- source hierarchy: first trust verbatim user-provided excerpts and\n  pasted text; then trust extractor output only when it is actually\n  from a readable PDF and does not conflict with the user excerpts;\n  then place synthesis under Inferences\n- if SOURCE_STATUS is inline_excerpts_only or reference_without_content,\n  ignore any downstream claims that are not present in USER_EXCERPTS\n  or the original user request\n- if the original user request says the PDF is not uploaded, no PDF\n  is handy, or uses inline phrasing like \"page 3 says ...\", treat\n  the entire answer as EXCERPT-ONLY even if intake or a downstream\n  digest says otherwise\n- if extractor output conflicts with USER_EXCERPTS, treat it as an\n  extraction anomaly, do not include the conflicting claim as fact\n- in EXCERPT-ONLY mode, never claim page count, section headings,\n  tables, figures, authors, in-memory extraction, or unseen page\n  coverage unless those exact facts appear in the user's request\n- use Evidence IDs: E1, E2, E3...\n- include an Evidence Matrix with columns:\n  ID | Document | Page | Evidence | Supports | Confidence\n- cite file names and page numbers whenever available\n- every Key Fact must cite at least one Evidence ID\n- separate Direct Evidence from Inferences; do not put inference\n  inside the fact list\n- never merge evidence from different documents without naming them\n- if the PDF file was not available and only excerpts\/user claims\n  were provided, label the answer EXCERPT-ONLY and do not make\n  document-wide claims\n- for EXCERPT-ONLY answers, include a Source Excerpts table with\n  Page and Verbatim Text before key facts\n- include open questions, extraction limits, and verification needs\n- include a Reusable Memory Index as YAML or JSON with:\n  documents, evidence_ids, key_facts, page_refs, open_questions,\n  tags, confidence\n\nOriginal user request:\n{{ inputs.user_message | xml_escape | truncate(4000) }}\n\nClarification answers (may be empty when not needed):\n{{ inputs.get('collected', {}).get('pdf_clarify', {}) | tojson }}\n\nIntake:\n{{ outputs.intake | truncate(2000) }}\n\nPer-document digest:\n{{ outputs.per_document_digest | truncate(8000) }}",
                    "system": "You synthesize PDF findings with traceable evidence, evidence IDs, and explicit limits."
                },
                "depends_on": [
                    "per_document_digest"
                ]
            },
            {
                "id": "traceable_index",
                "kind": "llm_chat",
                "with": {
                    "task": "Build a compact memory index for later recall. Use structured fields:\ndocuments, key_facts, page_refs, tables, open_questions.\n\nAnalysis:\n{{ outputs.cross_document_synthesis | truncate(6000) }}",
                    "system": "You build compact structured indexes for later PDF recall."
                },
                "depends_on": [
                    "cross_document_synthesis"
                ]
            },
            {
                "id": "memorize",
                "kind": "tool_call",
                "tool": "memory_save",
                "tool_args": {
                    "mode": "append",
                    "path": "memory\/pdf-intel.md",
                    "content": "{{ outputs.traceable_index }}"
                },
                "depends_on": [
                    "traceable_index"
                ],
                "tool_allowlist": [
                    "memory_save"
                ]
            }
        ]
    },
    "description": "Use this meta-skill instead of answering directly when the user needs PDF analysis, pasted PDF excerpt analysis, digesting, comparison, or question answering that benefits from multi-skill orchestration across PDF extraction, summarization, cross-document synthesis, traceable evidence indexing, and memory capture.",
    "meta_priority": 55,
    "final_text_mode": "step:cross_document_synthesis"
}

PDF Intelligence (Meta-Skill)

Process one or more PDFs into a traceable analysis entry. The workflow first classifies the request, preserves file/page evidence, synthesizes across documents when needed, and stores a structured memory index.

Fallback

LLM should manually run pdf-toolkit scripts then summarize and memory_save.

Version History

  • 7f72a32 Current 2026-07-05 18:41

Same Skill Collection

src/opensquilla/skills/bundled/advanced-dubbing-studio/SKILL.md
src/opensquilla/skills/bundled/ai-video-script/SKILL.md
src/opensquilla/skills/bundled/audio-cog/SKILL.md
src/opensquilla/skills/bundled/awesome-webpage-image-download/SKILL.md
src/opensquilla/skills/bundled/awesome-webpage-research/SKILL.md
src/opensquilla/skills/bundled/AwesomeWebpageMetaSkill/SKILL.md
src/opensquilla/skills/bundled/cron/SKILL.md
src/opensquilla/skills/bundled/docx/SKILL.md
src/opensquilla/skills/bundled/filesystem/SKILL.md
src/opensquilla/skills/bundled/git-diff/SKILL.md
src/opensquilla/skills/bundled/github/SKILL.md
src/opensquilla/skills/bundled/history-explorer/SKILL.md
src/opensquilla/skills/bundled/html-coder/SKILL.md
src/opensquilla/skills/bundled/html-to-pdf/SKILL.md
src/opensquilla/skills/bundled/http-fetch/SKILL.md
src/opensquilla/skills/bundled/latex-compile/SKILL.md
src/opensquilla/skills/bundled/memory/SKILL.md
src/opensquilla/skills/bundled/music-and-singing-studio/SKILL.md
src/opensquilla/skills/bundled/nano-banana-pro-openrouter/SKILL.md
src/opensquilla/skills/bundled/nano-banana-pro/SKILL.md
src/opensquilla/skills/bundled/nano-pdf/SKILL.md
src/opensquilla/skills/bundled/openrouter-video-generator/SKILL.md
src/opensquilla/skills/bundled/paper-abstract-author/SKILL.md
src/opensquilla/skills/bundled/paper-citation-planner/SKILL.md
src/opensquilla/skills/bundled/paper-experiment-stub/SKILL.md
src/opensquilla/skills/bundled/paper-outline-author/SKILL.md
src/opensquilla/skills/bundled/paper-preference-planner/SKILL.md
src/opensquilla/skills/bundled/paper-refbib-stub/SKILL.md
src/opensquilla/skills/bundled/paper-revision-author/SKILL.md
src/opensquilla/skills/bundled/paper-section-author/SKILL.md
src/opensquilla/skills/bundled/paper-source-curator/SKILL.md
src/opensquilla/skills/bundled/pptx/SKILL.md
src/opensquilla/skills/bundled/seedance-2-prompt/SKILL.md
src/opensquilla/skills/bundled/skill-creator-linter/SKILL.md
src/opensquilla/skills/bundled/skill-creator-proposals/SKILL.md
src/opensquilla/skills/bundled/skill-creator-smoke-test/SKILL.md
src/opensquilla/skills/bundled/srt-from-script/SKILL.md
src/opensquilla/skills/bundled/stack-trace-generic-probe/SKILL.md
src/opensquilla/skills/bundled/stack-trace-go-probe/SKILL.md
src/opensquilla/skills/bundled/stack-trace-js-probe/SKILL.md
src/opensquilla/skills/bundled/stack-trace-python-probe/SKILL.md
src/opensquilla/skills/bundled/stack-trace-rust-probe/SKILL.md
src/opensquilla/skills/bundled/subtitle-burner/SKILL.md
src/opensquilla/skills/bundled/swe-bench/SKILL.md
src/opensquilla/skills/bundled/text-file-read/SKILL.md
src/opensquilla/skills/bundled/title-card-image/SKILL.md
src/opensquilla/skills/bundled/video-merger/SKILL.md
src/opensquilla/skills/bundled/video-still-animator/SKILL.md
src/opensquilla/skills/bundled/voice-clone-lab/SKILL.md
src/opensquilla/skills/bundled/voice-conversion-studio/SKILL.md
src/opensquilla/skills/bundled/voiceover-studio/SKILL.md
src/opensquilla/skills/bundled/weather/SKILL.md
src/opensquilla/skills/bundled/web-search/SKILL.md
src/opensquilla/skills/bundled/xlsx/SKILL.md
src/opensquilla/skills/exp/meta-arxiv-daily-digest-deck/SKILL.md
src/opensquilla/skills/exp/meta-codereview-current-diff/SKILL.md
src/opensquilla/skills/exp/meta-compliance-audit-bundle/SKILL.md
src/opensquilla/skills/exp/meta-diagram-triangulation/SKILL.md
src/opensquilla/skills/exp/meta-github-pr-watch-digest/SKILL.md
src/opensquilla/skills/exp/meta-issue-to-pr-autopilot/SKILL.md
src/opensquilla/skills/exp/meta-knowledge-base-bootstrap/SKILL.md
src/opensquilla/skills/exp/meta-migration-assistant/SKILL.md
src/opensquilla/skills/exp/meta-multi-format-export-pack/SKILL.md
src/opensquilla/skills/exp/meta-pdf-reformat-pipeline/SKILL.md
src/opensquilla/skills/exp/meta-pre-commit-quality-gate/SKILL.md
src/opensquilla/skills/exp/meta-scheduled-morning-digest/SKILL.md
src/opensquilla/skills/exp/meta-security-review-bundle/SKILL.md
src/opensquilla/skills/exp/meta-spreadsheet-insight/SKILL.md
src/opensquilla/skills/exp/meta-stack-trace-investigator/SKILL.md
src/opensquilla/skills/exp/meta-travel-planner/SKILL.md
src/opensquilla/skills/exp/meta-web-to-pdf-briefing/SKILL.md
tests/_fixtures/meta-paper-write-handwritten.SKILL.md
src/opensquilla/skills/bundled/code-task/SKILL.md
src/opensquilla/skills/bundled/deep-research/SKILL.md
src/opensquilla/skills/bundled/meta-kid-project-planner/SKILL.md
src/opensquilla/skills/bundled/meta-paper-write/SKILL.md
src/opensquilla/skills/bundled/meta-short-drama/SKILL.md
src/opensquilla/skills/bundled/meta-skill-creator/SKILL.md
src/opensquilla/skills/bundled/multi-search-engine/SKILL.md
src/opensquilla/skills/bundled/pdf-toolkit/SKILL.md
src/opensquilla/skills/bundled/skill-creator/SKILL.md
src/opensquilla/skills/bundled/sub-agent/SKILL.md
src/opensquilla/skills/bundled/summarize/SKILL.md
src/opensquilla/skills/bundled/tmux/SKILL.md
src/opensquilla/skills/exp/meta-long-running-build-watchdog/SKILL.md
src/opensquilla/skills/bundled/paper-plot-stub/SKILL.md
src/opensquilla/skills/exp/meta-content-publish-pipeline/SKILL.md
src/opensquilla/skills/exp/meta-home-it-rescue/SKILL.md
src/opensquilla/skills/exp/meta-meeting-to-workflow/SKILL.md
src/opensquilla/skills/exp/meta-research-to-slide-deck/SKILL.md
src/opensquilla/skills/exp/meta-sales-lead-researcher/SKILL.md

Metadata

Files
0
Version
7f72a32
Hash
9b0eb54b
Indexed
2026-07-05 18:41

trang chủ - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-07-09 01:11
浙ICP备14020137号-1 $bản đồ khách truy cập$