Missing signatures report
Build a read-only, per-person recap of outstanding document obligations for
organization $ARGUMENTS (or ask the user for the organization name). Cover:
- Signature requests —
REQUESTEDbut notSIGNEDon a published version - Quorum approvals —
PENDINGdecisions on aPENDINGapproval quorum while the version isPENDING_APPROVAL
Before executing, read these files relative to this skill directory:
references/mcp-tools.md— MCP tool names, inputs, paginationreferences/report-format.md— per-person recap and summary layoutreferences/notes-format.md— working memory for resumable scans
Preconditions
- A Probo MCP server must be connected. The plugin ships two hosted servers,
probo-usandprobo-eu; self-hosted instances are configured in the agent. Use the server for the user's region, and when the region is unknown calllistOrganizationson each connected server and keep the one that returns the organization. If tools fail with auth errors, stop and tell the user to complete OAuth sign-in for that server (Claude Code:/mcporclaude mcp login probo-us; Codex:codex mcp login probo-us; OpenCode/Cursor: configure MCP in settings then authenticate). - Resolve the organization from
$ARGUMENTS(name match or GID). If ambiguous, calllistOrganizationsand ask the user to pick one. - This skill is reporting only. Do not request signatures, cancel requests, publish documents, or submit approval decisions unless the user explicitly asks for follow-up actions outside this report.
Working notes file
Create or resume .probo/missing-signatures/<org-slug>.md per
references/notes-format.md. Create .probo/missing-signatures/ if missing.
Workflow
1. Orient
- Record
organization_idin the notes file. - If resuming, read
last_document_cursorand cachedprofile_cachefrom notes. - Tell the user whether this is a fresh scan or a resume.
2. Scan documents (paginated)
For each page from listDocuments:
- Skip
ARCHIVEDdocuments. - Call
listDocumentVersionsfor the document. - For each version, branch on
status:
| Version status | What to check |
|---|---|
PUBLISHED |
listDocumentVersionSignatures with filter.states: ["REQUESTED"] |
PENDING_APPROVAL |
listDocumentVersionApprovalQuorums; for each quorum with status: PENDING, listDocumentVersionApprovalDecisions with filter.states: ["PENDING"] |
Prefer the current published version (current_published_major /
current_published_minor on the document) when multiple published minors exist.
Still scan all PUBLISHED versions if the user asked for exhaustive coverage.
Paginate every list call. Store last_document_cursor after each document page
so a large org can be resumed.
3. Resolve people
Collect unique signed_by and approver_id profile GIDs. Resolve each once via
getUser and cache full_name and email_address in the notes file. Never
invent names.
4. Build per-person recap
Aggregate findings by profile. Each item is either:
| Type | Meaning |
|---|---|
signature |
Signature requested, not yet signed |
approval |
Quorum approval decision still pending |
Use references/report-format.md for the output layout. Sort people by
full_name, then email.
5. Present summary
Show:
- Total people with at least one outstanding item
- Count by type (signatures vs approvals)
- Count by document
- The per-person recap tables
If the scan is incomplete (more document pages), say so and offer to continue.
6. Checkpoint
Update notes: last_document_cursor, profile_cache, session log, updated_at.
Clear last_document_cursor when the document pagination is exhausted.
Hard rules
- Never call write mutations (
requestDocumentVersionSignature,cancelSignatureRequest,publishDocument,voidDocumentVersionApproval) unless the user explicitly requests action after reviewing the report. - Never invent profile IDs, document titles, or states — use MCP responses only.
- Include document title, version (
major.minor), andrequested_ator quorumcreated_aton every line item so the report is audit-ready.