๐Ÿ›ก๏ธ APort Policy Packs

September 7, 2026 ยท View on GitHub

Open Agent Passport (OAP) v1.0 compliant policy definitions for AI agent governance

This directory contains production-ready policy packs that implement the Open Agent Passport (OAP) v1.0 specification for real-time AI agent authorization and policy enforcement.

๐ŸŽฏ What Are Policy Packs?

Policy packs are pre-built, OAP-compliant policy definitions that provide instant governance for your most sensitive AI agent operations. Each pack includes:

  • ๐Ÿ“‹ Standardized Rules - OAP v1.0 compliant evaluation logic
  • ๐Ÿ” Capability Requirements - What agents need to perform actions
  • โšก Real-time Enforcement - Sub-100ms policy decisions
  • ๐Ÿ›ก๏ธ Security Controls - Multi-level assurance and limits
  • ๐Ÿ“Š Audit Trail - Cryptographically signed decisions

๐Ÿš€ Available Policy Packs

๐Ÿค– Agent Management

Policy PackCapabilityMin AssuranceKey Features
agent.session.create.v1agent.session.createL0Session limits, duration restrictions, concurrent session controls
agent.tool.register.v1agent.tool.registerL0Tool naming conventions, capability declarations, registration limits

โœ… Task Completion

Policy PackCapabilityMin AssuranceKey Features
deliverable.task.complete.v1deliverable.task.completeL0Summary word count, acceptance criteria attestations, tests passing, different reviewer, blocked pattern scan

๐Ÿ’ณ Finance & Payments

Policy PackCapabilityMin AssuranceKey Features
finance.payment.charge.v1payments.chargeL2Multi-currency limits, merchant allowlists, category blocking
finance.payment.refund.v1finance.payment.refundL2Cross-currency denial, reason codes, order validation
finance.payment.payout.v1payments.payoutL3Per-currency caps, destination restrictions, compliance requirements
finance.transaction.execute.v1finance.transactionL3Transaction limits, risk scoring, compliance checks
finance.crypto.trade.v1finance.crypto.tradeL3Crypto trading limits, exchange validation, volatility controls

๐Ÿ“Š Data & Privacy

Policy PackCapabilityMin AssuranceKey Features
data.export.create.v1data.exportL1Row limits, PII handling, format validation
data.report.ingest.v1data.report.ingestL2Data quality checks, schema validation, rate limiting
governance.data.access.v1data.accessL3Access controls, data classification, audit logging

๐Ÿ”€ Code & Infrastructure

Policy PackCapabilityMin AssuranceKey Features
code.repository.merge.v1repo.merge, repo.pr.createL2Repository allowlists, branch controls, path restrictions, PR size limits
code.release.publish.v1repo.releaseL3Release validation, repository allowlists, sensitive-file blocks

โš™๏ธ System & Tools

Policy PackCapabilityMin AssuranceKey Features
system.command.execute.v1system.command.executeL0Command allowlists, blocked patterns, execution time limits
mcp.tool.execute.v1mcp.tool.executeL0Server allowlists, tool restrictions, parameter validation

๐ŸŒ Web & Browser

Policy PackCapabilityMin AssuranceKey Features
web.fetch.v1web.fetchL0URL allowlists, blocked domains, method/header restrictions, rate limiting
web.browser.v1web.browserL0URL allowlists, action restrictions (navigate/click/type), screenshot/navigation rate limits

๐Ÿ’ฌ Communication

Policy PackCapabilityMin AssuranceKey Features
messaging.message.send.v1messaging.sendL0Rate limiting, channel restrictions, mention policies
Policy PackCapabilityMin AssuranceKey Features
legal.contract.review.v1legal.contract.reviewL3Firm-specific guardrails, privilege protection, attorney supervision

๐Ÿ—๏ธ Policy Pack Structure

All policy packs follow the OAP v1.0 specification and include:

Core OAP Fields

{
  "id": "finance.payment.charge.v1",
  "name": "Payment Charge Policy", 
  "description": "Pre-action governance for agent-initiated payments...",
  "version": "1.0.0",
  "status": "active",
  "requires_capabilities": ["payments.charge"],
  "min_assurance": "L2"
}

OAP Compliance Features

  • โœ… Standardized Error Codes - Uses oap.* error codes
  • โœ… JSON Schema Validation - Full context validation via required_context
  • โœ… Nested Limits Structure - limits.{capability}.* format (API accepts both nested limits.payments.charge and flat limits["payments.charge"] for compatibility)
  • โœ… Capability-based Authorization - Proper capability checking
  • โœ… Assurance Level Validation - Dynamic assurance requirements
  • โœ… Idempotency Support - Duplicate prevention
  • โœ… Cache Configuration - TTL and invalidation settings

Evaluation Rules

{
  "evaluation_rules_version": "1.0",
  "evaluation_rules": [
    {
      "name": "command_allowlist",
      "type": "expression",
      "condition": "limits.allowed_commands.includes('*') || limits.allowed_commands.includes(context.command)",
      "deny_code": "oap.command_not_allowed",
      "description": "Command must be in allowed list"
    },
    {
      "name": "blocked_patterns",
      "type": "custom_validator",
      "validator": "validateBlockedPatterns",
      "deny_code": "oap.blocked_pattern",
      "description": "Command must not contain blocked patterns"
    }
  ]
}

Note: Evaluation rules support two types:

  • expression: Uses the condition field with JavaScript-like expressions
  • custom_validator: Uses the validator field to reference custom validation functions

๐Ÿ› ๏ธ Implementation Examples

Express.js Middleware

const { requirePolicy } = require("@aporthq/middleware-express");

// Apply payment charge policy
app.post("/api/charges", 
  requirePolicy("finance.payment.charge.v1"),
  async (req, res) => {
    // Policy already verified! Check specific limits
    const passport = req.policyResult.passport;
    
    if (req.body.amount > passport.limits.payments.charge.currency_limits.USD.max_per_tx) {
      return res.status(403).json({
        error: "Charge exceeds limit",
        requested: req.body.amount,
        limit: passport.limits.payments.charge.currency_limits.USD.max_per_tx
      });
    }

    // Process charge safely
    const charge = await stripe.charges.create(req.body);
    res.json({ success: true, charge });
  }
);

FastAPI Middleware

from aport.middleware import require_policy

@app.post("/api/charges")
@require_policy("finance.payment.charge.v1")
async def create_charge(request: Request, charge_data: dict):
    passport = request.state.policy_result.passport
    
    # Check currency limits
    currency_limits = passport.limits["payments.charge"]["currency_limits"]
    if charge_data["amount"] > currency_limits[charge_data["currency"]]["max_per_tx"]:
        raise HTTPException(403, {
            "error": "Charge exceeds limit",
            "requested": charge_data["amount"],
            "limit": currency_limits[charge_data["currency"]]["max_per_tx"]
        })
    
    # Process charge safely
    return {"success": True, "charge_id": f"chg_{int(time.time())}"}

GitHub Actions Integration

name: APort Repository Guard

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]
  push:
    branches: [main]

permissions:
  contents: read
  pull-requests: read
  id-token: write

jobs:
  aport:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: aporthq/policy-verify-action@v1
        with:
          mode: auto

The maintained Action uses GitHub OIDC to issue/reuse a hosted OAP passport and sends Action-collected evidence to code.repository.merge.v1. Do not use older raw curl examples with broad workflow secrets for the default setup. For customer-owned audit trails, configure a repository variable APORT_GITHUB_AGENT_ID and a GitHub Secret APORT_API_KEY, then pass them as agent-id and api-key in hosted mode.

๐Ÿ”ง Creating Custom Policy Packs

1. Use the Template

Copy policy-template.json and replace placeholders:

cp policy-template.json my-custom-policy.v1.json

2. Define Context Schema

Update required_context with your specific fields:

{
  "type": "object",
  "required": ["amount", "currency", "merchant_id"],
  "properties": {
    "amount": {
      "type": "number",
      "minimum": 0.01,
      "description": "Transaction amount"
    },
    "currency": {
      "type": "string",
      "enum": ["USD", "EUR", "GBP"],
      "description": "Transaction currency"
    }
  }
}

3. Add Evaluation Rules

Define OAP-compliant evaluation rules:

{
  "evaluation_rules": [
    {
      "name": "amount_within_limits",
      "condition": "context.amount <= limits.my_capability.max_amount",
      "deny_code": "oap.limit_exceeded",
      "description": "Transaction amount exceeds allowed limit"
    }
  ]
}

4. Configure Enforcement

Set up enforcement rules in the enforcement object:

{
  "enforcement": {
    "assurance_required": "limits.my_capability.require_assurance_at_least",
    "idempotency_required": true,
    "custom_rule": "limits.my_capability.custom_limit"
  }
}

๐Ÿงช Testing Policy Packs

Each policy pack includes comprehensive test suites:

Test Structure

policy-name.v1/
โ”œโ”€โ”€ policy.json              # Policy definition
โ”œโ”€โ”€ README.md                # Documentation
โ”œโ”€โ”€ express.example.js       # Express.js example
โ”œโ”€โ”€ fastapi.example.py       # FastAPI example
โ”œโ”€โ”€ minimal-example.js       # Minimal implementation
โ””โ”€โ”€ tests/
    โ”œโ”€โ”€ passport.template.json    # Template passport
    โ”œโ”€โ”€ passport.instance.json    # Instance passport
    โ”œโ”€โ”€ contexts.jsonl           # Test contexts
    โ”œโ”€โ”€ expected.jsonl           # Expected decisions
    โ”œโ”€โ”€ policy-name.test.js      # JavaScript tests
    โ””โ”€โ”€ test_policy_name.py      # Python tests

Running Tests

# JavaScript tests
npm test

# Python tests  
python -m pytest

# Conformance testing
npx @aporthq/oap-conformance policy-name.v1/

๐Ÿ“Š OAP Compliance Standards

Error Codes

Always use OAP standard error codes:

  • oap.passport_suspended - Agent is suspended
  • oap.assurance_insufficient - Assurance level too low
  • oap.unknown_capability - Missing required capability
  • oap.limit_exceeded - Exceeded limits
  • oap.currency_unsupported - Unsupported currency
  • oap.region_blocked - Region not allowed
  • oap.idempotency_conflict - Duplicate idempotency key

Limits Structure

Use nested limits under capability names:

{
  "limits": {
    "payments.charge": {
      "currency_limits": { 
        "USD": { "max_per_tx": 10000 },
        "EUR": { "max_per_tx": 8500 }
      },
      "require_assurance_at_least": "L2",
      "idempotency_required": true,
      "allowed_merchant_ids": ["merchant_123", "merchant_456"]
    }
  }
}

Assurance Levels

  • L1 - Basic verification (email, domain)
  • L2 - Enhanced verification (GitHub, social proof)
  • L3 - High assurance (KYC, legal verification)

๐Ÿ”„ Migration Guide

From Legacy Policies

  1. Add missing OAP fields (status, cache, evaluation_rules)
  2. Update error codes to OAP standard (oap.*)
  3. Add JSON Schema validation (required_context)
  4. Update limits structure to nested format
  5. Add comprehensive evaluation rules

Version Updates

  • Update version field
  • Update updated_at timestamp
  • Document changes in policy description
  • Maintain backward compatibility where possible

๐Ÿ“š Resources

๐Ÿค Contributing

We welcome contributions to policy packs! Whether it's:

  • ๐Ÿ› Bug fixes in existing policies
  • โœจ New policy packs for additional use cases
  • ๐Ÿ“š Documentation improvements
  • ๐Ÿงช Test coverage enhancements

Check out our Contributing Guide to get started.


๐Ÿ›ก๏ธ Secure your AI agents. Trust but verify.

Last Updated: 2026-02-15 18:32:09 UTC