Operations

Aweek’sworthofpermitapplicationsreviewed,sorted,andcode-checkedbeforelunch.

A planning department receives 80–120 applications a week. The agent reads each one, cross-references the current building code, zoning ordinance, and project description, and sorts them: complete applications go to the approval queue with a summary; incomplete ones get a deficiency notice citing the exact code section and what’s missing. Reviewers start from a queue of actionable files, not a stack of paper.

Key Takeaways

Same-day triage

Every application submitted before midnight is classified, code-checked, and queued for officer review by 8 AM the next morning.

Code compliance pre-checked

Municipal building code requirements are verified against the application before a permit officer opens the file. Obvious violations are flagged with the relevant section number.

Accurate classification

Applications are sorted by permit type and routed to the correct review queue.

Volume without backlog

A burst of 200 applications processes in the same window as 20. The queue does not grow.

Completeness verified

Missing forms, absent site plans, and unsigned declarations are caught automatically. Incomplete applications are returned with a specific deficiency list before they reach staff.

The permit desk is buried. The code is the answer.

Municipal permit offices process hundreds of applications weekly — each arriving in a different format, with varying levels of completeness, against a code document that runs to thousands of pages. The triage step alone consumes significant officer hours before any substantive review begins.

The automation takes everything that happens before an officer opens a file. It reads each incoming application, extracts the key attributes, classifies it against the permit taxonomy, checks completeness against the required document checklist, and runs a preliminary code compliance pass that flags sections likely to be triggered by the described work.

Officers open a queue. Each item is already sorted, annotated, and pre-checked. They do what permit officers are trained for: judgment calls, not paperwork arithmetic.

One call per application

Point the automation at the incoming application folder. It reads every PDF and form, classifies each by permit type, checks completeness, and runs a preliminary building code screen — all before a permit officer sees the file.

python
import dspy
from predict_rlm import File, PredictRLM


class TriagePermitApplication(dspy.Signature):
    """Read a building permit application, classify it by permit type,
    verify completeness against the municipal checklist, and flag any
    preliminary building code issues with relevant section references."""

    application: File          = dspy.InputField(desc="Permit application (PDF or form submission)")
    permit_checklist: File     = dspy.InputField(desc="Document requirements per permit type")
    building_code: File        = dspy.InputField(desc="Municipal building code reference")
    triage_summary: str        = dspy.OutputField(desc="Permit type, completeness status, and flagged code sections")
    deficiency_list: list[str] = dspy.OutputField(desc="Missing documents or required corrections, if any")


agent = PredictRLM(TriagePermitApplication, lm="openai/gpt-5.1", max_iterations=8)

for app_file in incoming_applications:
    result = agent(
        application=File(path=app_file),
        permit_checklist=File(path="checklists/permit-requirements.xlsx"),
        building_code=File(path="code/municipal-building-code-2024.pdf"),
    )
    # result.triage_summary → routed to correct officer queue
    # result.deficiency_list → returned to applicant if non-empty

Built on predict-rlm — open source. github.com/Trampoline-AI/predict-rlm

What the permit officer sees

Each application arrives in the officer's queue pre-sorted by permit type, annotated with a triage summary — type of work, applicable code sections, and completeness status. Incomplete applications never reach the queue; they are returned to the applicant with a specific deficiency list identifying exactly which documents are missing or incorrect. The permit officer's first action is judgment, not data entry.