agentsclimarketplace

Run3 inspect pdf form

Skill cxcscmu/SkillLearnBench/skills/b3-teacher-feedback-gemini-3-flash-preview/court-form-filling/run3_inspect_pdf_form

[COLM'26] SkillLearnBench is the first benchmark for evaluating continual learning methods that automatically generate agent skills.

Install
npx -y skills add cxcscmu/SkillLearnBench --skill run3_inspect_pdf_form

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Extracts detailed information about form fields in a PDF, including field keys, types, page indices, current values, and allowed export values for checkboxes and radio buttons. Use this to identify how multi-line text is split across different keys (e.g., 'Reason_1', 'Reason_2') and to find the exact string required to check a box (e.g., 'Yes', '1', or 'On').

SKILL.md

2.2 KB, as published. Nobody here has run it

import pypdf

def inspect_pdf_form(pdf_path: str): """ Inspects the PDF to provide a map of field names to their properties. Useful for discovering exact keys for multi-line fields and checkbox export values. """ reader = pypdf.PdfReader(pdf_path) form_info = []

# Iterate through pages to find which field belongs to which page
for page_index, page in enumerate(reader.pages):
    if "/Annots" in page:
        for annot in page["/Annots"]:
            obj = annot.get_object()
            # Only process form fields (Widget annotations with a Title /T)
            if obj.get("/Subtype") == "/Widget" and "/T" in obj:
                field_key = obj.get("/T")
                field_type = obj.get("/FT")
                current_value = obj.get("/V", "")
                
                # Extract export values for checkboxes/radio buttons
                # These are typically found in the /AP (Appearance) or /Opt keys
                options = []
                if "/Opt" in obj:
                    options = obj["/Opt"]
                elif "/AS" in obj or "/AP" in obj:
                    # Check normal appearance states for checkboxes
                    ap = obj.get("/AP")
                    if ap and "/N" in ap:
                        options = list(ap["/N"].keys())

                form_info.append({
                    "page": page_index,
                    "key": field_key,
                    "type": field_type,
                    "value": current_value,
                    "options": options
                })

for info in form_info:
    print(f"Page {info['page']} | Key: {info['key']} | Type: {info['type']} | Options: {info['options']}")
return form_info

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.