@a-company/paradigm 5.38.0 → 6.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{accept-orchestration-OATWIRHP.js → accept-orchestration-TIXUQQGR.js} +1 -1
- package/dist/add-UOR4INIV.js +8 -0
- package/dist/agent-MB3H5EZA.js +33 -0
- package/dist/{agent-loader-RIVI6QPP.js → agent-loader-VGBPL3TH.js} +1 -1
- package/dist/{agent-loader-RJRVO5GQ.js → agent-loader-W3RQJVW7.js} +1 -1
- package/dist/{agents-suggest-HYTFMQD3.js → agents-suggest-IKY6VD2R.js} +1 -1
- package/dist/{ambient-WTLYUAQM.js → ambient-AI42BOM5.js} +12 -12
- package/dist/{ambient-76YMUA5Q.js → ambient-FNNFB4AP.js} +1 -1
- package/dist/{assess-UFPYEJKP.js → assess-63WXHWJV.js} +1 -1
- package/dist/authority-FA3HLEOA.js +2 -0
- package/dist/{calibration-OLJYB5HN.js → calibration-BDHGYJOK.js} +1 -1
- package/dist/chunk-23T6UG73.js +605 -0
- package/dist/{chunk-4L7665QV.js → chunk-2AU5L333.js} +1 -1
- package/dist/{chunk-BOYQAMGC.js → chunk-4N56FRNE.js} +1 -1
- package/dist/{chunk-5QOCKWK5.js → chunk-4PSD5R7N.js} +2 -2
- package/dist/{chunk-MQIG6SMF.js → chunk-6QXBXZF6.js} +1 -1
- package/dist/{chunk-ORDKEGII.js → chunk-AMLD7IYC.js} +1 -1
- package/dist/{chunk-3DZK54RU.js → chunk-DBEWOKD6.js} +32 -7
- package/dist/{chunk-AGFPVSX5.js → chunk-F6E3HW45.js} +1 -1
- package/dist/{chunk-X3U3IGYT.js → chunk-GD4F2HC6.js} +2 -2
- package/dist/chunk-GRZQIKST.js +2 -0
- package/dist/{chunk-HOBHJPTL.js → chunk-IOVHF4SR.js} +1 -1
- package/dist/{chunk-RLCH7DXQ.js → chunk-K7X3Z3GL.js} +1 -1
- package/dist/{chunk-74SGKSRQ.js → chunk-KAFQA7HV.js} +2 -2
- package/dist/{chunk-NEJ4ZLCY.js → chunk-LAYBUKMB.js} +1 -1
- package/dist/{chunk-4VKSEOXZ.js → chunk-LPBCQM5Y.js} +3 -3
- package/dist/chunk-Q527BPUF.js +2 -0
- package/dist/{chunk-AO7ZSRME.js → chunk-TQOT2LBO.js} +2 -2
- package/dist/{chunk-3XGNXXCT.js → chunk-UZ5H7K6Q.js} +1 -1
- package/dist/chunk-VIG5LSGZ.js +2 -0
- package/dist/chunk-VNIX5KBT.js +3 -0
- package/dist/chunk-WXF5VFB4.js +111 -0
- package/dist/chunk-XQLO5URP.js +11 -0
- package/dist/{chunk-DOCDDDTD.js → chunk-YNDPSWOE.js} +5 -5
- package/dist/chunk-Z5QW6USC.js +2 -0
- package/dist/{compliance-D7GD6ZYC.js → compliance-J3VOV445.js} +1 -1
- package/dist/config-schema-FLHRVZMI.js +2 -0
- package/dist/{context-audit-XRPT3OU2.js → context-audit-JVCA6GSV.js} +1 -1
- package/dist/{cursorrules-U5O4G5T4.js → cursorrules-ZXPXPZ3P.js} +1 -1
- package/dist/decision-loader-HELL2AMX.js +2 -0
- package/dist/{delete-P5VULXR4.js → delete-2C6ALLYY.js} +1 -1
- package/dist/{diff-YGHBIJY5.js → diff-75MABOSL.js} +1 -1
- package/dist/{dist-KGRCLBJP-2QAPFYNF.js → dist-GQ42YS5N-4HIJZVBB.js} +10 -10
- package/dist/{docs-USDAF26F.js → docs-TSAAS4W3.js} +1 -1
- package/dist/doctor-L5XZENCF.js +2 -0
- package/dist/{edit-GUU3HBVW.js → edit-P3MDAZLU.js} +1 -1
- package/dist/{flow-FVZR3YJ4.js → flow-BGXOVE2V.js} +1 -1
- package/dist/{hooks-TFMMMB2H.js → hooks-KUEE5KMM.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/init-M44SO65G.js +2 -0
- package/dist/{init-XYB62Q3X.js → init-V4KSEKPK.js} +1 -1
- package/dist/{list-YKIQNKGB.js → list-2XIWUEMA.js} +1 -1
- package/dist/list-CFHINXIS.js +12 -0
- package/dist/lore-loader-D2ISOASW.js +2 -0
- package/dist/lore-loader-PXFKMKAN.js +2 -0
- package/dist/mcp.js +4 -4
- package/dist/metrics-UESGUHTA.js +2 -0
- package/dist/{migrate-Z5UQN57G.js → migrate-ZPNYDNM4.js} +1 -1
- package/dist/migrate-assessments-YSITX7KM.js +4 -0
- package/dist/migrate-decisions-NPLQOEEH.js +6 -0
- package/dist/migrate-plsat-EM2ACIQ3.js +6 -0
- package/dist/migration-notices-BHLEYC4T.js +4 -0
- package/dist/{nomination-engine-EALA5MGI.js → nomination-engine-NCLTGMAK.js} +1 -1
- package/dist/{notebook-loader-PXNRBBXD.js → notebook-loader-3J2OFMS3.js} +1 -1
- package/dist/{orchestrate-M5PBZBJQ.js → orchestrate-K4KBTBYK.js} +1 -1
- package/dist/{platform-server-DNAMH4YI.js → platform-server-ANOALDPL.js} +1 -1
- package/dist/{portal-check-ZMLVBIGW.js → portal-check-DV2VSJ5E.js} +1 -1
- package/dist/portal-compliance-JONQ4SOP.js +2 -0
- package/dist/{probe-3FTG6LYO.js → probe-5HAXULAD.js} +1 -1
- package/dist/{providers-AWA7WLLM.js → providers-TBPOE4DI.js} +1 -1
- package/dist/quiz-WYIZJG5K.js +10 -0
- package/dist/{record-YXPB34MY.js → record-N3VNYYKJ.js} +1 -1
- package/dist/registry-OUTA3DXW.js +20 -0
- package/dist/reindex-IZCD2JGD.js +2 -0
- package/dist/{retag-N5XF3KXP.js → retag-72R2OSZV.js} +1 -1
- package/dist/{review-77QI6VOC.js → review-2INNWLTW.js} +1 -1
- package/dist/{sentinel-HYAZ3CO5.js → sentinel-EFPEX246.js} +1 -1
- package/dist/{sentinel-bridge-VR357PKL.js → sentinel-bridge-UR2MKARY.js} +1 -1
- package/dist/{serve-U47GULB6.js → serve-3FMUWW5K.js} +1 -1
- package/dist/serve-OQYUO7CR.js +12 -0
- package/dist/{server-4YNUIK4W.js → server-4D77LCST.js} +1 -1
- package/dist/server-FGUL2FWQ.js +7 -0
- package/dist/session-tracker-HHNY6J4I.js +2 -0
- package/dist/{session-work-log-ZP45TREI.js → session-work-log-MEJ33TYD.js} +1 -1
- package/dist/{session-work-log-PAKXOFGL.js → session-work-log-ZVVJGO7X.js} +1 -1
- package/dist/{setup-FEWSYS3Y.js → setup-ZSEC72BS.js} +1 -1
- package/dist/shift-WGMZGWOC.js +60 -0
- package/dist/{show-PJ5LFLIL.js → show-JH7LJ5MT.js} +1 -1
- package/dist/show-WVHAL4VU.js +7 -0
- package/dist/{spawn-M5BAV252.js → spawn-KKDDR6UR.js} +1 -1
- package/dist/status-S7Z5FVIE.js +6 -0
- package/dist/{summary-PYTEIJ4U.js → summary-WLI3NF4G.js} +2 -2
- package/dist/{sweep-HU74OPVW.js → sweep-7TZFN5NS.js} +1 -1
- package/dist/sync-55U6QPIA.js +2 -0
- package/dist/{sync-llms-7CAI74QL.js → sync-llms-GF7DDQDI.js} +1 -1
- package/dist/{team-PDK64JXI.js → team-2LGZQRP4.js} +1 -1
- package/dist/{timeline-K3ZFKJ3R.js → timeline-RK7O2SCM.js} +1 -1
- package/dist/tools-4RRFTU5H.js +2 -0
- package/dist/university-content/notes/N-para-001-build-something.md +126 -0
- package/dist/university-content/notes/N-para-001-meet-the-team.md +85 -0
- package/dist/university-content/notes/N-para-001-shift-setup.md +74 -0
- package/dist/university-content/notes/N-para-101-component-types.md +99 -0
- package/dist/university-content/notes/N-para-101-first-steps.md +134 -0
- package/dist/university-content/notes/N-para-101-five-symbols.md +128 -0
- package/dist/university-content/notes/N-para-101-paradigm-logger.md +89 -0
- package/dist/university-content/notes/N-para-101-portal-yaml.md +112 -0
- package/dist/university-content/notes/N-para-101-project-structure.md +143 -0
- package/dist/university-content/notes/N-para-101-purpose-files.md +121 -0
- package/dist/university-content/notes/N-para-101-tags-and-classification.md +93 -0
- package/dist/university-content/notes/N-para-101-welcome.md +51 -0
- package/dist/university-content/notes/N-para-201-architecture-review.md +175 -0
- package/dist/university-content/notes/N-para-201-aspect-graph.md +79 -0
- package/dist/university-content/notes/N-para-201-aspects-and-anchors.md +112 -0
- package/dist/university-content/notes/N-para-201-component-patterns.md +138 -0
- package/dist/university-content/notes/N-para-201-cross-cutting-concerns.md +145 -0
- package/dist/university-content/notes/N-para-201-disciplines.md +187 -0
- package/dist/university-content/notes/N-para-201-flows-deep-dive.md +119 -0
- package/dist/university-content/notes/N-para-201-gates-deep-dive.md +165 -0
- package/dist/university-content/notes/N-para-201-portal-protocol.md +133 -0
- package/dist/university-content/notes/N-para-201-signal-patterns.md +159 -0
- package/dist/university-content/notes/N-para-201-symbol-naming.md +149 -0
- package/dist/university-content/notes/N-para-301-context-management.md +53 -0
- package/dist/university-content/notes/N-para-301-decisions.md +99 -0
- package/dist/university-content/notes/N-para-301-doctor-and-validation.md +70 -0
- package/dist/university-content/notes/N-para-301-enforcement-levels.md +102 -0
- package/dist/university-content/notes/N-para-301-fragility-tracking.md +50 -0
- package/dist/university-content/notes/N-para-301-history-system.md +42 -0
- package/dist/university-content/notes/N-para-301-navigation-system.md +55 -0
- package/dist/university-content/notes/N-para-301-operations-review.md +55 -0
- package/dist/university-content/notes/N-para-301-paradigm-shift.md +93 -0
- package/dist/university-content/notes/N-para-301-protocols.md +113 -0
- package/dist/university-content/notes/N-para-301-ripple-analysis.md +53 -0
- package/dist/university-content/notes/N-para-301-sentinel-observability.md +87 -0
- package/dist/university-content/notes/N-para-301-sync-and-maintenance.md +57 -0
- package/dist/university-content/notes/N-para-301-wisdom-system.md +89 -0
- package/dist/university-content/notes/N-para-401-agent-identity.md +99 -0
- package/dist/university-content/notes/N-para-401-agent-interop.md +87 -0
- package/dist/university-content/notes/N-para-401-agent-roles.md +107 -0
- package/dist/university-content/notes/N-para-401-commit-conventions.md +82 -0
- package/dist/university-content/notes/N-para-401-mastery-review.md +71 -0
- package/dist/university-content/notes/N-para-401-mcp-tools-overview.md +102 -0
- package/dist/university-content/notes/N-para-401-multi-agent-coordination.md +80 -0
- package/dist/university-content/notes/N-para-401-notebooks-permissions.md +66 -0
- package/dist/university-content/notes/N-para-401-orchestration-workflow.md +101 -0
- package/dist/university-content/notes/N-para-401-pm-governance.md +71 -0
- package/dist/university-content/notes/N-para-401-provider-cascade.md +75 -0
- package/dist/university-content/notes/N-para-401-quick-check.md +95 -0
- package/dist/university-content/notes/N-para-451-agent-routing.md +117 -0
- package/dist/university-content/notes/N-para-451-archetypes-vs-instances.md +82 -0
- package/dist/university-content/notes/N-para-451-identity-layers.md +76 -0
- package/dist/university-content/notes/N-para-451-orchestration-modes.md +85 -0
- package/dist/university-content/notes/N-para-451-paradigm-shift.md +95 -0
- package/dist/university-content/notes/N-para-451-partners-primitive.md +107 -0
- package/dist/university-content/notes/N-para-451-roster-management.md +132 -0
- package/dist/university-content/notes/N-para-451-roster-reference.md +106 -0
- package/dist/university-content/notes/N-para-451-the-team-pattern.md +87 -0
- package/dist/university-content/notes/N-para-451-tiers.md +81 -0
- package/dist/university-content/notes/N-para-451-welcome.md +55 -0
- package/dist/university-content/notes/N-para-451-what-is-an-agent.md +73 -0
- package/dist/university-content/notes/N-para-501-advanced-workflows.md +122 -0
- package/dist/university-content/notes/N-para-501-aspect-graph-advanced.md +195 -0
- package/dist/university-content/notes/N-para-501-aspect-graph-internals.md +97 -0
- package/dist/university-content/notes/N-para-501-assessment-loops.md +116 -0
- package/dist/university-content/notes/N-para-501-conductor-workspace.md +77 -0
- package/dist/university-content/notes/N-para-501-habits-practice.md +164 -0
- package/dist/university-content/notes/N-para-501-hook-enforcement.md +100 -0
- package/dist/university-content/notes/N-para-501-lore-system.md +155 -0
- package/dist/university-content/notes/N-para-501-platform-agent-ui.md +108 -0
- package/dist/university-content/notes/N-para-501-review-compliance.md +72 -0
- package/dist/university-content/notes/N-para-501-sentinel-deep-dive.md +173 -0
- package/dist/university-content/notes/N-para-501-session-intelligence.md +104 -0
- package/dist/university-content/notes/N-para-501-symphony-a-mail.md +120 -0
- package/dist/university-content/notes/N-para-501-symphony-networking.md +119 -0
- package/dist/university-content/notes/N-para-501-task-management.md +100 -0
- package/dist/university-content/notes/N-para-601-agent-renaissance.md +121 -0
- package/dist/university-content/notes/N-para-601-attention-scoring.md +129 -0
- package/dist/university-content/notes/N-para-601-context-composition.md +146 -0
- package/dist/university-content/notes/N-para-601-data-sovereignty.md +140 -0
- package/dist/university-content/notes/N-para-601-event-stream.md +126 -0
- package/dist/university-content/notes/N-para-601-knowledge-streams.md +144 -0
- package/dist/university-content/notes/N-para-601-learning-loop.md +68 -0
- package/dist/university-content/notes/N-para-601-maestro-team-collab.md +136 -0
- package/dist/university-content/notes/N-para-601-nominations-debates.md +115 -0
- package/dist/university-content/notes/N-para-701-agent-notebooks.md +131 -0
- package/dist/university-content/notes/N-para-701-agent-pods-nevrland.md +182 -0
- package/dist/university-content/notes/N-para-701-agent-profiles.md +197 -0
- package/dist/university-content/notes/N-para-701-agent-roster.md +82 -0
- package/dist/university-content/notes/N-para-701-agent-state.md +180 -0
- package/dist/university-content/notes/N-para-701-learning-feedback-loop.md +188 -0
- package/dist/university-content/notes/N-para-701-model-tier-resolution.md +204 -0
- package/dist/university-content/notes/N-para-701-orchestration-enforcement.md +169 -0
- package/dist/university-content/notes/N-para-701-per-project-rosters.md +198 -0
- package/dist/university-content/notes/N-para-701-symphony-visibility.md +142 -0
- package/dist/university-content/paths/LP-para-001.yaml +29 -0
- package/dist/university-content/paths/LP-para-101.yaml +59 -0
- package/dist/university-content/paths/LP-para-201.yaml +69 -0
- package/dist/university-content/paths/LP-para-301.yaml +84 -0
- package/dist/university-content/paths/LP-para-401.yaml +74 -0
- package/dist/university-content/paths/LP-para-451.yaml +69 -0
- package/dist/university-content/paths/LP-para-501.yaml +89 -0
- package/dist/university-content/paths/LP-para-601.yaml +59 -0
- package/dist/university-content/paths/LP-para-701.yaml +64 -0
- package/dist/university-content/quizzes/Q-para-001-build-something.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-001-meet-the-team.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-001-shift-setup.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-101-component-types.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-101-first-steps.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-five-symbols.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-101-paradigm-logger.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-portal-yaml.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-project-structure.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-101-purpose-files.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-tags-and-classification.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-101-welcome.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-architecture-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-aspect-graph.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-201-aspects-and-anchors.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-component-patterns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-cross-cutting-concerns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-disciplines.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-flows-deep-dive.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-gates-deep-dive.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-201-portal-protocol.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-signal-patterns.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-201-symbol-naming.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-context-management.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-decisions.yaml +76 -0
- package/dist/university-content/quizzes/Q-para-301-doctor-and-validation.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-enforcement-levels.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-fragility-tracking.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-history-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-navigation-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-operations-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-301-paradigm-shift.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-protocols.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-ripple-analysis.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-301-sentinel-observability.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-sync-and-maintenance.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-301-wisdom-system.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-agent-identity.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-agent-interop.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-401-agent-roles.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-commit-conventions.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-mastery-review.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-mcp-tools-overview.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-multi-agent-coordination.yaml +76 -0
- package/dist/university-content/quizzes/Q-para-401-notebooks-permissions.yaml +61 -0
- package/dist/university-content/quizzes/Q-para-401-orchestration-workflow.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-pm-governance.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-401-provider-cascade.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-401-quick-check.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-451-foundations.yaml +154 -0
- package/dist/university-content/quizzes/Q-para-451-when-to-invoke.yaml +182 -0
- package/dist/university-content/quizzes/Q-para-501-advanced-workflows.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-aspect-graph-advanced.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-aspect-graph-internals.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-assessment-loops.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-conductor-workspace.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-501-habits-practice.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-501-hook-enforcement.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-lore-system.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-platform-agent-ui.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-review-compliance.yaml +61 -0
- package/dist/university-content/quizzes/Q-para-501-sentinel-deep-dive.yaml +86 -0
- package/dist/university-content/quizzes/Q-para-501-session-intelligence.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-symphony-a-mail.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-symphony-networking.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-501-task-management.yaml +46 -0
- package/dist/university-content/quizzes/Q-para-601-agent-renaissance.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-attention-scoring.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-context-composition.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-data-sovereignty.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-event-stream.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-knowledge-streams.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-601-learning-loop.yaml +56 -0
- package/dist/university-content/quizzes/Q-para-601-maestro-team-collab.yaml +86 -0
- package/dist/university-content/quizzes/Q-para-601-nominations-debates.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-notebooks.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-pods-nevrland.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-profiles.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-roster.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-agent-state.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-learning-feedback-loop.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-model-tier-resolution.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-orchestration-enforcement.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-per-project-rosters.yaml +66 -0
- package/dist/university-content/quizzes/Q-para-701-symphony-visibility.yaml +66 -0
- package/dist/university-content/quizzes/Q-plsat-v2.yaml +904 -0
- package/dist/university-content/quizzes/Q-plsat-v3.yaml +2909 -0
- package/dist/university-content/reference.json +2 -2
- package/dist/university-ui/assets/{index-CecQrfSn.js → index-nNgzO1il.js} +2 -2
- package/dist/university-ui/assets/{index-CecQrfSn.js.map → index-nNgzO1il.js.map} +1 -1
- package/dist/university-ui/index.html +1 -1
- package/dist/{upgrade-GX56QE3C.js → upgrade-NKN63VTY.js} +2 -2
- package/dist/validate-XUQZTF3H.js +9 -0
- package/dist/{watch-YCODNIET.js → watch-25GJHQYT.js} +1 -1
- package/lore-ui/dist/assets/{index-Bk-K0qgN.js → index-DKhNxgtW.js} +10 -10
- package/lore-ui/dist/index.html +1 -1
- package/package.json +2 -2
- package/platform-ui/dist/assets/{AmbientSection-BYjt75R1.js → AmbientSection-CwatqcBD.js} +1 -1
- package/platform-ui/dist/assets/{CanvasSection-rKvA_vZj.js → CanvasSection-dFAthehN.js} +1 -1
- package/platform-ui/dist/assets/{DocsSection-CI9K73M-.js → DocsSection-BZ2SFJBZ.js} +1 -1
- package/platform-ui/dist/assets/{GitSection-DSGj_c6S.js → GitSection-MNNYU1tO.js} +1 -1
- package/platform-ui/dist/assets/{GraphSection-CawN7pC5.js → GraphSection-COYjb4Pt.js} +1 -1
- package/platform-ui/dist/assets/LoreSection-B0hUbfsJ.js +1 -0
- package/platform-ui/dist/assets/{SentinelSection-DNgoYMH0.js → SentinelSection-BCxW1DCp.js} +1 -1
- package/platform-ui/dist/assets/{SymphonySection-C0zfcqv3.js → SymphonySection-BsucZRqy.js} +1 -1
- package/platform-ui/dist/assets/{TeamSection-Bzd3Dt9Q.js → TeamSection-C0QNTudW.js} +1 -1
- package/platform-ui/dist/assets/{UniversitySection-tBr62R0S.js → UniversitySection-DN1-g9pw.js} +1 -1
- package/platform-ui/dist/assets/{index-BaOmyn11.js → index-DwUT8pju.js} +2 -2
- package/platform-ui/dist/index.html +1 -1
- package/dist/add-P76GEMGF.js +0 -8
- package/dist/agent-X6I2YWOB.js +0 -33
- package/dist/chunk-JQKKVAAN.js +0 -2
- package/dist/chunk-NQ47TA6C.js +0 -111
- package/dist/chunk-ODVKPZZ4.js +0 -2
- package/dist/chunk-Q2J542ST.js +0 -2
- package/dist/chunk-RBLK34IA.js +0 -11
- package/dist/chunk-RN4VE6P3.js +0 -521
- package/dist/chunk-WS2N27RX.js +0 -3
- package/dist/config-schema-GUQY2QN7.js +0 -2
- package/dist/decision-loader-2XPZE4EZ.js +0 -2
- package/dist/doctor-WMVULMQD.js +0 -2
- package/dist/list-5IUGP3ZB.js +0 -7
- package/dist/lore-loader-RVQI5GXL.js +0 -2
- package/dist/lore-loader-XY5MZRR2.js +0 -2
- package/dist/migrate-assessments-GEI5WMI2.js +0 -4
- package/dist/portal-compliance-6YR27IQU.js +0 -2
- package/dist/quiz-FE5UGAY2.js +0 -10
- package/dist/registry-KOOKFUWD.js +0 -20
- package/dist/reindex-I6LPAKCC.js +0 -2
- package/dist/serve-OY6XYL7F.js +0 -12
- package/dist/server-2MNROHF6.js +0 -7
- package/dist/session-tracker-MWJAJA6Z.js +0 -2
- package/dist/shift-PC6C7NUX.js +0 -60
- package/dist/show-BOAVWZPZ.js +0 -7
- package/dist/status-A37ECYNJ.js +0 -6
- package/dist/sync-DLUBV5HQ.js +0 -2
- package/dist/tools-5ITPEPSV.js +0 -2
- package/dist/university-content/courses/.purpose +0 -492
- package/dist/university-content/courses/para-001.json +0 -166
- package/dist/university-content/courses/para-101.json +0 -615
- package/dist/university-content/courses/para-201.json +0 -794
- package/dist/university-content/courses/para-301.json +0 -830
- package/dist/university-content/courses/para-401.json +0 -868
- package/dist/university-content/courses/para-501.json +0 -1166
- package/dist/university-content/courses/para-601.json +0 -719
- package/dist/university-content/courses/para-701.json +0 -807
- package/dist/university-content/plsat/.purpose +0 -162
- package/dist/university-content/plsat/v2.0.json +0 -760
- package/dist/university-content/plsat/v3.0.json +0 -3453
- package/dist/validate-C6SMKGYD.js +0 -9
- package/platform-ui/dist/assets/LoreSection-oO5dCe6O.js +0 -1
- /package/dist/{chunk-BV5PRPLB.js → chunk-HXGYVS2N.js} +0 -0
- /package/templates/paradigm/specs/{scan.md → probe.md} +0 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-701-agent-roster
|
|
3
|
+
title: 'Lesson 1: The Agent Roster'
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-701
|
|
11
|
+
- 54-agents-organized
|
|
12
|
+
- each-agent-has
|
|
13
|
+
- the-orchestrator-selects
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 5
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-701.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 54 Agents, 7 Tiers
|
|
24
|
+
|
|
25
|
+
Paradigm ships with 54 named agents organized into seven functional tiers. Each agent is a narrow specialist with a defined personality, expertise domain, attention patterns, and collaboration graph. The roster is not a menu of interchangeable generalists — it is a team of specialists who are each the best at one thing.
|
|
26
|
+
|
|
27
|
+
The seven tiers group agents by function:
|
|
28
|
+
|
|
29
|
+
**Builders** — Agents that produce code and artifacts. The builder agent writes implementation code. Mika (designer) produces UI/UX designs. Wren (copywriter) writes user-facing text. Ghost (e2e) writes end-to-end tests. The tester writes unit and integration tests. These agents produce output that becomes part of the codebase.
|
|
30
|
+
|
|
31
|
+
**Reviewers** — Agents that evaluate what builders produce. The reviewer checks code quality and Paradigm compliance. Shield (qa) designs test strategy and validates acceptance criteria. Jinx (advocate) is the devil's advocate who stress-tests assumptions and finds edge cases nobody considered. Bolt (performance) reviews for performance regressions.
|
|
32
|
+
|
|
33
|
+
**Strategists** — Agents that plan and decide. The architect designs systems and leads orchestration. North (product) owns the product vision and prioritization. Yuki (pm) manages tickets and tracking. Scout (researcher) conducts competitive analysis and market research. Clause (legal) handles compliance and legal review.
|
|
34
|
+
|
|
35
|
+
**Intelligence** — Agents that gather and analyze information. Sage (analyst) performs data analysis. Beacon (seo) handles search optimization. Lens (content-intel) analyzes content strategy. Oracle (ai) specializes in AI/ML patterns and prompt engineering. Cipher (reverser) reverse-engineers systems and protocols.
|
|
36
|
+
|
|
37
|
+
**Infrastructure** — Agents that manage the platform and deployment. Atlas (devops) owns CI/CD, deployment, and monitoring. Vault (dba) manages databases, migrations, and query optimization. Root (sysadmin) handles system administration. Wire (network) specializes in networking and protocols. Ship (release) manages release coordination.
|
|
38
|
+
|
|
39
|
+
**Meta** — Agents that manage other agents. Loid (forge) designs and builds new agents — she understands the full .agent profile schema and recommends team compositions. Sensei (trainer) trains agents by reviewing their performance and curating notebook entries. The documentor maintains .purpose files and portal.yaml after other agents finish their work. Bridge (mediator) resolves disagreements between agents.
|
|
40
|
+
|
|
41
|
+
**Human Ops** — Agents that support the human directly. Sunday (secretary) is a personal operations agent who tracks goals, schedules, and commitments across all projects. Obi (mentor) provides career guidance. Sheila (educator) creates learning materials for humans. Leila (operations) handles business operations.
|
|
42
|
+
|
|
43
|
+
## Named Agents Have Personalities
|
|
44
|
+
|
|
45
|
+
Every agent has a unique nickname and personality configuration. Jinx is confrontational and aggressive — her job is to argue against the current approach. Mika is opinionated and precise — she leads design discussions and will challenge decisions. Sunday is proactive and conservative — she watches the human's commitments across all contexts. Atlas is methodical and conservative — he does not take risks with infrastructure.
|
|
46
|
+
|
|
47
|
+
These are not cosmetic names. The personality (style, risk tolerance, verbosity) shapes how the agent behaves during orchestration. A `deliberate` architect thinks carefully before responding. A `rapid` builder moves fast. A `confrontational` advocate pushes back on every assumption.
|
|
48
|
+
|
|
49
|
+
## How the Orchestrator Picks Agents
|
|
50
|
+
|
|
51
|
+
When `paradigm_orchestrate_inline` runs in plan mode, it evaluates which agents are relevant to the task. The selection process considers:
|
|
52
|
+
|
|
53
|
+
1. **Task classification** — What kind of work is this? A new feature needs builders, reviewers, and possibly security. A refactor needs the architect and reviewer. An incident needs devops, debugger, and security.
|
|
54
|
+
|
|
55
|
+
2. **Symbol matching** — Which symbols does the task touch? Each agent has attention patterns (symbols, paths, concepts, signals) that define what they notice. If the task involves `^authenticated` gates, the security agent's symbol pattern `^*` matches. If it touches `src/design/**` files, Mika's path patterns match.
|
|
56
|
+
|
|
57
|
+
3. **Attention threshold** — Each agent scores events against their attention patterns. Only agents whose relevance score meets their threshold are included. Security has a low threshold (0.45) because missing a security issue is expensive. The builder has a higher threshold (0.75) because it should only be included when directly relevant.
|
|
58
|
+
|
|
59
|
+
4. **Roster filtering** — If the project has a `roster.yaml`, only agents listed there are considered. A game project does not need SEO or legal agents. A backend API does not need a designer.
|
|
60
|
+
|
|
61
|
+
The orchestrator then stages agents in dependency order: the architect plans first, builders implement, the reviewer and security check, the documentor updates Paradigm files last.
|
|
62
|
+
|
|
63
|
+
## Why Narrow Specialists Beat Broad Generalists
|
|
64
|
+
|
|
65
|
+
A single "coding agent" that tries to build, review, test, and document produces mediocre results across all dimensions. The specialist model works because:
|
|
66
|
+
|
|
67
|
+
- **Expertise compounds** — The security agent's confidence on `#portal-gates` is 0.95 because that is all it focuses on. A generalist's confidence would be 0.5 across many domains.
|
|
68
|
+
- **Attention is focused** — The security agent watches gate symbols, auth paths, and security concepts. It does not waste attention on typography or test fixtures.
|
|
69
|
+
- **Collaboration is explicit** — The architect pairs with security to validate auth models. The builder pairs with the tester to verify implementation. These pairs are defined in the agent's collaboration graph, not left to chance.
|
|
70
|
+
- **Accountability is clear** — When a security issue ships, the security agent's acceptance rate drops. When a design is inconsistent, Mika's patterns need updating. Each agent owns a specific quality dimension.
|
|
71
|
+
|
|
72
|
+
The full roster provides coverage across code quality, security, performance, accessibility, design, testing, documentation, and business strategy. Most projects activate 15-25 agents depending on the domain. The orchestrator handles routing — the human never manually assigns agents to tasks.
|
|
73
|
+
|
|
74
|
+
| Tier | Count | Example Agents |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| Builders | ~10 | builder, designer (Mika), copywriter (Wren), tester, e2e (Ghost) |
|
|
77
|
+
| Reviewers | ~6 | reviewer, qa (Shield), advocate (Jinx), performance (Bolt) |
|
|
78
|
+
| Strategists | ~8 | architect, product (North), pm (Yuki), researcher (Scout) |
|
|
79
|
+
| Intelligence | ~7 | analyst (Sage), seo (Beacon), content-intel (Lens), ai (Oracle) |
|
|
80
|
+
| Infrastructure | ~8 | devops (Atlas), dba (Vault), sysadmin (Root), release (Ship) |
|
|
81
|
+
| Meta | ~6 | forge (Loid), trainer (Sensei), documentor, mediator (Bridge) |
|
|
82
|
+
| Human Ops | ~9 | secretary (Sunday), mentor (Obi), educator (Sheila), operations (Leila) |
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-701-agent-state
|
|
3
|
+
title: 'Lesson 4: Agent State & Continuity'
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-701
|
|
11
|
+
- project-state-at
|
|
12
|
+
- global-state-at
|
|
13
|
+
- buildprofileenrichment-injects-agent
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 6
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-701.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Continuity Problem
|
|
24
|
+
|
|
25
|
+
Every AI session starts from zero. The model has no memory of previous sessions. If the security agent reviewed 8 files yesterday, identified 3 gate coverage gaps, and deferred 2 items to today — all of that context is lost when the session ends. The next session's security agent starts fresh, potentially re-reviewing the same files and missing the deferred items entirely.
|
|
26
|
+
|
|
27
|
+
Agent state solves this by persisting key information between sessions at two scopes: project-level state (what happened on this specific project) and global state (career statistics across all projects).
|
|
28
|
+
|
|
29
|
+
## Project State: AgentProjectState
|
|
30
|
+
|
|
31
|
+
Project-scoped state lives at `.paradigm/agent-state/{agent-id}.yaml` and captures what the agent has done on THIS project:
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
interface AgentProjectState {
|
|
35
|
+
id: string; // Agent ID
|
|
36
|
+
project: string; // Project name
|
|
37
|
+
lastSession: { // Most recent session summary
|
|
38
|
+
date: string; // ISO timestamp
|
|
39
|
+
sessionId: string; // Session identifier
|
|
40
|
+
summary: string; // What was done
|
|
41
|
+
filesReviewed?: string[]; // Files the agent looked at
|
|
42
|
+
symbolsTouched?: string[]; // Symbols the agent worked on
|
|
43
|
+
decisions?: string[]; // Decisions made in the session
|
|
44
|
+
};
|
|
45
|
+
pendingWork: string[]; // Items deferred to next session
|
|
46
|
+
recentPatterns: string[]; // Patterns learned about this project
|
|
47
|
+
sessionsOnProject: number; // Total session count
|
|
48
|
+
lastPurposeUpdate?: string; // When .purpose was last updated
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The `lastSession` field is the most valuable for continuity. When the agent is invoked in the next session, `buildProfileEnrichment()` injects this into the prompt:
|
|
53
|
+
|
|
54
|
+
```markdown
|
|
55
|
+
## Your Recent Work on This Project
|
|
56
|
+
Last session (3h ago): Reviewed auth middleware, found 2 missing gate
|
|
57
|
+
declarations for POST /api/payments and PUT /api/subscriptions.
|
|
58
|
+
Sessions on this project: 8
|
|
59
|
+
**Pending from last session:**
|
|
60
|
+
- Review the new webhook endpoint for gate coverage
|
|
61
|
+
- Check Sentinel for auth anomalies on the payment routes
|
|
62
|
+
**Project patterns you've learned:**
|
|
63
|
+
- This project uses sliding-window JWT rotation
|
|
64
|
+
- RLS policies follow the tenant-scoped pattern
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
The agent now has context. It knows what it did last time, what remains unfinished, and what project-specific patterns it has discovered. It does not re-review files it already checked. It picks up the pending items and continues where it left off.
|
|
68
|
+
|
|
69
|
+
## Pending Work Tracking
|
|
70
|
+
|
|
71
|
+
The `pendingWork` array is a simple but powerful mechanism. When an agent encounters work it cannot complete in the current session, it adds items:
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
addPendingWork('security', rootDir, [
|
|
75
|
+
'Review webhook endpoint /api/webhooks/stripe for gate coverage',
|
|
76
|
+
'Check Sentinel for auth anomalies on payment routes',
|
|
77
|
+
]);
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
When the work is completed in a future session:
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
completePendingWork('security', rootDir, [
|
|
84
|
+
'Review webhook endpoint /api/webhooks/stripe for gate coverage',
|
|
85
|
+
]);
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Pending items accumulate across sessions until explicitly completed. This creates a persistent to-do list that survives session boundaries. If the security agent defers 3 items across 3 different sessions, all 3 appear in the next session's prompt enrichment.
|
|
89
|
+
|
|
90
|
+
## Recent Patterns
|
|
91
|
+
|
|
92
|
+
The `recentPatterns` array captures project-specific knowledge:
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
addProjectPattern('security', rootDir,
|
|
96
|
+
'This project uses Supabase RLS with tenant-scoped policies'
|
|
97
|
+
);
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Patterns are kept to a maximum of 10 (oldest are dropped when new ones are added). These are different from transferable patterns in the `.agent` file — recent patterns are project-specific and do not travel. The security agent learning "this project uses tenant-scoped RLS" is only relevant to this project. The transferable pattern "always check RLS policies on Supabase tables" applies everywhere.
|
|
101
|
+
|
|
102
|
+
## Global State: GlobalAgentState
|
|
103
|
+
|
|
104
|
+
Global state lives at `~/.paradigm/agents/{agent-id}/state.yaml` and tracks the agent's career across all projects:
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
interface GlobalAgentState {
|
|
108
|
+
id: string; // Agent ID
|
|
109
|
+
totalSessions: number; // Lifetime session count
|
|
110
|
+
lastActiveProject: string; // Most recent project
|
|
111
|
+
lastActiveDate: string; // ISO timestamp
|
|
112
|
+
projectHistory: Array<{ // Per-project stats
|
|
113
|
+
project: string;
|
|
114
|
+
sessions: number;
|
|
115
|
+
lastActive: string;
|
|
116
|
+
}>;
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Global state provides aggregate context: "This agent has worked 47 sessions across 5 projects, most recently on dealoracle 2 hours ago." This is useful for:
|
|
121
|
+
|
|
122
|
+
- **Expertise calibration** — An agent with 47 total sessions has more experience than one with 3.
|
|
123
|
+
- **Project affinity** — An agent with 30 sessions on project A and 2 on project B has deep expertise on A.
|
|
124
|
+
- **Recency** — An agent that was last active 3 months ago may need a full onboarding pass.
|
|
125
|
+
|
|
126
|
+
Global state is updated automatically whenever `recordAgentSession()` is called — it increments `totalSessions`, updates `lastActiveProject` and `lastActiveDate`, and maintains the `projectHistory` array sorted by most recent.
|
|
127
|
+
|
|
128
|
+
## How State Feeds Into Prompts
|
|
129
|
+
|
|
130
|
+
The `buildProfileEnrichment()` function accepts an optional `agentState` parameter:
|
|
131
|
+
|
|
132
|
+
```typescript
|
|
133
|
+
buildProfileEnrichment(
|
|
134
|
+
profile,
|
|
135
|
+
relevantSymbols,
|
|
136
|
+
notebookEntries,
|
|
137
|
+
ambientContext,
|
|
138
|
+
agentState: {
|
|
139
|
+
lastSession: { summary: '...', date: '...' },
|
|
140
|
+
pendingWork: ['...'],
|
|
141
|
+
recentPatterns: ['...'],
|
|
142
|
+
sessionsOnProject: 8
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The function assembles this into a `## Your Recent Work on This Project` section with:
|
|
148
|
+
|
|
149
|
+
1. **Last session summary with age** — "Last session (3h ago): Reviewed auth middleware..." The age is computed from the timestamp and displayed as hours or days.
|
|
150
|
+
2. **Session count** — "Sessions on this project: 8" (context for experience level)
|
|
151
|
+
3. **Pending work** — Up to 5 items from the pending work list.
|
|
152
|
+
4. **Project patterns** — Up to 5 recently learned patterns.
|
|
153
|
+
|
|
154
|
+
This section typically consumes 100-300 tokens depending on the amount of pending work and patterns. It is one of the highest-value sections in the prompt because it provides the specific, recent context that enables continuity.
|
|
155
|
+
|
|
156
|
+
## Recording Sessions
|
|
157
|
+
|
|
158
|
+
At the end of an orchestration pass, the orchestrator calls `recordAgentSession()` for each agent that participated:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
recordAgentSession('security', rootDir, {
|
|
162
|
+
sessionId: 'sess-2026-03-24-001',
|
|
163
|
+
summary: 'Reviewed 5 new routes for gate coverage. Found 2 gaps.',
|
|
164
|
+
filesReviewed: ['src/routes/payments.ts', 'src/routes/webhooks.ts'],
|
|
165
|
+
symbolsTouched: ['^authenticated', '^payment-owner', '#payment-service'],
|
|
166
|
+
decisions: ['Recommended adding ^payment-owner gate for refund endpoints'],
|
|
167
|
+
pendingWork: ['Review webhook endpoint for Stripe signature verification'],
|
|
168
|
+
patterns: ['This project stores Stripe webhook secrets in Supabase vault'],
|
|
169
|
+
});
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
This writes the project state file, increments the session count, and also updates global state. The next time the security agent is invoked on this project, it will see this session's summary and pending work in its prompt.
|
|
173
|
+
|
|
174
|
+
## Loading All States
|
|
175
|
+
|
|
176
|
+
The `loadAllAgentStates()` function reads all agent state files for a project, returning an array of `AgentProjectState` objects. This is useful for:
|
|
177
|
+
|
|
178
|
+
- **Dashboard views** — Conductor's agent roster view shows each agent's last session and pending work count.
|
|
179
|
+
- **Orchestration planning** — The orchestrator can check which agents have pending work on the current project and prioritize their inclusion.
|
|
180
|
+
- **Stale detection** — If an agent's last session was months ago, the orchestrator may trigger a fresh onboarding pass.
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-701-learning-feedback-loop
|
|
3
|
+
title: 'Lesson 9: The Learning Feedback Loop'
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-701
|
|
11
|
+
- session-work-log
|
|
12
|
+
- auto-expertise-adjustment-003
|
|
13
|
+
- teacher-model-runs
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 6
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-701.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Full Loop: DO-RECORD-ASSESS-LEARN-ADAPT-DO
|
|
24
|
+
|
|
25
|
+
PARA 601 introduced the six-phase learning loop. In the context of the agent system, this loop operates at the agent level: each agent does work, records its contributions, receives verdicts, learns from the feedback, and adapts its behavior for the next session. The agent system provides the concrete mechanisms that make each phase work.
|
|
26
|
+
|
|
27
|
+
## Phase 1: DO — Agent Work
|
|
28
|
+
|
|
29
|
+
Agents perform work during orchestration. The builder writes code. The security agent reviews gates. The designer proposes UI patterns. Each contribution is captured in the session work log as an `agent-contribution` entry:
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
interface SessionWorkEntry {
|
|
33
|
+
timestamp: string;
|
|
34
|
+
type: 'agent-contribution' | 'user-verdict' | 'decision';
|
|
35
|
+
agent?: string;
|
|
36
|
+
contribution?: string;
|
|
37
|
+
attribution?: string;
|
|
38
|
+
symbols?: string[];
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The session work log is stored at `.paradigm/events/session-log.jsonl` as append-only JSONL, bounded to 200 entries per session. Unlike breadcrumbs (which are recovery-focused with a 50-entry limit), the session work log captures rich context specifically for the learning pass.
|
|
43
|
+
|
|
44
|
+
## Phase 2: RECORD — Verdict Capture
|
|
45
|
+
|
|
46
|
+
When a human accepts, dismisses, or revises an agent's contribution, the verdict is recorded:
|
|
47
|
+
|
|
48
|
+
```typescript
|
|
49
|
+
{
|
|
50
|
+
type: 'user-verdict',
|
|
51
|
+
agent: 'security',
|
|
52
|
+
nominationId: 'nom-2026-03-24-001',
|
|
53
|
+
verdict: 'accepted' | 'dismissed' | 'revised' | 'deferred',
|
|
54
|
+
reason: 'Gate coverage recommendation was accurate',
|
|
55
|
+
symbols: ['^authenticated', '#payment-service'],
|
|
56
|
+
revisionDelta?: '...', // What the human changed (for revised)
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Four verdict types capture the full range of human feedback:
|
|
61
|
+
|
|
62
|
+
- **accepted** — The contribution was correct and applied as-is.
|
|
63
|
+
- **dismissed** — The contribution was wrong or irrelevant.
|
|
64
|
+
- **revised** — The contribution was partially correct; the human modified it. The `revisionDelta` captures what changed.
|
|
65
|
+
- **deferred** — The contribution may be valid but is not relevant now.
|
|
66
|
+
|
|
67
|
+
Each verdict is linked to the agent and the symbols involved, enabling per-symbol confidence tracking.
|
|
68
|
+
|
|
69
|
+
## Phase 3: ASSESS — Auto-Expertise Adjustment
|
|
70
|
+
|
|
71
|
+
When a verdict is recorded, the session work log automatically adjusts the agent's expertise confidence:
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
const delta = entry.verdict === 'accepted' ? 0.03
|
|
75
|
+
: entry.verdict === 'dismissed' ? -0.02
|
|
76
|
+
: entry.verdict === 'revised' ? -0.01
|
|
77
|
+
: 0; // deferred = no change
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
This adjustment is asymmetric by design:
|
|
81
|
+
|
|
82
|
+
- **+0.03 for accepted** — Positive reinforcement is slightly stronger than negative. This prevents a single bad review from tanking an otherwise reliable agent.
|
|
83
|
+
- **-0.02 for dismissed** — A dismissed contribution means the agent was wrong. Confidence should decrease, but not catastrophically.
|
|
84
|
+
- **-0.01 for revised** — A revised contribution was partially right. The penalty is smaller because the agent was in the right direction.
|
|
85
|
+
- **0 for deferred** — Deferral says nothing about correctness, only timing. No confidence change.
|
|
86
|
+
|
|
87
|
+
The adjustment is applied per-symbol. If the security agent's gate recommendation for `^authenticated` was accepted, its confidence on `^authenticated` increases by 0.03. Its confidence on unrelated symbols is unchanged.
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
for (const symbol of entry.symbols!) {
|
|
91
|
+
const exp = profile.expertise!.find(e => e.symbol === symbol);
|
|
92
|
+
if (exp) {
|
|
93
|
+
exp.confidence = Math.max(0, Math.min(1, exp.confidence + delta));
|
|
94
|
+
exp.sessions = (exp.sessions || 0) + 1;
|
|
95
|
+
exp.lastTouch = new Date().toISOString();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Confidence is clamped to `[0.0, 1.0]`. Sessions are incremented. The `lastTouch` timestamp is updated. This all happens as a fire-and-forget side effect of recording the verdict — the human never manually adjusts expertise scores.
|
|
101
|
+
|
|
102
|
+
## Phase 4: LEARN — Teacher Model and Journal Entries
|
|
103
|
+
|
|
104
|
+
At the end of an orchestration session, the Teacher Model runs a postflight learning pass. It reads the session work log, identifies patterns in the verdicts, and writes journal entries for each agent that participated:
|
|
105
|
+
|
|
106
|
+
```yaml
|
|
107
|
+
# Learning journal entry written by Teacher Model
|
|
108
|
+
id: LJ-2026-03-24-001
|
|
109
|
+
agent: security
|
|
110
|
+
timestamp: '2026-03-24T16:00:00.000Z'
|
|
111
|
+
trigger: human_feedback
|
|
112
|
+
insight: >-
|
|
113
|
+
Security review of webhook endpoints should check for Stripe
|
|
114
|
+
signature verification, not just gate coverage. The human revised
|
|
115
|
+
the gate recommendation to include webhook-specific checks.
|
|
116
|
+
project: dealoracle
|
|
117
|
+
transferable: true
|
|
118
|
+
confidence_before: 0.85
|
|
119
|
+
confidence_after: 0.84
|
|
120
|
+
pattern:
|
|
121
|
+
id: webhook-stripe-signature
|
|
122
|
+
applies_when: Reviewing webhook endpoints that receive Stripe events
|
|
123
|
+
correct_approach: Check for webhook signature verification in addition to gate coverage
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
The Teacher Model synthesizes verdict patterns into actionable journal entries. A single "revised" verdict becomes an insight about what the agent should do differently. The `trigger: human_feedback` records that this learning came from a human correction, not self-reflection.
|
|
127
|
+
|
|
128
|
+
## Phase 5: ADAPT — Journal Promotion to Notebooks
|
|
129
|
+
|
|
130
|
+
Journal entries that prove valuable over time are promoted into notebook entries by Sensei (trainer). The promotion pipeline:
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
Journal entry (agent-private) → Sensei reviews →
|
|
134
|
+
promoteFromLore() → Notebook entry (reusable snippet) →
|
|
135
|
+
buildProfileEnrichment() → Injected into future prompts
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
The key distinction: journal entries are raw learnings ("I was wrong about X because Y"). Notebook entries are distilled knowledge ("When doing X, use this pattern"). Sensei's job is to transform the former into the latter.
|
|
139
|
+
|
|
140
|
+
Not every journal entry becomes a notebook entry. Sensei evaluates:
|
|
141
|
+
- Is the insight transferable to other projects?
|
|
142
|
+
- Is it actionable (specific enough to apply)?
|
|
143
|
+
- Has the same insight appeared in multiple sessions (pattern confirmation)?
|
|
144
|
+
- Is the confidence high enough to be reliable?
|
|
145
|
+
|
|
146
|
+
## Phase 6: The Nomination Engine
|
|
147
|
+
|
|
148
|
+
The nomination engine connects the learning loop to real-time project activity. As events flow through the event stream, each active agent scores them against their attention patterns:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
Event (file-modified, gate-added, etc.)
|
|
152
|
+
↓
|
|
153
|
+
scoreEventForAgent(event, agentId, attention)
|
|
154
|
+
↓
|
|
155
|
+
AttentionScore { score, shouldNominate, breakdown }
|
|
156
|
+
↓
|
|
157
|
+
If shouldNominate → Create nomination
|
|
158
|
+
↓
|
|
159
|
+
Nomination surfaced in orchestration or paradigm_ambient_nominations
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
The nomination engine is the adaptive component: as an agent's attention patterns evolve (new concepts, adjusted thresholds), its nominations change. As its expertise confidence adjusts, its contributions become more or less influential. The system adapts based on empirical performance, not fixed rules.
|
|
163
|
+
|
|
164
|
+
## The Complete Cycle
|
|
165
|
+
|
|
166
|
+
Putting all six phases together for a single agent:
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
1. DO: Security agent reviews webhook endpoint, flags missing gate
|
|
170
|
+
2. RECORD: Human accepts the gate recommendation → verdict: accepted
|
|
171
|
+
3. ASSESS: Security confidence on ^authenticated: 0.85 → 0.88 (+0.03)
|
|
172
|
+
4. LEARN: Teacher Model writes journal entry about webhook gate patterns
|
|
173
|
+
5. ADAPT: Sensei promotes journal → notebook entry for webhook security
|
|
174
|
+
6. DO: Next session, security agent starts with webhook pattern in
|
|
175
|
+
its prompt via buildProfileEnrichment(). It applies the pattern
|
|
176
|
+
without needing to rediscover it.
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Each iteration through the loop makes the agent incrementally better. After 10 sessions with consistent feedback, the security agent's webhook review pattern is battle-tested, high-confidence, and automatically injected into every relevant orchestration. The human no longer needs to remind the agent about webhook-specific checks — the learning loop closed.
|
|
180
|
+
|
|
181
|
+
## What Makes This Different
|
|
182
|
+
|
|
183
|
+
Most AI systems have observation without adaptation. They log what happened but do not feed it back. Paradigm's agent system closes the loop through four mechanisms:
|
|
184
|
+
|
|
185
|
+
1. **Per-symbol expertise tracking** — Confidence adjusts based on verdicts, not manual scoring
|
|
186
|
+
2. **Asymmetric reinforcement** — +0.03/-0.02/-0.01 prevents a single bad session from destroying confidence
|
|
187
|
+
3. **Teacher Model postflight** — Journal entries are written automatically, not relying on agents to self-reflect
|
|
188
|
+
4. **Notebook promotion** — Insights become reusable patterns via Sensei, surfaced through buildProfileEnrichment()
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: N-para-701-model-tier-resolution
|
|
3
|
+
title: 'Lesson 6: Model Tier Resolution'
|
|
4
|
+
type: note
|
|
5
|
+
author: paradigm
|
|
6
|
+
created: '2026-04-22'
|
|
7
|
+
updated: '2026-04-22'
|
|
8
|
+
tags:
|
|
9
|
+
- course
|
|
10
|
+
- para-701
|
|
11
|
+
- three-capability-tiers
|
|
12
|
+
- model-resolution-config-block
|
|
13
|
+
- five-level-resolution-cascade
|
|
14
|
+
symbols: []
|
|
15
|
+
difficulty: beginner
|
|
16
|
+
estimatedMinutes: 5
|
|
17
|
+
prerequisites: []
|
|
18
|
+
category: paradigm-core
|
|
19
|
+
origin: imported
|
|
20
|
+
source: courses/para-701.json
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## The Platform Portability Problem
|
|
24
|
+
|
|
25
|
+
Early Paradigm agent profiles specified `defaultModel: opus | sonnet | haiku` — Anthropic-specific model names hardcoded into each agent's configuration. This created four problems:
|
|
26
|
+
|
|
27
|
+
1. **Platform lock-in** — These model names do not exist in Cursor, Windsurf, Copilot, or other IDEs. An agent profile designed for Claude Code breaks everywhere else.
|
|
28
|
+
2. **Plan limitations** — Not every user has access to Opus. A developer on a Sonnet-only plan cannot use agents that request Opus without manual profile editing.
|
|
29
|
+
3. **Provider assumptions** — The model names assume Anthropic. Users who want to use GPT-4o, Gemini, or local models through Ollama have no path.
|
|
30
|
+
4. **Maintenance burden** — Model names were hardcoded in the orchestrator as `DEFAULT_MODELS`. Every time Anthropic ships a new model, someone has to update agent profiles.
|
|
31
|
+
|
|
32
|
+
## The Solution: Capability Tiers
|
|
33
|
+
|
|
34
|
+
Model tier resolution replaces specific model names with abstract **capability tiers** that describe what the agent needs, not which model to use:
|
|
35
|
+
|
|
36
|
+
| Tier | Capability | Use Cases |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| `tier-1` (reasoning) | Complex analysis, multi-step planning | Architect, security audit, system design |
|
|
39
|
+
| `tier-2` (balanced) | General coding, review, design | Reviewer, designer, most agent work |
|
|
40
|
+
| `tier-3` (fast) | Simple tasks, documentation, bulk ops | Builder, tester, documentor |
|
|
41
|
+
|
|
42
|
+
Agent profiles now specify `modelTier` instead of `defaultModel`:
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
# Before (platform-locked)
|
|
46
|
+
defaultModel: opus
|
|
47
|
+
|
|
48
|
+
# After (platform-agnostic)
|
|
49
|
+
modelTier: tier-1
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
The orchestrator maps tier requests to available models through a resolution table in the project configuration.
|
|
53
|
+
|
|
54
|
+
## The model-resolution Config Block
|
|
55
|
+
|
|
56
|
+
The `model-resolution` block in `.paradigm/config.yaml` maps tiers to actual model identifiers:
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
# .paradigm/config.yaml
|
|
60
|
+
model-resolution:
|
|
61
|
+
tier-1: claude-opus-4-6 # Best reasoning available
|
|
62
|
+
tier-2: claude-sonnet-4-6 # Balanced
|
|
63
|
+
tier-3: claude-haiku-4-5 # Fast/cheap
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
This is the single configuration point where model choices live. Changing all agent models is a 3-line edit. Different environments ship different defaults:
|
|
67
|
+
|
|
68
|
+
```yaml
|
|
69
|
+
# Claude Code (full Anthropic access)
|
|
70
|
+
model-resolution:
|
|
71
|
+
tier-1: claude-opus-4-6
|
|
72
|
+
tier-2: claude-sonnet-4-6
|
|
73
|
+
tier-3: claude-haiku-4-5
|
|
74
|
+
|
|
75
|
+
# Cursor (may not have Opus access)
|
|
76
|
+
model-resolution:
|
|
77
|
+
tier-1: claude-sonnet-4-6
|
|
78
|
+
tier-2: claude-sonnet-4-6
|
|
79
|
+
tier-3: claude-haiku-4-5
|
|
80
|
+
|
|
81
|
+
# OpenAI-only environment
|
|
82
|
+
model-resolution:
|
|
83
|
+
tier-1: gpt-4o
|
|
84
|
+
tier-2: gpt-4o-mini
|
|
85
|
+
tier-3: gpt-4o-mini
|
|
86
|
+
|
|
87
|
+
# Self-hosted / Ollama
|
|
88
|
+
model-resolution:
|
|
89
|
+
tier-1: llama-3.1-70b
|
|
90
|
+
tier-2: llama-3.1-8b
|
|
91
|
+
tier-3: llama-3.1-8b
|
|
92
|
+
|
|
93
|
+
# Budget-conscious
|
|
94
|
+
model-resolution:
|
|
95
|
+
tier-1: claude-sonnet-4-6
|
|
96
|
+
tier-2: claude-sonnet-4-6
|
|
97
|
+
tier-3: claude-sonnet-4-6
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
The budget-conscious configuration demonstrates the power of tiers: you can run the full 54-agent orchestration system with Sonnet for everything by mapping all three tiers to the same model. The agents still have different personalities, expertise, and behaviors — the model tier only affects the underlying LLM capability.
|
|
101
|
+
|
|
102
|
+
## Resolution Order
|
|
103
|
+
|
|
104
|
+
When the orchestrator needs a model for an agent, it resolves through a five-level cascade:
|
|
105
|
+
|
|
106
|
+
1. **Agent profile** — `modelTier` field (what the agent requests)
|
|
107
|
+
2. **Project config** — `.paradigm/config.yaml` `model-resolution` block (project override)
|
|
108
|
+
3. **Global config** — `~/.paradigm/config.yaml` `model-resolution` block (user preference)
|
|
109
|
+
4. **IDE detection** — Auto-detect available models from environment variables (`CLAUDE_CODE`, `CURSOR_SESSION`, `WINDSURF_SESSION`)
|
|
110
|
+
5. **Fallback** — Default to tier-2 (balanced) with the best available model
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
function resolveModel(tier: ModelTier, config: ParadigmConfig): string {
|
|
114
|
+
return config.modelResolution?.[tier] ?? DEFAULTS[tier];
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
The cascade ensures that agent preferences are respected when possible, project-level overrides take precedence over global preferences, and there is always a working fallback even if nothing is configured.
|
|
119
|
+
|
|
120
|
+
## Environment Detection
|
|
121
|
+
|
|
122
|
+
The system auto-detects the IDE environment to set sensible defaults:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
function detectEnvironment(): ModelResolution {
|
|
126
|
+
if (process.env.CLAUDE_CODE) {
|
|
127
|
+
return {
|
|
128
|
+
'tier-1': 'claude-opus-4-6',
|
|
129
|
+
'tier-2': 'claude-sonnet-4-6',
|
|
130
|
+
'tier-3': 'claude-haiku-4-5'
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
if (process.env.CURSOR_SESSION) {
|
|
134
|
+
return {
|
|
135
|
+
'tier-1': 'claude-sonnet-4-6',
|
|
136
|
+
'tier-2': 'claude-sonnet-4-6',
|
|
137
|
+
'tier-3': 'claude-haiku-4-5'
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
// Fallback: everything is tier-2
|
|
141
|
+
return {
|
|
142
|
+
'tier-1': 'claude-sonnet-4-6',
|
|
143
|
+
'tier-2': 'claude-sonnet-4-6',
|
|
144
|
+
'tier-3': 'claude-sonnet-4-6'
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Claude Code users get the full tier spread (Opus/Sonnet/Haiku). Cursor users get Sonnet for tier-1 because Opus may not be available in Cursor's model selection. Unknown environments get Sonnet for everything as a safe fallback.
|
|
150
|
+
|
|
151
|
+
## Default Tier Assignments
|
|
152
|
+
|
|
153
|
+
The orchestrator assigns default tiers to standard agent roles:
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
const DEFAULT_TIERS: Record<string, ModelTier> = {
|
|
157
|
+
architect: 'tier-1', // Complex planning and design
|
|
158
|
+
security: 'tier-1', // Critical analysis, cannot miss vulnerabilities
|
|
159
|
+
reviewer: 'tier-2', // Balanced evaluation
|
|
160
|
+
builder: 'tier-3', // Fast implementation
|
|
161
|
+
tester: 'tier-3', // Fast test writing
|
|
162
|
+
documentor: 'tier-3', // Fast file maintenance
|
|
163
|
+
};
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Architect and security get tier-1 because their work requires deep reasoning (system design, vulnerability analysis). Builder, tester, and documentor get tier-3 because their work is more mechanical (implement this spec, write this test, update this .purpose file). Reviewer gets tier-2 as a balanced middle ground.
|
|
167
|
+
|
|
168
|
+
These defaults can be overridden per-agent in the `.agent` file (`modelTier: tier-2`) or per-project in config.yaml.
|
|
169
|
+
|
|
170
|
+
## Cost Estimation
|
|
171
|
+
|
|
172
|
+
The orchestrator uses tier cost multipliers for budget estimation:
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
const TIER_COST_MULTIPLIER = {
|
|
176
|
+
'tier-1': 3.0, // ~$15/MTok for Opus
|
|
177
|
+
'tier-2': 1.0, // ~$3/MTok for Sonnet (baseline)
|
|
178
|
+
'tier-3': 0.25, // ~$0.80/MTok for Haiku
|
|
179
|
+
};
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
The orchestration plan output includes cost estimates: "Estimated cost: $0.12 (tier-1: architect, tier-2: reviewer, tier-3: builder+documentor)". This transparency lets the human approve or modify the plan before execution.
|
|
183
|
+
|
|
184
|
+
## Backward Compatibility
|
|
185
|
+
|
|
186
|
+
The migration path preserves existing profiles:
|
|
187
|
+
|
|
188
|
+
```yaml
|
|
189
|
+
# Agent profile with both fields (transitional)
|
|
190
|
+
defaultModel: opus # Old field (deprecated, still read)
|
|
191
|
+
modelTier: tier-1 # New field (preferred)
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The resolution logic checks `modelTier` first. If only `defaultModel` exists, it maps: `opus` to `tier-1`, `sonnet` to `tier-2`, `haiku` to `tier-3`. This ensures existing agent profiles continue working without modification.
|
|
195
|
+
|
|
196
|
+
## What This Enables
|
|
197
|
+
|
|
198
|
+
Model tier resolution unlocks five capabilities:
|
|
199
|
+
|
|
200
|
+
- **Budget control** — Map all tiers to Sonnet and run the full orchestration at Sonnet cost.
|
|
201
|
+
- **Platform portability** — Same agents work in Claude Code, Cursor, Windsurf, and Copilot.
|
|
202
|
+
- **Provider flexibility** — Swap to OpenAI, Gemini, or local models by changing 3 lines in config.
|
|
203
|
+
- **Graceful degradation** — If the tier-1 model is unavailable, fall back to tier-2 automatically.
|
|
204
|
+
- **Team consistency** — The entire team shares one `model-resolution` config block, not per-agent model names.
|