Asi aaif-governance-interleave
Bridge layer connecting the Agentic AI Foundation (AAIF) governance structure — Linux Foundation stewardship of MCP, goose, AGENTS.md — to the plurigrid/asi skill graph. Formalizes AAIF-compatible skill registration, IPSIE identity profiles, and the cross-protocol interoperability surface. Maps the AAIF platinum member ecosystem (AWS, Anthropic, Block, Bloomberg, Cloudflare, Google, Microsoft, OpenAI) to specific ASI skill integration points.
git clone https://github.com/plurigrid/asi
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/aaif-governance-interleave" ~/.claude/skills/plurigrid-asi-aaif-governance-interleave && rm -rf "$T"
skills/aaif-governance-interleave/SKILL.mdAAIF Governance × ASI Interleave
Bridge connecting the Agentic AI Foundation (AAIF) governance ecosystem to the plurigrid/asi skill graph.
AAIF Structure (as of December 2025)
======= description: > Bridge connecting the Agentic AI Foundation (AAIF) governance ecosystem to skill graphs. Triggers: AAIF compatibility, IPSIE identity profiles, cross-protocol interoperability (MCP/A2A/AGNTCY), enterprise agent identity, goose integration, AGENTS.md skill integration.
AAIF Governance Interleave
Bridge connecting the Agentic AI Foundation (AAIF) governance structure (Linux Foundation stewardship of MCP, goose, AGENTS.md) to skill graphs. Maps the AAIF platinum member ecosystem (AWS, Anthropic, Block, Bloomberg, Cloudflare, Google, Microsoft, OpenAI) to specific integration points.
AAIF Structure
origin/main
Linux Foundation ├── AAIF (Agentic AI Foundation) │ ├── MCP (Model Context Protocol) -- Anthropic-originated │ ├── goose -- agentic framework │ └── AGENTS.md -- agent behavior specification ├── A2A Protocol Project -- Google-led, sibling project ├── LF AI & Data -- absorbed ACP from IBM └── AGNTCY Project -- Cisco-led, 65+ companies <<<<<<< HEAD AAIF Platinum Members: AWS, Anthropic, Block, Bloomberg, Cloudflare, Google, Microsoft, OpenAI
GF(3) Tripartite Tag
ipsie-oracle(-1) ⊗ aaif-governance-interleave(0) ⊗ agent-protocol-interleave(+1) = 0
Validation (-1) × Governance (0) × Integration (+1) = balanced protocol governance.
AAIF Compatibility Layer
# Make any ASI skill AAIF-compatible # Requirement: SKILL.md with valid frontmatter (name, trit, role, version) # Postcondition: skill is registerable with MCP, A2A, and AGNTCY OASF from dataclasses import dataclass from typing import Optional =======
AAIF Compatibility Layer
from dataclasses import dataclass >>>>>>> origin/main import yaml, json @dataclass class AAIFDescriptor: <<<<<<< HEAD """AAIF-compatible skill descriptor covering all three protocol layers.""" name: str description: str version: str trit: int role: str # Protocol-specific schemas ======= """AAIF-compatible skill descriptor covering MCP, A2A, and AGNTCY.""" name: str description: str >>>>>>> origin/main mcp_schema: dict # JSON-RPC tool schema a2a_skill_descriptor: dict # OpenAPI skill descriptor for Agent Card agntcy_oasf: dict # OASF descriptor for AGNTCY discovery ipsie_profile: str # "public" | "enterprise" | "federated" <<<<<<< HEAD aaif_version: str = "1.0" ======= >>>>>>> origin/main def make_aaif_descriptor(skill_path: str) -> AAIFDescriptor: """ Requirement: SKILL.md exists at skill_path with valid frontmatter Postcondition: returns AAIFDescriptor compatible with MCP, A2A, AGNTCY <<<<<<< HEAD Single source of truth: SKILL.md frontmatter → all three protocol formats. """ with open(f"{skill_path}/SKILL.md") as f: content = f.read() # Parse frontmatter meta = yaml.safe_load(content.split("---")[1]) name, desc, version = meta["name"], meta["description"], meta["version"] trit, role = meta["trit"], meta["role"] ======= Single source of truth: SKILL.md frontmatter -> all three protocol formats. """ with open(f"{skill_path}/SKILL.md") as f: content = f.read() meta = yaml.safe_load(content.split("---")[1]) name, desc = meta["name"], meta["description"] >>>>>>> origin/main mcp_schema = { "name": name, "description": desc, "inputSchema": { "type": "object", "properties": { "query": {"type": "string", "description": "Skill invocation query"} } } } a2a_descriptor = { "id": name, "name": name.replace("-", " ").title(), "description": desc, <<<<<<< HEAD "tags": meta.get("tags", []), ======= >>>>>>> origin/main "inputModes": ["text"], "outputModes": ["text", "data"], } oasf = { "schema_version": "1.0", "name": name, "description": desc, <<<<<<< HEAD "version": version, "gf3_trit": trit, "role": role, ======= >>>>>>> origin/main "aaif_compatible": True, "a2a_compatible": True, "mcp_compatible": True, } <<<<<<< HEAD # IPSIE profile based on role ipsie = "enterprise" if role == "VALIDATOR" else "public" return AAIFDescriptor( name=name, description=desc, version=version, trit=trit, role=role, mcp_schema=mcp_schema, a2a_skill_descriptor=a2a_descriptor, agntcy_oasf=oasf, ipsie_profile=ipsie )
IPSIE Profile Compliance
The Interoperability Profiling for Secure Identity in the Enterprise (IPSIE) working group (OpenID Foundation, Okta-led) profiles OAuth 2.1, OIDC, and SCIM for enterprise agent contexts.
# IPSIE compliance checker for ASI skill invocations # Requirement: skill invocation carries IPSIE-compliant token # Postcondition: returns compliance report — NOT a guess, always definite ======= return AAIFDescriptor( name=name, description=desc, mcp_schema=mcp_schema, a2a_skill_descriptor=a2a_descriptor, agntcy_oasf=oasf, ipsie_profile="public" )
IPSIE Profile Compliance
The Interoperability Profiling for Secure Identity in the Enterprise (IPSIE) working group (OpenID Foundation) profiles OAuth 2.1, OIDC, and SCIM for enterprise agent contexts.
>>>>>>> origin/main IPSIE_REQUIRED_CLAIMS = { "sub", # subject (agent identifier) "iss", # issuer (enterprise IdP URL) "aud", # audience (skill endpoint) "exp", # expiration (JIT: must be < 15 minutes) "scope", # authorized capabilities "azp", # authorized party (agent client ID) } <<<<<<< HEAD IPSIE_SCIM_ATTRIBUTES = { "agent:id", # unique agent identifier "agent:version", # agent version "agent:role", # VALIDATOR | ERGODIC | GENERATOR "agent:trit", # GF(3) trit class } def check_ipsie_compliance(jwt_token: str, required_scope: str) -> dict: """ Requirement: jwt_token is a signed JWT from an enterprise IdP Postcondition: returns compliance report with specific violations (NOT 'probably ok') Based on arXiv:2510.25819 (OpenID Foundation whitepaper on agentic AI identity). Sufficient for SINGLE-TRUST-DOMAIN deployments. Multi-domain: see gap G-P7 in agent-protocol-interleave. """ try: claims = decode_jwt(jwt_token) # validates signature ======= def check_ipsie_compliance(jwt_token: str, required_scope: str) -> dict: """ Requirement: jwt_token is a signed JWT from an enterprise IdP Postcondition: returns compliance report with specific violations Based on arXiv:2510.25819 (OpenID Foundation whitepaper on agentic AI identity). Sufficient for single-trust-domain deployments. """ import time try: claims = decode_jwt(jwt_token) >>>>>>> origin/main except Exception as e: return {"compliant": False, "violation": f"JWT decode failed: {e}"} violations = [] <<<<<<< HEAD # Check required claims ======= >>>>>>> origin/main missing = IPSIE_REQUIRED_CLAIMS - set(claims.keys()) if missing: violations.append(f"Missing IPSIE required claims: {missing}") <<<<<<< HEAD # Check expiration (JIT tokens must be short-lived) import time if claims.get("exp", 0) - time.time() > 900: # > 15 minutes violations.append(f"Token lifetime exceeds IPSIE JIT limit (15 min)") # Check scope ======= if claims.get("exp", 0) - time.time() > 900: violations.append("Token lifetime exceeds IPSIE JIT limit (15 min)") >>>>>>> origin/main granted_scopes = set(claims.get("scope", "").split()) if required_scope not in granted_scopes: violations.append(f"Required scope '{required_scope}' not granted") return { "compliant": len(violations) == 0, "violations": violations, "claims_present": list(claims.keys()), "expires_in_seconds": claims.get("exp", 0) - time.time(), <<<<<<< HEAD "ipsie_profile": "enterprise", }
AGENTS.md Skill Integration
AGENTS.md (part of AAIF alongside MCP) specifies agent behavior constraints. ASI skills can declare AGENTS.md compatibility:
# ~/.claude/skills/[skill-name]/AGENTS.md-extension agents_md_version: "1.0" skill_name: "abductive-oracle" behavior_constraints: - never_guess: true # matches postcondition: returns nothing if unknown - deterministic: true # same input → same output - max_response_tokens: 512 # bounded output - tool_calls_per_invocation: 3 # max 3 sub-oracle calls capability_declarations: - capability: "abductive_inference" trit: -1 # VALIDATOR requires_auth: false aaif_compatible: true memory_profile: persistent: false # no persistent state between invocations shared_context: false # no cross-agent memory
goose Integration (AAIF Agentic Framework)
goose is Anthropic's agentic framework, now under AAIF. ASI skills register as goose extensions:
# ASI skill as goose extension # Requirement: goose CLI available # Postcondition: ASI skill callable from any goose session GOOSE_SKILL_MANIFEST = { "schema": "goose-extension/v1", "name": "asi-skill-graph", "description": "GF(3)-organized skill graph with 1360+ capabilities via dynamic-sufficiency hub", "version": "1.0.0", "tools": [ { "name": "invoke_skill", "description": "Invoke any ASI skill by name with arguments", ======= }
AGENTS.md Skill Integration
# Example AGENTS.md-extension for a skill agents_md_version: "1.0" skill_name: "abductive-oracle" behavior_constraints: - never_guess: true - deterministic: true - max_response_tokens: 512 - tool_calls_per_invocation: 3 capability_declarations: - capability: "abductive_inference" requires_auth: false aaif_compatible: true
goose Integration
GOOSE_SKILL_MANIFEST = { "schema": "goose-extension/v1", "name": "asi-skill-graph", "description": "Skill graph with capabilities via dynamic-sufficiency hub", "tools": [ { "name": "invoke_skill", "description": "Invoke any skill by name with arguments", >>>>>>> origin/main "parameters": { "skill_name": {"type": "string"}, "args": {"type": "object"} } }, { "name": "query_skill_graph", <<<<<<< HEAD "description": "Query the ASI skill graph for capabilities matching a description", "parameters": { "query": {"type": "string"}, "trit_filter": {"type": "integer", "enum": [-1, 0, 1]} ======= "description": "Query the skill graph for capabilities matching a description", "parameters": { "query": {"type": "string"}, >>>>>>> origin/main } } ] }
<<<<<<< HEAD
=======
origin/main
Platform Identity Integration
Microsoft Entra Agent ID
<<<<<<< HEAD # Microsoft Entra Agent ID (preview, May 2025) # Assigns enterprise identity to ASI skill graph agent # JIT scoped tokens, conditional access, least-privilege ======= >>>>>>> origin/main ENTRA_AGENT_CONFIG = { "agent_id": "asi-skill-graph-agent", "display_name": "ASI Skill Graph Agent", "app_roles": [ <<<<<<< HEAD {"role": "skill:invoke", "trit_classes": [-1, 0, 1]}, {"role": "skill:query", "trit_classes": [0, 1]}, {"role": "oracle:gf3", "trit_classes": [-1]}, ], "token_lifetime_minutes": 15, # JIT tokens, IPSIE compliant "conditional_access": { "require_mfa_for_validators": True, # trit=-1 skills require MFA ======= {"role": "skill:invoke"}, {"role": "skill:query"}, {"role": "oracle:gf3"}, ], "token_lifetime_minutes": 15, # JIT tokens, IPSIE compliant "conditional_access": { "require_mfa_for_validators": True, >>>>>>> origin/main "location_policy": "trusted_networks_only", } }
AWS AgentCore
<<<<<<< HEAD # AWS AgentCore identity configuration # Entra as IdP for AgentCore Gateway access AWS_AGENTCORE_CONFIG = { "identity_provider": "microsoft_entra", "gateway_policy": { "tool_calls": "evaluated", # real-time policy enforcement "skill_invocations": "audited", # logged to DuckDB IES "cross_agent_calls": "mTLS", # A2A protocol via mTLS }, "guardrails": { "max_tokens_per_skill": 4096, "allowed_trit_classes": [-1, 0, 1], # all classes allowed "gf3_conservation_required": True, # conservation oracle runs pre-call ======= AWS_AGENTCORE_CONFIG = { "identity_provider": "microsoft_entra", "gateway_policy": { "tool_calls": "evaluated", "skill_invocations": "audited", "cross_agent_calls": "mTLS", }, "guardrails": { "max_tokens_per_skill": 4096, >>>>>>> origin/main } }
<<<<<<< HEAD
=======
Concrete Affordances
Validate SKILL.md against AAIF descriptor format
Run this one-liner from the repo root to check that a SKILL.md has valid frontmatter with the required
name and description fields:
# Usage: validate a single skill python3 -c " import yaml, sys, pathlib skill_path = sys.argv[1] md = pathlib.Path(skill_path, 'SKILL.md') if not md.exists(): print(f'FAIL: {md} not found'); sys.exit(1) content = md.read_text() parts = content.split('---') if len(parts) < 3: print(f'FAIL: no YAML frontmatter delimiters in {md}'); sys.exit(1) meta = yaml.safe_load(parts[1]) required = {'name', 'description'} missing = required - set(meta.keys()) if missing: print(f'FAIL: missing required fields: {missing}'); sys.exit(1) if not isinstance(meta['name'], str) or not meta['name'].strip(): print('FAIL: name must be a non-empty string'); sys.exit(1) if not isinstance(meta['description'], str) or not meta['description'].strip(): print('FAIL: description must be a non-empty string'); sys.exit(1) print(f'PASS: {meta[\"name\"]} — AAIF descriptor valid') print(f' name: {meta[\"name\"]}') print(f' description: {meta[\"description\"][:80]}...') " /Users/alice/v/asi/skills/aaif-governance-interleave
Batch-validate all skills in the repo
for d in /Users/alice/v/asi/skills/*/; do python3 -c " import yaml, sys, pathlib skill_path = sys.argv[1] md = pathlib.Path(skill_path, 'SKILL.md') if not md.exists(): print(f'SKIP: {md}'); sys.exit(0) content = md.read_text() parts = content.split('---') if len(parts) < 3: print(f'FAIL: {md} — no frontmatter'); sys.exit(1) meta = yaml.safe_load(parts[1]) for field in ('name', 'description'): if field not in meta or not str(meta[field]).strip(): print(f'FAIL: {md} — missing or empty \"{field}\"'); sys.exit(1) print(f'PASS: {meta[\"name\"]}') " "$d" done
Generate AAIF descriptor JSON from SKILL.md
# Emit the full AAIFDescriptor as JSON for a given skill python3 -c " import yaml, json, sys, pathlib skill_path = sys.argv[1] content = pathlib.Path(skill_path, 'SKILL.md').read_text() meta = yaml.safe_load(content.split('---')[1]) name, desc = meta['name'], meta['description'].strip() print(json.dumps({ 'name': name, 'mcp_schema': { 'name': name, 'description': desc, 'inputSchema': {'type': 'object', 'properties': {'query': {'type': 'string'}}} }, 'a2a_skill_descriptor': { 'id': name, 'name': name.replace('-', ' ').title(), 'description': desc, 'inputModes': ['text'], 'outputModes': ['text', 'data'] }, 'agntcy_oasf': { 'schema_version': '1.0', 'name': name, 'description': desc, 'aaif_compatible': True, 'a2a_compatible': True, 'mcp_compatible': True }, 'ipsie_profile': 'public' }, indent=2)) " /Users/alice/v/asi/skills/aaif-governance-interleave
origin/main
Gap Registry
| Gap | What | Resolution Path |
|---|---|---|
| <<<<<<< HEAD | ||
| G-P7 | IPSIE single-trust-domain only; multi-domain is open problem | + (OCapN provides cross-domain trust) |
| G-P6 | No cross-protocol agent identity revocation | + |
| G-AAIF1 | goose not yet open-sourced (as of Feb 2026) | When open: direct extension registration |
| G-AAIF2 | AGENTS.md spec not yet formalized | for behavioral constraint verification |
| G-AAIF3 | No GF(3) trit class in AAIF OASF schema | Propose extension via AAIF working group |
Related Skills
— full protocol ecosystem bridge (sibling skill)agent-protocol-interleave
— W3C DID ↔ passport.gay identity bridgedid-passport-interleave
— 145-ref hub (ASI's AAIF skill router)dynamic-sufficiency
— multi-protocol aggregation hub (MCP+A2A+AGNTCY)agent-o-rama
— GF(3) conservation enforcement (AAIF pre-commit hook)gf3-conservation-oracle
— AGENTS.md behavioral constraint verificationbisimulation-oracle
— OCapN for cross-domain trust (IPSIE multi-domain gap)universal-captp-derivation
— CapTP protocol (zig-syrup wire layer enabling cross-org capability passing) ======= | G-P7 | IPSIE single-trust-domain only; multi-domain is open problem | OCapN cross-domain trust | | G-P6 | No cross-protocol agent identity revocation |captp
| | G-AAIF1 | goose not yet open-sourced | Direct extension registration when available | | G-AAIF2 | AGENTS.md spec not yet formalized |did-passport-interleave
for behavioral constraint verification |bisimulation-oracle
origin/main