|
308 | 308 | "triggers": { |
309 | 309 | "type": "array", |
310 | 310 | "items": { "type": "string" }, |
311 | | - "description": "Conditions that activate this sub-agent (e.g., factual_claim_detected, confidence_low, domain_mismatch)" |
| 311 | + "description": "Conditions that activate this sub-agent" |
312 | 312 | } |
313 | 313 | }, |
314 | 314 | "additionalProperties": false |
|
340 | 340 | "properties": { |
341 | 341 | "action_type": { |
342 | 342 | "type": "string", |
343 | | - "description": "Escalate for specific action types (e.g., customer_communication, trade_execution, credit_decision, regulatory_filing)" |
| 343 | + "description": "Escalate for specific action types" |
344 | 344 | } |
345 | 345 | }, |
346 | 346 | "additionalProperties": false |
|
432 | 432 | }, |
433 | 433 | "segregation_of_duties": { |
434 | 434 | "$ref": "#/$defs/segregation_of_duties_config" |
| 435 | + }, |
| 436 | + "financial_governance": { |
| 437 | + "$ref": "#/$defs/financial_governance_config" |
435 | 438 | } |
436 | 439 | }, |
437 | 440 | "additionalProperties": false, |
|
478 | 481 | "human_in_the_loop": { |
479 | 482 | "type": "string", |
480 | 483 | "enum": ["always", "conditional", "advisory", "none"], |
481 | | - "description": "Level of human involvement. 'always': every decision. 'conditional': per escalation_triggers. 'advisory': human notified but not blocking. 'none': fully autonomous." |
| 484 | + "description": "Level of human involvement." |
482 | 485 | }, |
483 | 486 | "escalation_triggers": { |
484 | 487 | "type": "array", |
|
513 | 516 | "retention_period": { |
514 | 517 | "type": "string", |
515 | 518 | "pattern": "^\\d+[ymd]$", |
516 | | - "description": "Minimum retention period (e.g., 6y = 6 years, 90d = 90 days, 18m = 18 months)" |
| 519 | + "description": "Minimum retention period (e.g., 6y = 6 years, 90d = 90 days)" |
517 | 520 | }, |
518 | 521 | "log_contents": { |
519 | 522 | "type": "array", |
|
528 | 531 | ] |
529 | 532 | }, |
530 | 533 | "uniqueItems": true, |
531 | | - "description": "Categories of data to log. Any subset is valid." |
| 534 | + "description": "Categories of data to log." |
532 | 535 | }, |
533 | 536 | "immutable": { |
534 | 537 | "type": "boolean", |
|
554 | 557 | "validation_type": { |
555 | 558 | "type": "string", |
556 | 559 | "enum": ["full", "targeted", "change_based"], |
557 | | - "description": "Type of validation. 'full': three-pillar SR 11-7. 'targeted': specific area. 'change_based': triggered by changes." |
| 560 | + "description": "Type of validation." |
558 | 561 | }, |
559 | 562 | "conceptual_soundness": { |
560 | 563 | "type": ["string", "null"], |
|
566 | 569 | }, |
567 | 570 | "outcomes_analysis": { |
568 | 571 | "type": "boolean", |
569 | | - "description": "Whether model outputs are compared to actual results (back-testing)" |
| 572 | + "description": "Whether model outputs are compared to actual results" |
570 | 573 | }, |
571 | 574 | "drift_detection": { |
572 | 575 | "type": "boolean", |
|
587 | 590 | "pii_handling": { |
588 | 591 | "type": "string", |
589 | 592 | "enum": ["redact", "encrypt", "prohibit", "allow"], |
590 | | - "description": "'redact': strip PII from outputs. 'encrypt': encrypt at rest. 'prohibit': reject PII input. 'allow': no restrictions." |
| 593 | + "description": "How PII is handled" |
591 | 594 | }, |
592 | 595 | "data_classification": { |
593 | 596 | "type": "string", |
|
608 | 611 | }, |
609 | 612 | "lda_search": { |
610 | 613 | "type": "boolean", |
611 | | - "description": "Whether Less Discriminatory Alternative search is required (CFPB Circular 2022-03)" |
| 614 | + "description": "Whether Less Discriminatory Alternative search is required" |
612 | 615 | } |
613 | 616 | }, |
614 | 617 | "additionalProperties": false |
|
621 | 624 | "type": { |
622 | 625 | "type": "string", |
623 | 626 | "enum": ["correspondence", "retail", "institutional"], |
624 | | - "description": "'correspondence': <=25 retail investors/30 days. 'retail': >25 retail investors/30 days. 'institutional': institutional investors only." |
| 627 | + "description": "Communication type classification" |
625 | 628 | }, |
626 | 629 | "pre_review_required": { |
627 | 630 | "type": "boolean", |
|
633 | 636 | }, |
634 | 637 | "no_misleading": { |
635 | 638 | "type": "boolean", |
636 | | - "description": "Whether misleading, exaggerated, or promissory statements are prohibited" |
| 639 | + "description": "Whether misleading statements are prohibited" |
637 | 640 | }, |
638 | 641 | "disclosures_required": { |
639 | 642 | "type": "boolean", |
|
661 | 664 | }, |
662 | 665 | "subcontractor_assessment": { |
663 | 666 | "type": "boolean", |
664 | | - "description": "Whether fourth-party (subcontractor) risk has been assessed" |
| 667 | + "description": "Whether fourth-party risk has been assessed" |
665 | 668 | } |
666 | 669 | }, |
667 | 670 | "additionalProperties": false |
668 | 671 | }, |
669 | 672 |
|
670 | 673 | "segregation_of_duties_config": { |
671 | 674 | "type": "object", |
672 | | - "description": "Segregation of duties configuration for multi-agent systems. Ensures no single agent has complete control over critical processes.", |
| 675 | + "description": "Segregation of duties configuration for multi-agent systems.", |
673 | 676 | "properties": { |
674 | 677 | "roles": { |
675 | 678 | "type": "array", |
|
703 | 706 | }, |
704 | 707 | "conflicts": { |
705 | 708 | "type": "array", |
706 | | - "description": "Pairs of role IDs that cannot be held by the same agent (SOD matrix)", |
| 709 | + "description": "Pairs of role IDs that cannot be held by the same agent", |
707 | 710 | "items": { |
708 | 711 | "type": "array", |
709 | | - "items": { |
710 | | - "type": "string" |
711 | | - }, |
| 712 | + "items": { "type": "string" }, |
712 | 713 | "minItems": 2, |
713 | 714 | "maxItems": 2 |
714 | 715 | } |
|
718 | 719 | "description": "Maps agent names to their assigned roles", |
719 | 720 | "additionalProperties": { |
720 | 721 | "type": "array", |
721 | | - "items": { |
722 | | - "type": "string" |
723 | | - }, |
| 722 | + "items": { "type": "string" }, |
724 | 723 | "minItems": 1 |
725 | 724 | } |
726 | 725 | }, |
|
730 | 729 | "properties": { |
731 | 730 | "state": { |
732 | 731 | "type": "string", |
733 | | - "enum": ["full", "shared", "none"], |
734 | | - "description": "'full': agents cannot access each other's state. 'shared': read-only cross-access. 'none': no isolation." |
| 732 | + "enum": ["full", "shared", "none"] |
735 | 733 | }, |
736 | 734 | "credentials": { |
737 | 735 | "type": "string", |
738 | | - "enum": ["separate", "shared"], |
739 | | - "description": "'separate': each role has its own credential scope. 'shared': agents share credentials." |
| 736 | + "enum": ["separate", "shared"] |
740 | 737 | } |
741 | 738 | }, |
742 | 739 | "additionalProperties": false |
|
750 | 747 | "properties": { |
751 | 748 | "action": { |
752 | 749 | "type": "string", |
753 | | - "description": "Action type requiring handoff (e.g., credit_decision, loan_disbursement)" |
| 750 | + "description": "Action type requiring handoff" |
754 | 751 | }, |
755 | 752 | "required_roles": { |
756 | 753 | "type": "array", |
|
775 | 772 | } |
776 | 773 | }, |
777 | 774 | "additionalProperties": false |
| 775 | + }, |
| 776 | + |
| 777 | + "financial_governance_config": { |
| 778 | + "type": "object", |
| 779 | + "description": "Runtime financial controls for payment-capable agents. Declarative — enforcement is handled by a pre_tool_use hook calling a compliant financial firewall. A block with no compliant enforcement layer is advisory only.", |
| 780 | + "properties": { |
| 781 | + "enabled": { |
| 782 | + "type": "boolean", |
| 783 | + "description": "If false, block is declared but not enforced. Default: false." |
| 784 | + }, |
| 785 | + "firewall": { |
| 786 | + "type": "string", |
| 787 | + "description": "Named identifier of the financial firewall implementation (e.g. valkurai, stripe-radar, local-script). Not an endpoint — endpoint config belongs in runtime environment config." |
| 788 | + }, |
| 789 | + "spending": { |
| 790 | + "type": "object", |
| 791 | + "description": "Spending cap and category controls", |
| 792 | + "properties": { |
| 793 | + "max_per_transaction_cents": { |
| 794 | + "type": "integer", |
| 795 | + "minimum": 1, |
| 796 | + "description": "Hard cap per transaction in smallest currency unit (cents for AUD/USD, pence for GBP). No floats." |
| 797 | + }, |
| 798 | + "max_monthly_cents": { |
| 799 | + "type": "integer", |
| 800 | + "minimum": 1, |
| 801 | + "description": "Cumulative monthly cap in smallest currency unit. Omit to disable." |
| 802 | + }, |
| 803 | + "currency": { |
| 804 | + "type": "string", |
| 805 | + "description": "Default ISO 4217 currency code (e.g. AUD, USD, GBP)." |
| 806 | + }, |
| 807 | + "allowed_categories": { |
| 808 | + "type": "array", |
| 809 | + "items": { "type": "string" }, |
| 810 | + "description": "Permitted spending categories (e.g. software, compute, api_services). Empty array = all categories permitted." |
| 811 | + }, |
| 812 | + "blocked_categories": { |
| 813 | + "type": "array", |
| 814 | + "items": { "type": "string" }, |
| 815 | + "description": "Explicitly blocked spending categories. Evaluated before allowed_categories." |
| 816 | + } |
| 817 | + }, |
| 818 | + "required": ["max_per_transaction_cents"], |
| 819 | + "additionalProperties": false |
| 820 | + }, |
| 821 | + "approval": { |
| 822 | + "type": "object", |
| 823 | + "description": "Human approval threshold and timeout controls", |
| 824 | + "properties": { |
| 825 | + "require_above_cents": { |
| 826 | + "type": "integer", |
| 827 | + "minimum": 0, |
| 828 | + "description": "Transactions above this amount require human approval before execution. Set to 0 to require approval on all transactions." |
| 829 | + }, |
| 830 | + "timeout_minutes": { |
| 831 | + "type": "integer", |
| 832 | + "minimum": 1, |
| 833 | + "description": "Minutes before an unanswered approval request times out." |
| 834 | + }, |
| 835 | + "auto_deny_on_timeout": { |
| 836 | + "type": "boolean", |
| 837 | + "description": "If true, timeout = DENIED. If false, timeout = APPROVED. Recommended default: true." |
| 838 | + } |
| 839 | + }, |
| 840 | + "required": ["require_above_cents", "timeout_minutes", "auto_deny_on_timeout"], |
| 841 | + "additionalProperties": false |
| 842 | + } |
| 843 | + }, |
| 844 | + "required": ["enabled"], |
| 845 | + "additionalProperties": false |
778 | 846 | } |
779 | 847 | } |
780 | 848 | } |
0 commit comments