Owner Approval Routing

The plumbing for every gated action. Takes a pending `ApprovalRequest` and routes it to the correct approvers per the approval matrix row and org overlay, tracks SLA, and records the outcome to the approval audit log. Invoked by any workflow that opens an approval request. Never decides on behalf of humans; composes and routes.

6 stars

Best use case

Owner Approval Routing is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

The plumbing for every gated action. Takes a pending `ApprovalRequest` and routes it to the correct approvers per the approval matrix row and org overlay, tracks SLA, and records the outcome to the approval audit log. Invoked by any workflow that opens an approval request. Never decides on behalf of humans; composes and routes.

Teams using Owner Approval Routing should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/owner_approval_routing/SKILL.md --create-dirs "https://raw.githubusercontent.com/mariourquia/cre-skills-plugin/main/src/skills/residential_multifamily/workflows/owner_approval_routing/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/owner_approval_routing/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How Owner Approval Routing Compares

Feature / AgentOwner Approval RoutingStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

The plumbing for every gated action. Takes a pending `ApprovalRequest` and routes it to the correct approvers per the approval matrix row and org overlay, tracks SLA, and records the outcome to the approval audit log. Invoked by any workflow that opens an approval request. Never decides on behalf of humans; composes and routes.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Owner Approval Routing

## Workflow purpose

Deliver approval requests to the right approvers, in the right order, with the right package, and with an enforced SLA. Produce a complete audit trail. Every gated action in the subsystem depends on this workflow; its job is to make approvals a simple, reliable plumbing layer.

## Trigger conditions

- **Explicit:** "route this approval", "open approval request for X", "approval status update".
- **Implicit:** any workflow writes an `ApprovalRequest` record.
- **Recurring:** continuous; SLA screen runs daily.

## Inputs (required / optional)

| Input | Type | Required | Notes |
|---|---|---|---|
| `ApprovalRequest` record | record | required | includes matrix row, subject, actor, proposed action |
| Approval routing policy overlay | yaml | required | per-org overrides to matrix defaults |
| Approver roster | yaml | required | org contacts per role |
| Related artifacts | package | required | memos, drafts, estimates |

## Outputs

| Output | Type | Shape |
|---|---|---|
| Routing plan | `checklist` | approvers in order, SLA, deadlines |
| Approval packet | bundle | all artifacts a human needs |
| Approver notifications | `email_draft` | `draft_for_review` initially; sent once automated send is overlay-permitted |
| Audit log entry | jsonl | append to `reference/derived/approval_audit_log.jsonl` |
| Status updates | record | open, approved, denied, cancelled, expired |

## Required context

Asset_class, segment, org, matrix row, subject object type. Additional axes depend on the action.

## Process

1. **Receive `ApprovalRequest`.** Validate fields against schema; reject incomplete.
2. **Resolve row and approvers.** Read `approval_matrix.md` row + `approval_routing_policy__{org}.yaml` overrides; compose ordered approver list.
3. **Assemble packet.** Include all linked artifacts from the opening workflow.
4. **Notify.** Draft messages to approvers; tone per overlay; sending behavior per overlay (typically `draft_for_review` for human send; overlay may permit auto-send to internal approvers).
5. **Track.** On each approver's decision, record in the audit log. Cumulative status computed.
6. **SLA screen.** Daily sweep for approvals past SLA; route escalation per overlay.
7. **Final outcome.** On approval completion, release the gated action in the originating workflow. On denial, update `ApprovalRequest` status and notify the opener.
8. **Audit log append.** Every transition writes one entry.
9. **Confidence banner.** Overlay `as_of_date` and `status` surfaced.

## Metrics used

`approval_response_time_tpm` (where applicable). Generic response time metrics derived from the audit log.

## Reference files used

- `reference/normalized/approval_threshold_defaults.csv`
- `reference/normalized/approval_routing_policy__{org}.yaml`
- `reference/derived/approval_audit_log.jsonl` (writes)

## Escalation points

- Approval SLA breach: next-level approver per overlay; if still stalled, executive escalation.

## Required approvals

None for the routing itself. The workflow is the routing layer.

## Failure modes

1. Routing without overlay. Fix: org routing overlay required.
2. Missing audit log entry. Fix: every transition writes one.
3. Auto-sending external notifications without overlay permission. Fix: default to `draft_for_review`.
4. Releasing gated action before final approval. Fix: final outcome gate explicit.
5. Losing artifacts between steps. Fix: packet is a bundle, not a reference chain.

## Edge cases

- **Approver on vacation / unavailable:** overlay designates alternate; routing skips to next per overlay policy.
- **Conditional approvals (e.g., approved pending clarification):** request remains open with the condition; condition-close step required.
- **Parallel approvers (any-of vs. all-of):** overlay governs; matrix row default applies.
- **Retroactive approval attempt:** the workflow refuses; retroactive approval is not a valid state.
- **Amended request mid-review:** amendment creates new request linked to prior; approvers re-acknowledge.

## Example invocations

1. "Route this capex award for Ashford Park roof replacement."
2. "Status update on all open row 14 approvals for the South End portfolio."
3. "Renewal concession above policy for 3 leases at Willow Creek — route."

## Example outputs

### Output — Routing plan (abridged)

**Request.** Row 9 bid award for Ashford Park roof replacement.

**Approvers.** Construction_manager -> asset_manager (minimum per matrix + overlay).

**Packet.** Level sheet, recommended award memo, scope clarification closure status, vendor verification status.

**Notifications.** Draft messages produced; `draft_for_review`; overlay permits auto-send to internal approvers on PM confirmation.

**SLA.** Overlay-defined window.

**Audit log.** Opened-entry appended.

**Confidence banner.** `approval_routing_policy__{org}@2026-03-31, status=starter`. `approval_threshold_defaults@2026-03-31, status=starter`.

Related Skills

workout-playbook

6
from mariourquia/cre-skills-plugin

Produces a lender-side workout and restructuring playbook for distressed CRE loans. Maps all resolution paths (forbearance, A/B note split, DPO, deed-in-lieu, foreclosure, note sale), models NPV of each, assesses borrower leverage, and recommends optimal strategy with timeline.

Work Order Triage

6
from mariourquia/cre-skills-plugin

Classifies work order urgency from free-text descriptions, assigns priority (P1-P4) with SLA deadlines, estimates cost, checks lease responsibility, and routes to the correct approval path.

warehouse-to-exhibit-mapper

6
from mariourquia/cre-skills-plugin

Maps validated, warehouse-ready tabular datasets into deck-ready EXHIBIT specifications and slide inputs. Selects table vs. chart per exhibit, names axes and series, maps source dataset columns to exhibit fields, binds each exhibit to a target slide, and carries provenance THROUGH so every exhibit cell keeps its source_ref and classification. Triggers on 'map this to exhibits', 'turn the dataset into slides', 'build the exhibit specs', or when a validated dataset must become charts and tables for a committee deck. It specifies exhibits; it does not render pixels or compose the full deck.

vendor-invoice-validator

6
from mariourquia/cre-skills-plugin

Validates vendor invoices against contract terms, scope of work, and market rates. Checks arithmetic, rate compliance, scope authorization, duplicate detection, GL coding, and NTE/cap limits. Assigns APPROVED, APPROVED WITH FLAGS, or HOLD FOR REVIEW verdict.

variance-narrative-generator

6
from mariourquia/cre-skills-plugin

Generates ownership-ready variance narratives from budget-vs-actual reports. Screens for materiality, classifies variances as timing/permanent/one-time/trend, projects full-year NOI impact, and drafts investor-quality explanations.

transfer-document-preparer

6
from mariourquia/cre-skills-plugin

Prepare entity transfer documents, closing document packages, and assignment agreements for CRE acquisitions. Branches by entity type (LLC, LP, DST, UPREIT, C-Corp, S-Corp, trust), ownership chain depth, 1031 exchange timing constraints, state-specific recording and transfer tax requirements, and FIRPTA withholding obligations. Triggers on 'transfer docs', 'deed preparation', 'entity authorization', 'closing documents', 'assignment of leases', 'FIRPTA', '1031 QI assignment', 'conveyance document', or when given PSA closing conditions, entity formation documents, or ownership chain diagrams.

title-commitment-reviewer

6
from mariourquia/cre-skills-plugin

Analyze ALTA title commitments, surveys, and Schedule B exceptions for CRE acquisitions. Identifies title defects, chain breaks, lien conflicts, and cure requirements. Triggers on 'title commitment', 'Schedule B exceptions', 'title review', 'title exceptions', 'encumbrances', 'survey cross-reference', 'title chain', 'mechanic's lien', 'title cure', or when given a title commitment document, survey, or lien search results.

term-sheet-builder

6
from mariourquia/cre-skills-plugin

Draft and negotiate CRE financing term sheets from lender quotes. Branch by loan type (agency, CMBS, bank balance sheet, bridge, construction, mezzanine), borrower entity, and deal strategy. Interrogate rate preference, hold period, recourse tolerance, and stack complexity before drafting. Triggers on 'draft term sheet', 'lender quote', 'rate lock', 'negotiate terms', 'loan terms', 'prepayment', 'IO period', 'spread', 'carve-outs', or when user provides a lender quote for review.

tenant-retention-engine

6
from mariourquia/cre-skills-plugin

Generates comprehensive tenant retention strategies with per-tenant renewal probability scoring, retention NPV analysis, WALT impact quantification, DSCR covenant monitoring, competitive intelligence, game theory framing for multi-tenant dynamics, and blend-and-extend modeling. Includes backfill mode (lease-up war room) when retention fails. Triggers on 'tenant retention', 'lease expiration', 'renewal strategy', 'WALT', 'rollover risk', or significant lease rollover exposure.

tenant-event-planner

6
from mariourquia/cre-skills-plugin

Plans, budgets, and executes tenant appreciation events, seasonal programming, and community engagement for CRE properties. Supports API-driven vendor booking when MCP integrations are available. Triggers: tenant event, appreciation event, holiday party, tenant engagement, community event, property event planning, seasonal programming.

tenant-delinquency-workout

6
from mariourquia/cre-skills-plugin

Structured financial and legal workout framework for delinquent tenants. Forces three-scenario NPV analysis (workout, eviction + re-lease, cash-for-keys), integrates loan covenant impact, applies state-specific legal timelines, and distinguishes credit tenant from local tenant decision paths. Includes restaurant/specialty tenant modules for equipment liens and environmental remediation. Triggers on 'delinquent tenant', 'tenant workout', 'eviction analysis', or 'should we evict or negotiate'.

tenant-credit-analyzer

6
from mariourquia/cre-skills-plugin

Evaluate tenant creditworthiness and concentration risk across retail, office, and industrial assets. Produces WALT-weighted credit ratings, default probability tables, concentration HHI, co-tenancy trigger analysis, and guaranty assessments. Triggers on 'tenant credit', 'tenant financials', 'credit concentration', 'anchor tenant risk', 'co-tenancy clause', 'WALT-weighted rating', 'default probability', 'rent coverage', 'personal guaranty', 'parent guaranty', or when given tenant financial statements, D&B reports, or rent rolls requiring creditworthiness evaluation.