jev-recipes 0.6.0 → 0.7.0
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/README.md +57 -11
- package/dist/catalog/generated/details/completion-gate.json +110 -0
- package/dist/catalog/generated/details/context-prune.json +59 -0
- package/dist/catalog/generated/details/diff-hazards.json +112 -0
- package/dist/catalog/generated/details/finger-actions.json +95 -0
- package/dist/catalog/generated/details/model-route.json +82 -0
- package/dist/catalog/generated/details/route-many.json +68 -0
- package/dist/catalog/generated/details/tool-call-gate.json +123 -0
- package/dist/catalog/generated/details/wake-gate.json +40 -0
- package/dist/catalog/generated/loaders.js +8 -0
- package/dist/catalog/generated/metadata.js +240 -14
- package/dist/catalog/generated/names.d.ts +1 -1
- package/dist/catalog/generated/names.js +8 -0
- package/dist/catalog/schema.d.ts +8 -0
- package/dist/cli/schema.d.ts +24 -0
- package/dist/recipes/cancellation-check/schema.d.ts +6 -6
- package/dist/recipes/clarify/index.js +2 -2
- package/dist/recipes/completion-gate/demo.json +29 -0
- package/dist/recipes/completion-gate/index.d.ts +5 -0
- package/dist/recipes/completion-gate/index.js +53 -0
- package/dist/recipes/completion-gate/schema.d.ts +103 -0
- package/dist/recipes/completion-gate/schema.js +33 -0
- package/dist/recipes/context-prune/demo.json +40 -0
- package/dist/recipes/context-prune/index.d.ts +5 -0
- package/dist/recipes/context-prune/index.js +42 -0
- package/dist/recipes/context-prune/schema.d.ts +58 -0
- package/dist/recipes/context-prune/schema.js +23 -0
- package/dist/recipes/diff-hazards/demo.json +18 -0
- package/dist/recipes/diff-hazards/index.d.ts +5 -0
- package/dist/recipes/diff-hazards/index.js +48 -0
- package/dist/recipes/diff-hazards/schema.d.ts +96 -0
- package/dist/recipes/diff-hazards/schema.js +24 -0
- package/dist/recipes/extraction-fidelity/schema.d.ts +2 -2
- package/dist/recipes/finger-actions/demo.json +58 -0
- package/dist/recipes/finger-actions/index.d.ts +5 -0
- package/dist/recipes/finger-actions/index.js +7 -0
- package/dist/recipes/finger-actions/schema.d.ts +48 -0
- package/dist/recipes/finger-actions/schema.js +10 -0
- package/dist/recipes/handoff/schema.d.ts +1 -1
- package/dist/recipes/model-route/demo.json +45 -0
- package/dist/recipes/model-route/index.d.ts +5 -0
- package/dist/recipes/model-route/index.js +35 -0
- package/dist/recipes/model-route/schema.d.ts +51 -0
- package/dist/recipes/model-route/schema.js +16 -0
- package/dist/recipes/mood-match/schema.d.ts +2 -2
- package/dist/recipes/performance-feedback-facets/demo.json +1 -1
- package/dist/recipes/performance-feedback-facets/index.js +2 -2
- package/dist/recipes/product-match/schema.d.ts +2 -2
- package/dist/recipes/route-many/demo.json +53 -0
- package/dist/recipes/route-many/index.d.ts +5 -0
- package/dist/recipes/route-many/index.js +48 -0
- package/dist/recipes/route-many/schema.d.ts +49 -0
- package/dist/recipes/route-many/schema.js +30 -0
- package/dist/recipes/sound-match/schema.d.ts +2 -2
- package/dist/recipes/step-complete/demo.json +1 -1
- package/dist/recipes/step-complete/index.js +2 -2
- package/dist/recipes/symptom-facets/demo.json +1 -1
- package/dist/recipes/symptom-facets/index.js +3 -3
- package/dist/recipes/tool-call-gate/demo.json +26 -0
- package/dist/recipes/tool-call-gate/index.d.ts +5 -0
- package/dist/recipes/tool-call-gate/index.js +67 -0
- package/dist/recipes/tool-call-gate/schema.d.ts +134 -0
- package/dist/recipes/tool-call-gate/schema.js +34 -0
- package/dist/recipes/trip-purpose-kind/schema.d.ts +3 -3
- package/dist/recipes/verify/index.js +4 -3
- package/dist/recipes/wake-gate/demo.json +20 -0
- package/dist/recipes/wake-gate/index.d.ts +5 -0
- package/dist/recipes/wake-gate/index.js +16 -0
- package/dist/recipes/wake-gate/schema.d.ts +40 -0
- package/dist/recipes/wake-gate/schema.js +15 -0
- package/dist/src/answers.js +10 -4
- package/dist/src/assignments.d.ts +2 -0
- package/dist/src/assignments.js +47 -0
- package/dist/src/batch.d.ts +12 -0
- package/dist/src/batch.js +23 -0
- package/dist/src/fanout.d.ts +20 -0
- package/dist/src/fanout.js +39 -0
- package/dist/src/index.d.ts +16 -0
- package/dist/src/index.js +8 -0
- package/dist/src/schema.d.ts +70 -0
- package/dist/src/schema.js +27 -0
- package/dist/src/selection.d.ts +18 -0
- package/dist/src/selection.js +41 -11
- package/package.json +38 -3
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
{
|
|
2
|
+
"inputSchema": {
|
|
3
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"request": { "type": "string" },
|
|
7
|
+
"toolCall": { "type": "string" },
|
|
8
|
+
"context": { "type": "string" },
|
|
9
|
+
"policy": { "type": "string" },
|
|
10
|
+
"minConfidence": { "type": "number", "minimum": 0, "maximum": 1 }
|
|
11
|
+
},
|
|
12
|
+
"required": ["request", "toolCall"]
|
|
13
|
+
},
|
|
14
|
+
"resultSchema": {
|
|
15
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
16
|
+
"type": "object",
|
|
17
|
+
"properties": {
|
|
18
|
+
"model": { "type": "string" },
|
|
19
|
+
"usage": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"properties": {
|
|
22
|
+
"input_tokens": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
|
|
23
|
+
"output_tokens": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
|
|
24
|
+
},
|
|
25
|
+
"required": ["input_tokens", "output_tokens"],
|
|
26
|
+
"additionalProperties": false
|
|
27
|
+
},
|
|
28
|
+
"status": { "type": "string", "enum": ["ready", "review"] },
|
|
29
|
+
"verdict": { "type": "string", "enum": ["allow", "ask", "deny", "unclear"] },
|
|
30
|
+
"suggestedAction": { "type": "string", "enum": ["allow", "ask", "deny"] },
|
|
31
|
+
"action": { "type": "string", "enum": ["allow", "ask", "deny"] },
|
|
32
|
+
"confidence": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
33
|
+
"probabilities": {
|
|
34
|
+
"type": "object",
|
|
35
|
+
"propertyNames": { "type": "string", "enum": ["allow", "ask", "deny", "unclear"] },
|
|
36
|
+
"additionalProperties": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
37
|
+
"required": ["allow", "ask", "deny", "unclear"]
|
|
38
|
+
},
|
|
39
|
+
"risks": {
|
|
40
|
+
"type": "object",
|
|
41
|
+
"properties": {
|
|
42
|
+
"irreversible": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"properties": {
|
|
45
|
+
"status": { "type": "string", "enum": ["ready", "review"] },
|
|
46
|
+
"verdict": { "type": "string", "enum": ["present", "absent"] },
|
|
47
|
+
"probability": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
48
|
+
"confidence": { "type": "number", "minimum": 0, "maximum": 1 }
|
|
49
|
+
},
|
|
50
|
+
"required": ["status", "verdict", "probability", "confidence"],
|
|
51
|
+
"additionalProperties": false
|
|
52
|
+
},
|
|
53
|
+
"destructive": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"properties": {
|
|
56
|
+
"status": { "type": "string", "enum": ["ready", "review"] },
|
|
57
|
+
"verdict": { "type": "string", "enum": ["present", "absent"] },
|
|
58
|
+
"probability": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
59
|
+
"confidence": { "type": "number", "minimum": 0, "maximum": 1 }
|
|
60
|
+
},
|
|
61
|
+
"required": ["status", "verdict", "probability", "confidence"],
|
|
62
|
+
"additionalProperties": false
|
|
63
|
+
},
|
|
64
|
+
"outOfScope": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"properties": {
|
|
67
|
+
"status": { "type": "string", "enum": ["ready", "review"] },
|
|
68
|
+
"verdict": { "type": "string", "enum": ["present", "absent"] },
|
|
69
|
+
"probability": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
70
|
+
"confidence": { "type": "number", "minimum": 0, "maximum": 1 }
|
|
71
|
+
},
|
|
72
|
+
"required": ["status", "verdict", "probability", "confidence"],
|
|
73
|
+
"additionalProperties": false
|
|
74
|
+
},
|
|
75
|
+
"exfiltrates": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"properties": {
|
|
78
|
+
"status": { "type": "string", "enum": ["ready", "review"] },
|
|
79
|
+
"verdict": { "type": "string", "enum": ["present", "absent"] },
|
|
80
|
+
"probability": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
81
|
+
"confidence": { "type": "number", "minimum": 0, "maximum": 1 }
|
|
82
|
+
},
|
|
83
|
+
"required": ["status", "verdict", "probability", "confidence"],
|
|
84
|
+
"additionalProperties": false
|
|
85
|
+
},
|
|
86
|
+
"injected": {
|
|
87
|
+
"type": "object",
|
|
88
|
+
"properties": {
|
|
89
|
+
"status": { "type": "string", "enum": ["ready", "review"] },
|
|
90
|
+
"verdict": { "type": "string", "enum": ["present", "absent"] },
|
|
91
|
+
"probability": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
92
|
+
"confidence": { "type": "number", "minimum": 0, "maximum": 1 }
|
|
93
|
+
},
|
|
94
|
+
"required": ["status", "verdict", "probability", "confidence"],
|
|
95
|
+
"additionalProperties": false
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"required": ["irreversible", "destructive", "outOfScope", "exfiltrates", "injected"],
|
|
99
|
+
"additionalProperties": false
|
|
100
|
+
},
|
|
101
|
+
"detected": {
|
|
102
|
+
"type": "array",
|
|
103
|
+
"items": {
|
|
104
|
+
"type": "string",
|
|
105
|
+
"enum": ["irreversible", "destructive", "outOfScope", "exfiltrates", "injected"]
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"required": [
|
|
110
|
+
"model",
|
|
111
|
+
"usage",
|
|
112
|
+
"status",
|
|
113
|
+
"verdict",
|
|
114
|
+
"suggestedAction",
|
|
115
|
+
"action",
|
|
116
|
+
"confidence",
|
|
117
|
+
"probabilities",
|
|
118
|
+
"risks",
|
|
119
|
+
"detected"
|
|
120
|
+
],
|
|
121
|
+
"additionalProperties": false
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"inputSchema": {
|
|
3
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"properties": {
|
|
6
|
+
"waitingFor": { "type": "string" },
|
|
7
|
+
"event": { "type": "string" },
|
|
8
|
+
"context": { "type": "string" },
|
|
9
|
+
"minConfidence": { "type": "number", "minimum": 0, "maximum": 1 }
|
|
10
|
+
},
|
|
11
|
+
"required": ["waitingFor", "event"]
|
|
12
|
+
},
|
|
13
|
+
"resultSchema": {
|
|
14
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
15
|
+
"type": "object",
|
|
16
|
+
"properties": {
|
|
17
|
+
"model": { "type": "string" },
|
|
18
|
+
"usage": {
|
|
19
|
+
"type": "object",
|
|
20
|
+
"properties": {
|
|
21
|
+
"input_tokens": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 },
|
|
22
|
+
"output_tokens": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }
|
|
23
|
+
},
|
|
24
|
+
"required": ["input_tokens", "output_tokens"],
|
|
25
|
+
"additionalProperties": false
|
|
26
|
+
},
|
|
27
|
+
"status": { "type": "string", "enum": ["ready", "review"] },
|
|
28
|
+
"verdict": { "type": "string", "enum": ["wake", "not_yet", "unrelated", "unclear"] },
|
|
29
|
+
"confidence": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
30
|
+
"probabilities": {
|
|
31
|
+
"type": "object",
|
|
32
|
+
"propertyNames": { "type": "string", "enum": ["wake", "not_yet", "unrelated", "unclear"] },
|
|
33
|
+
"additionalProperties": { "type": "number", "minimum": 0, "maximum": 1 },
|
|
34
|
+
"required": ["wake", "not_yet", "unrelated", "unclear"]
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"required": ["model", "usage", "status", "verdict", "confidence", "probabilities"],
|
|
38
|
+
"additionalProperties": false
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -46,12 +46,14 @@ export const recipeLoaders = {
|
|
|
46
46
|
'commit-message-fit': () => import('../../recipes/commit-message-fit/index.js').then((recipe) => (input, options) => recipe.commitMessageFit(recipe.commitMessageFitInputSchema.parse(input), options)),
|
|
47
47
|
'commitment-strength': () => import('../../recipes/commitment-strength/index.js').then((recipe) => (input, options) => recipe.commitmentStrength(recipe.commitmentStrengthInputSchema.parse(input), options)),
|
|
48
48
|
'comparable-fit': () => import('../../recipes/comparable-fit/index.js').then((recipe) => (input, options) => recipe.comparableFit(recipe.comparableFitInputSchema.parse(input), options)),
|
|
49
|
+
'completion-gate': () => import('../../recipes/completion-gate/index.js').then((recipe) => (input, options) => recipe.completionGate(recipe.completionGateInputSchema.parse(input), options)),
|
|
49
50
|
'confirmation-match': () => import('../../recipes/confirmation-match/index.js').then((recipe) => (input, options) => recipe.confirmationMatch(recipe.confirmationMatchInputSchema.parse(input), options)),
|
|
50
51
|
'consent-request': () => import('../../recipes/consent-request/index.js').then((recipe) => (input, options) => recipe.consentRequest(recipe.consentRequestInputSchema.parse(input), options)),
|
|
51
52
|
'consent-scope-fit': () => import('../../recipes/consent-scope-fit/index.js').then((recipe) => (input, options) => recipe.consentScopeFit(recipe.consentScopeFitInputSchema.parse(input), options)),
|
|
52
53
|
'constraint-strength': () => import('../../recipes/constraint-strength/index.js').then((recipe) => (input, options) => recipe.constraintStrength(recipe.constraintStrengthInputSchema.parse(input), options)),
|
|
53
54
|
'content-facets': () => import('../../recipes/content-facets/index.js').then((recipe) => (input, options) => recipe.contentFacets(recipe.contentFacetsInputSchema.parse(input), options)),
|
|
54
55
|
'content-freshness-signal': () => import('../../recipes/content-freshness-signal/index.js').then((recipe) => (input, options) => recipe.contentFreshnessSignal(recipe.contentFreshnessSignalInputSchema.parse(input), options)),
|
|
56
|
+
'context-prune': () => import('../../recipes/context-prune/index.js').then((recipe) => (input, options) => recipe.contextPrune(recipe.contextPruneInputSchema.parse(input), options)),
|
|
55
57
|
'context-role': () => import('../../recipes/context-role/index.js').then((recipe) => (input, options) => recipe.contextRole(recipe.contextRoleInputSchema.parse(input), options)),
|
|
56
58
|
'continuation-compare': () => import('../../recipes/continuation-compare/index.js').then((recipe) => (input, options) => recipe.continuationCompare(recipe.continuationCompareInputSchema.parse(input), options)),
|
|
57
59
|
'correction-target': () => import('../../recipes/correction-target/index.js').then((recipe) => (input, options) => recipe.correctionTarget(recipe.correctionTargetInputSchema.parse(input), options)),
|
|
@@ -60,6 +62,7 @@ export const recipeLoaders = {
|
|
|
60
62
|
'deadline-risk': () => import('../../recipes/deadline-risk/index.js').then((recipe) => (input, options) => recipe.deadlineRisk(recipe.deadlineRiskInputSchema.parse(input), options)),
|
|
61
63
|
'defect-report-facets': () => import('../../recipes/defect-report-facets/index.js').then((recipe) => (input, options) => recipe.defectReportFacets(recipe.defectReportFacetsInputSchema.parse(input), options)),
|
|
62
64
|
'delegation-fit': () => import('../../recipes/delegation-fit/index.js').then((recipe) => (input, options) => recipe.delegationFit(recipe.delegationFitInputSchema.parse(input), options)),
|
|
65
|
+
'diff-hazards': () => import('../../recipes/diff-hazards/index.js').then((recipe) => (input, options) => recipe.diffHazards(recipe.diffHazardsInputSchema.parse(input), options)),
|
|
63
66
|
'disclosure-facets': () => import('../../recipes/disclosure-facets/index.js').then((recipe) => (input, options) => recipe.disclosureFacets(recipe.disclosureFacetsInputSchema.parse(input), options)),
|
|
64
67
|
'dispute-kind': () => import('../../recipes/dispute-kind/index.js').then((recipe) => (input, options) => recipe.disputeKind(recipe.disputeKindInputSchema.parse(input), options)),
|
|
65
68
|
'document-role': () => import('../../recipes/document-role/index.js').then((recipe) => (input, options) => recipe.documentRole(recipe.documentRoleInputSchema.parse(input), options)),
|
|
@@ -86,6 +89,7 @@ export const recipeLoaders = {
|
|
|
86
89
|
'feedback-kind': () => import('../../recipes/feedback-kind/index.js').then((recipe) => (input, options) => recipe.feedbackKind(recipe.feedbackKindInputSchema.parse(input), options)),
|
|
87
90
|
'field-select': () => import('../../recipes/field-select/index.js').then((recipe) => (input, options) => recipe.fieldSelect(recipe.fieldSelectInputSchema.parse(input), options)),
|
|
88
91
|
'financial-advice-signal': () => import('../../recipes/financial-advice-signal/index.js').then((recipe) => (input, options) => recipe.financialAdviceSignal(recipe.financialAdviceSignalInputSchema.parse(input), options)),
|
|
92
|
+
'finger-actions': () => import('../../recipes/finger-actions/index.js').then((recipe) => (input, options) => recipe.fingerActions(recipe.fingerActionsInputSchema.parse(input), options)),
|
|
89
93
|
'followup-link': () => import('../../recipes/followup-link/index.js').then((recipe) => (input, options) => recipe.followupLink(recipe.followupLinkInputSchema.parse(input), options)),
|
|
90
94
|
'forecast-confidence-wording': () => import('../../recipes/forecast-confidence-wording/index.js').then((recipe) => (input, options) => recipe.forecastConfidenceWording(recipe.forecastConfidenceWordingInputSchema.parse(input), options)),
|
|
91
95
|
'format-fit': () => import('../../recipes/format-fit/index.js').then((recipe) => (input, options) => recipe.formatFit(recipe.formatFitInputSchema.parse(input), options)),
|
|
@@ -132,6 +136,7 @@ export const recipeLoaders = {
|
|
|
132
136
|
'memory-value': () => import('../../recipes/memory-value/index.js').then((recipe) => (input, options) => recipe.memoryValue(recipe.memoryValueInputSchema.parse(input), options)),
|
|
133
137
|
'message-facets': () => import('../../recipes/message-facets/index.js').then((recipe) => (input, options) => recipe.messageFacets(recipe.messageFacetsInputSchema.parse(input), options)),
|
|
134
138
|
'methods-facets': () => import('../../recipes/methods-facets/index.js').then((recipe) => (input, options) => recipe.methodsFacets(recipe.methodsFacetsInputSchema.parse(input), options)),
|
|
139
|
+
'model-route': () => import('../../recipes/model-route/index.js').then((recipe) => (input, options) => recipe.modelRoute(recipe.modelRouteInputSchema.parse(input), options)),
|
|
135
140
|
'modulation-moment': () => import('../../recipes/modulation-moment/index.js').then((recipe) => (input, options) => recipe.modulationMoment(recipe.modulationMomentInputSchema.parse(input), options)),
|
|
136
141
|
'mood-match': () => import('../../recipes/mood-match/index.js').then((recipe) => (input, options) => recipe.moodMatch(recipe.moodMatchInputSchema.parse(input), options)),
|
|
137
142
|
'mood-request': () => import('../../recipes/mood-request/index.js').then((recipe) => (input, options) => recipe.moodRequest(recipe.moodRequestInputSchema.parse(input), options)),
|
|
@@ -197,6 +202,7 @@ export const recipeLoaders = {
|
|
|
197
202
|
'rollback-signal': () => import('../../recipes/rollback-signal/index.js').then((recipe) => (input, options) => recipe.rollbackSignal(recipe.rollbackSignalInputSchema.parse(input), options)),
|
|
198
203
|
'root-cause-depth': () => import('../../recipes/root-cause-depth/index.js').then((recipe) => (input, options) => recipe.rootCauseDepth(recipe.rootCauseDepthInputSchema.parse(input), options)),
|
|
199
204
|
route: () => import('../../recipes/route/index.js').then((recipe) => (input, options) => recipe.route(recipe.routeInputSchema.parse(input), options)),
|
|
205
|
+
'route-many': () => import('../../recipes/route-many/index.js').then((recipe) => (input, options) => recipe.routeMany(recipe.routeManyInputSchema.parse(input), options)),
|
|
200
206
|
'rule-compliance': () => import('../../recipes/rule-compliance/index.js').then((recipe) => (input, options) => recipe.ruleCompliance(recipe.ruleComplianceInputSchema.parse(input), options)),
|
|
201
207
|
'runbook-fit': () => import('../../recipes/runbook-fit/index.js').then((recipe) => (input, options) => recipe.runbookFit(recipe.runbookFitInputSchema.parse(input), options)),
|
|
202
208
|
'safety-incident-kind': () => import('../../recipes/safety-incident-kind/index.js').then((recipe) => (input, options) => recipe.safetyIncidentKind(recipe.safetyIncidentKindInputSchema.parse(input), options)),
|
|
@@ -224,6 +230,7 @@ export const recipeLoaders = {
|
|
|
224
230
|
'tension-level': () => import('../../recipes/tension-level/index.js').then((recipe) => (input, options) => recipe.tensionLevel(recipe.tensionLevelInputSchema.parse(input), options)),
|
|
225
231
|
'ticket-match': () => import('../../recipes/ticket-match/index.js').then((recipe) => (input, options) => recipe.ticketMatch(recipe.ticketMatchInputSchema.parse(input), options)),
|
|
226
232
|
'tone-check': () => import('../../recipes/tone-check/index.js').then((recipe) => (input, options) => recipe.toneCheck(recipe.toneCheckInputSchema.parse(input), options)),
|
|
233
|
+
'tool-call-gate': () => import('../../recipes/tool-call-gate/index.js').then((recipe) => (input, options) => recipe.toolCallGate(recipe.toolCallGateInputSchema.parse(input), options)),
|
|
227
234
|
'tool-compare': () => import('../../recipes/tool-compare/index.js').then((recipe) => (input, options) => recipe.toolCompare(recipe.toolCompareInputSchema.parse(input), options)),
|
|
228
235
|
'tool-fit': () => import('../../recipes/tool-fit/index.js').then((recipe) => (input, options) => recipe.toolFit(recipe.toolFitInputSchema.parse(input), options)),
|
|
229
236
|
'topic-shift': () => import('../../recipes/topic-shift/index.js').then((recipe) => (input, options) => recipe.topicShift(recipe.topicShiftInputSchema.parse(input), options)),
|
|
@@ -233,5 +240,6 @@ export const recipeLoaders = {
|
|
|
233
240
|
'uncertainty-expression': () => import('../../recipes/uncertainty-expression/index.js').then((recipe) => (input, options) => recipe.uncertaintyExpression(recipe.uncertaintyExpressionInputSchema.parse(input), options)),
|
|
234
241
|
'urgency-signal': () => import('../../recipes/urgency-signal/index.js').then((recipe) => (input, options) => recipe.urgencySignal(recipe.urgencySignalInputSchema.parse(input), options)),
|
|
235
242
|
verify: () => import('../../recipes/verify/index.js').then((recipe) => (input, options) => recipe.verify(recipe.verifyInputSchema.parse(input), options)),
|
|
243
|
+
'wake-gate': () => import('../../recipes/wake-gate/index.js').then((recipe) => (input, options) => recipe.wakeGate(recipe.wakeGateInputSchema.parse(input), options)),
|
|
236
244
|
'workaround-fit': () => import('../../recipes/workaround-fit/index.js').then((recipe) => (input, options) => recipe.workaroundFit(recipe.workaroundFitInputSchema.parse(input), options)),
|
|
237
245
|
};
|
|
@@ -26,7 +26,7 @@ export const recipeMetadata = [
|
|
|
26
26
|
title: 'Label the side effects of an action',
|
|
27
27
|
description: 'Which side effects does the described action involve: writing or modifying data, sending a message or notification, spending or moving money, deleting something, or calling an external service?',
|
|
28
28
|
category: 'workflow',
|
|
29
|
-
tags: ['agent', 'safety', 'action', 'side-effects', 'approval', 'labels'],
|
|
29
|
+
tags: ['agent', 'safety', 'action', 'side-effects', 'approval', 'labels', 'harness'],
|
|
30
30
|
limitations: [
|
|
31
31
|
'Labels the effects the action description states or plainly entails. It does not know what your tools actually do behind the description.',
|
|
32
32
|
'Read-only lookups against an external API still count as external calls; whether that is acceptable is a policy decision for application code.',
|
|
@@ -49,7 +49,7 @@ export const recipeMetadata = [
|
|
|
49
49
|
title: 'Grade action reversibility',
|
|
50
50
|
description: 'How reversible is action, given any context, from a trivial undo to an irreversible external effect?',
|
|
51
51
|
category: 'workflow',
|
|
52
|
-
tags: ['agent', 'safety', 'action', 'reversibility', 'approval'],
|
|
52
|
+
tags: ['agent', 'safety', 'action', 'reversibility', 'approval', 'harness'],
|
|
53
53
|
limitations: [
|
|
54
54
|
'Grades the action as described. It does not know which undo, backup, or recall facilities your system actually provides unless context says so.',
|
|
55
55
|
'Reversibility is not permission. An irreversible action may be exactly what the user asked for, and a trivial one may still be out of scope.',
|
|
@@ -67,7 +67,7 @@ export const recipeMetadata = [
|
|
|
67
67
|
title: 'Check proposed action scope',
|
|
68
68
|
description: 'Is proposedAction within the work requested in request and constraints?',
|
|
69
69
|
category: 'workflow',
|
|
70
|
-
tags: ['workflow', 'action', 'scope'],
|
|
70
|
+
tags: ['workflow', 'action', 'scope', 'harness'],
|
|
71
71
|
limitations: [
|
|
72
72
|
'Assesses semantic scope only. User authorization and access controls must be enforced by the application.',
|
|
73
73
|
],
|
|
@@ -1038,6 +1038,32 @@ export const recipeMetadata = [
|
|
|
1038
1038
|
},
|
|
1039
1039
|
],
|
|
1040
1040
|
},
|
|
1041
|
+
{
|
|
1042
|
+
id: 'completion-gate',
|
|
1043
|
+
title: 'Gate an agent claiming it is done',
|
|
1044
|
+
description: 'Did an agent finish task, judging report against evidence, with unproven claims, quietly narrowed scope, open questions, and unresolved errors flagged in the same call?',
|
|
1045
|
+
category: 'workflow',
|
|
1046
|
+
tags: ['agent', 'completion', 'stop-hook', 'verification', 'evidence', 'harness', 'done'],
|
|
1047
|
+
limitations: [
|
|
1048
|
+
'Judges only the supplied report and evidence. It does not run tests or inspect the repository; supply that output in evidence.',
|
|
1049
|
+
'A complete verdict means the supplied material shows the task done, not that the work is correct or well made.',
|
|
1050
|
+
],
|
|
1051
|
+
useWhen: 'A coding agent says it is finished and you must decide, before accepting or before letting it stop, whether the work is actually complete.',
|
|
1052
|
+
related: [
|
|
1053
|
+
{
|
|
1054
|
+
id: 'step-complete',
|
|
1055
|
+
reason: 'Use step-complete to check one explicit completion condition against evidence.',
|
|
1056
|
+
},
|
|
1057
|
+
{
|
|
1058
|
+
id: 'goal-drift',
|
|
1059
|
+
reason: 'Use goal-drift while the agent is still working to catch a step that wanders from the goal.',
|
|
1060
|
+
},
|
|
1061
|
+
{
|
|
1062
|
+
id: 'result-plausibility',
|
|
1063
|
+
reason: 'Use result-plausibility to check whether a single tool result is a real answer.',
|
|
1064
|
+
},
|
|
1065
|
+
],
|
|
1066
|
+
},
|
|
1041
1067
|
{
|
|
1042
1068
|
id: 'confirmation-match',
|
|
1043
1069
|
title: 'Interpret a confirmation',
|
|
@@ -1179,6 +1205,33 @@ export const recipeMetadata = [
|
|
|
1179
1205
|
},
|
|
1180
1206
|
],
|
|
1181
1207
|
},
|
|
1208
|
+
{
|
|
1209
|
+
id: 'context-prune',
|
|
1210
|
+
title: 'Prune agent context',
|
|
1211
|
+
description: 'Which of items, earlier tool results and messages in an agent session, are still needed to finish objective, so the rest can be dropped from context?',
|
|
1212
|
+
category: 'memory',
|
|
1213
|
+
tags: ['agent', 'context', 'compaction', 'prune', 'memory', 'tool-results', 'harness'],
|
|
1214
|
+
limitations: [
|
|
1215
|
+
'Judges each item on its own text and the stated objective. It cannot see dependencies between items unless their text makes them explicit.',
|
|
1216
|
+
'Uncertain items stay in keep. A short objective that hides what the agent still has to do makes most items look unnecessary; state the remaining work concretely.',
|
|
1217
|
+
'Accepts up to 50 items per call. Chunk longer histories and pass recent so later chunks know what was already handled.',
|
|
1218
|
+
],
|
|
1219
|
+
useWhen: 'An agent session is growing long and you want to drop stale tool output and messages before the next model turn without summarizing what must stay verbatim.',
|
|
1220
|
+
related: [
|
|
1221
|
+
{
|
|
1222
|
+
id: 'rerank',
|
|
1223
|
+
reason: 'Use rerank to order passages by relevance to a query rather than decide what an agent still needs.',
|
|
1224
|
+
},
|
|
1225
|
+
{
|
|
1226
|
+
id: 'memory-value',
|
|
1227
|
+
reason: 'Use memory-value to decide whether a fact is worth storing long term.',
|
|
1228
|
+
},
|
|
1229
|
+
{
|
|
1230
|
+
id: 'progress-stall',
|
|
1231
|
+
reason: 'Use progress-stall to detect an agent that keeps reprocessing the same context.',
|
|
1232
|
+
},
|
|
1233
|
+
],
|
|
1234
|
+
},
|
|
1182
1235
|
{
|
|
1183
1236
|
id: 'context-role',
|
|
1184
1237
|
title: 'Identify a passage role',
|
|
@@ -1329,7 +1382,7 @@ export const recipeMetadata = [
|
|
|
1329
1382
|
title: 'Check delegation fit',
|
|
1330
1383
|
description: 'Does subtask fall within the capabilities described for the delegate?',
|
|
1331
1384
|
category: 'workflow',
|
|
1332
|
-
tags: ['agent', 'delegation', 'capabilities', 'routing', 'multi-agent'],
|
|
1385
|
+
tags: ['agent', 'delegation', 'capabilities', 'routing', 'multi-agent', 'harness'],
|
|
1333
1386
|
limitations: [
|
|
1334
1387
|
'Judges fit against the capabilities as written. Abilities the delegate has but the description omits count as missing.',
|
|
1335
1388
|
'Reports whether the subtask is within scope, not whether the delegate would do it well or how long it would take.',
|
|
@@ -1346,6 +1399,41 @@ export const recipeMetadata = [
|
|
|
1346
1399
|
},
|
|
1347
1400
|
],
|
|
1348
1401
|
},
|
|
1402
|
+
{
|
|
1403
|
+
id: 'diff-hazards',
|
|
1404
|
+
title: 'Flag hazards in a code diff',
|
|
1405
|
+
description: 'Which hazards does diff introduce: leaked secrets, destructive commands, debug leftovers, weakened tests, or dependency changes?',
|
|
1406
|
+
category: 'workflow',
|
|
1407
|
+
tags: [
|
|
1408
|
+
'diff',
|
|
1409
|
+
'code-review',
|
|
1410
|
+
'secrets',
|
|
1411
|
+
'destructive',
|
|
1412
|
+
'pre-commit',
|
|
1413
|
+
'agent',
|
|
1414
|
+
'safety',
|
|
1415
|
+
'harness',
|
|
1416
|
+
],
|
|
1417
|
+
limitations: [
|
|
1418
|
+
'Reads only the supplied diff text. It does not run the code, resolve imports, or see files outside the diff.',
|
|
1419
|
+
'A pattern that looks like a secret, such as an example key in documentation, may be flagged; treat detections as a prompt for review, not proof.',
|
|
1420
|
+
],
|
|
1421
|
+
useWhen: 'A coding agent or pre-commit hook needs a fast screen of a diff for the mistakes that reviewers most often catch late.',
|
|
1422
|
+
related: [
|
|
1423
|
+
{
|
|
1424
|
+
id: 'change-risk',
|
|
1425
|
+
reason: 'Use change-risk to grade the overall shipping risk of a described change rather than flag specific hazards in the diff text.',
|
|
1426
|
+
},
|
|
1427
|
+
{
|
|
1428
|
+
id: 'commit-message-fit',
|
|
1429
|
+
reason: 'Use commit-message-fit to check whether the commit message describes the change.',
|
|
1430
|
+
},
|
|
1431
|
+
{
|
|
1432
|
+
id: 'breaking-change-signal',
|
|
1433
|
+
reason: 'Use breaking-change-signal to check whether a change breaks callers.',
|
|
1434
|
+
},
|
|
1435
|
+
],
|
|
1436
|
+
},
|
|
1349
1437
|
{
|
|
1350
1438
|
id: 'disclosure-facets',
|
|
1351
1439
|
title: 'Label what a property disclosure addresses',
|
|
@@ -1918,6 +2006,29 @@ export const recipeMetadata = [
|
|
|
1918
2006
|
},
|
|
1919
2007
|
],
|
|
1920
2008
|
},
|
|
2009
|
+
{
|
|
2010
|
+
id: 'finger-actions',
|
|
2011
|
+
title: 'Choose an action for every finger',
|
|
2012
|
+
description: 'On beat, which listed option should each finger in fingers take, given music and style, or rest?',
|
|
2013
|
+
category: 'workflow',
|
|
2014
|
+
tags: ['music', 'piano', 'performance', 'fingers', 'assignment', 'live-performance', 'agent'],
|
|
2015
|
+
limitations: [
|
|
2016
|
+
'Each finger is judged as its own question within one request, so two fingers can pick the same key. Resolve collisions and physical reach in code.',
|
|
2017
|
+
'Options are the caller-supplied reachable actions for that finger; the recipe does not invent notes or check key membership.',
|
|
2018
|
+
'Beat timing, note durations, and MIDI output belong in application code.',
|
|
2019
|
+
],
|
|
2020
|
+
useWhen: 'A playing loop advances one subdivision at a time and wants every finger to pick from its own reachable options in a single call.',
|
|
2021
|
+
related: [
|
|
2022
|
+
{
|
|
2023
|
+
id: 'next-note',
|
|
2024
|
+
reason: 'Use next-note when the loop chooses one melodic note rather than an action per finger.',
|
|
2025
|
+
},
|
|
2026
|
+
{
|
|
2027
|
+
id: 'next-chord',
|
|
2028
|
+
reason: 'Use next-chord to pick the harmony first, then let finger-actions voice it.',
|
|
2029
|
+
},
|
|
2030
|
+
],
|
|
2031
|
+
},
|
|
1921
2032
|
{
|
|
1922
2033
|
id: 'followup-link',
|
|
1923
2034
|
title: 'Link a follow-up request',
|
|
@@ -2088,7 +2199,7 @@ export const recipeMetadata = [
|
|
|
2088
2199
|
title: 'Detect goal drift',
|
|
2089
2200
|
description: 'Does step still serve goal, or has work drifted to something goal did not ask for?',
|
|
2090
2201
|
category: 'workflow',
|
|
2091
|
-
tags: ['agent', 'goal', 'drift', 'scope', 'monitoring', 'gate'],
|
|
2202
|
+
tags: ['agent', 'goal', 'drift', 'scope', 'monitoring', 'gate', 'harness'],
|
|
2092
2203
|
limitations: [
|
|
2093
2204
|
'Judges a single step against the stated goal. It does not know whether the user later widened or changed the goal unless context says so.',
|
|
2094
2205
|
'Reports drift, not whether the drifted work is harmful or valuable. Stopping, asking, or continuing is an application decision.',
|
|
@@ -2169,7 +2280,7 @@ export const recipeMetadata = [
|
|
|
2169
2280
|
title: 'Grade handoff completeness',
|
|
2170
2281
|
description: 'How ready is item, a work description being handed to another agent or person, to be picked up without asking questions, on a five-level rubric?',
|
|
2171
2282
|
category: 'workflow',
|
|
2172
|
-
tags: ['agent', 'delegation', 'handoff', 'completeness', 'multi-agent'],
|
|
2283
|
+
tags: ['agent', 'delegation', 'handoff', 'completeness', 'multi-agent', 'harness'],
|
|
2173
2284
|
limitations: [
|
|
2174
2285
|
'Grades what the item states, not whether the stated goal is correct, feasible, or worth doing.',
|
|
2175
2286
|
'Cannot know what the recipient already knows, so shared context that is not written into the item counts as missing.',
|
|
@@ -2250,7 +2361,7 @@ export const recipeMetadata = [
|
|
|
2250
2361
|
title: 'Detect agent-directed instructions',
|
|
2251
2362
|
description: 'Does text contain instructions aimed at steering an AI system or agent?',
|
|
2252
2363
|
category: 'workflow',
|
|
2253
|
-
tags: ['security', 'prompt-injection', 'agent', 'safety', 'gate', 'retrieval'],
|
|
2364
|
+
tags: ['security', 'prompt-injection', 'agent', 'safety', 'gate', 'retrieval', 'harness'],
|
|
2254
2365
|
limitations: [
|
|
2255
2366
|
'Detects instruction-like content aimed at machines. It does not judge whether the instructions would succeed or are malicious.',
|
|
2256
2367
|
'Quarantine, stripping, and logging decisions belong in application code.',
|
|
@@ -2333,7 +2444,7 @@ export const recipeMetadata = [
|
|
|
2333
2444
|
title: 'Decide which conflicting instruction wins',
|
|
2334
2445
|
description: 'When firstInstruction and secondInstruction conflict, which should take precedence under the stated policy?',
|
|
2335
2446
|
category: 'workflow',
|
|
2336
|
-
tags: ['agent', 'instructions', 'policy', 'precedence', 'comparison', 'safety'],
|
|
2447
|
+
tags: ['agent', 'instructions', 'policy', 'precedence', 'comparison', 'safety', 'harness'],
|
|
2337
2448
|
limitations: [
|
|
2338
2449
|
'Applies the policy as written. It does not decide whether the policy itself is sensible or whether the instructions really conflict.',
|
|
2339
2450
|
'Depends on each instruction stating or implying its source; if the policy ranks by source and the source is not given, the result is unclear.',
|
|
@@ -2918,6 +3029,37 @@ export const recipeMetadata = [
|
|
|
2918
3029
|
},
|
|
2919
3030
|
],
|
|
2920
3031
|
},
|
|
3032
|
+
{
|
|
3033
|
+
id: 'model-route',
|
|
3034
|
+
title: 'Route a request to a model tier',
|
|
3035
|
+
description: 'Which of the described models should serve request, and how much reasoning effort does it need, decided in one call so a cheap model handles easy turns and a capable one handles hard turns?',
|
|
3036
|
+
category: 'workflow',
|
|
3037
|
+
tags: [
|
|
3038
|
+
'agent',
|
|
3039
|
+
'model-routing',
|
|
3040
|
+
'cost',
|
|
3041
|
+
'effort',
|
|
3042
|
+
'reasoning',
|
|
3043
|
+
'tiering',
|
|
3044
|
+
'harness',
|
|
3045
|
+
'gateway',
|
|
3046
|
+
],
|
|
3047
|
+
limitations: [
|
|
3048
|
+
'Chooses among the supplied descriptions only. The quality of the routing depends on how honestly each model entry describes its strengths, weaknesses, and cost.',
|
|
3049
|
+
'The effort grade is a judgment about the request text, not a measurement; calibrate its thresholds against your own traffic.',
|
|
3050
|
+
],
|
|
3051
|
+
useWhen: 'An agent harness, gateway, or proxy chooses per request which LLM and thinking level to use, and you want that choice made in well under a second.',
|
|
3052
|
+
related: [
|
|
3053
|
+
{
|
|
3054
|
+
id: 'route',
|
|
3055
|
+
reason: 'Use route to send a request to a named handler or team when no effort level is needed.',
|
|
3056
|
+
},
|
|
3057
|
+
{
|
|
3058
|
+
id: 'task-complexity',
|
|
3059
|
+
reason: 'Use task-complexity for a five-level complexity grade without picking a model.',
|
|
3060
|
+
},
|
|
3061
|
+
],
|
|
3062
|
+
},
|
|
2921
3063
|
{
|
|
2922
3064
|
id: 'modulation-moment',
|
|
2923
3065
|
title: 'Check whether now is a moment to change key',
|
|
@@ -3686,7 +3828,7 @@ export const recipeMetadata = [
|
|
|
3686
3828
|
title: 'Detect a stalled agent',
|
|
3687
3829
|
description: 'Does transcript, the recent agent steps, show the agent failing to make progress toward objective by repeating actions, circling, or reprocessing the same information?',
|
|
3688
3830
|
category: 'workflow',
|
|
3689
|
-
tags: ['agent', 'monitoring', 'loop', 'stall', 'safety'],
|
|
3831
|
+
tags: ['agent', 'monitoring', 'loop', 'stall', 'safety', 'harness'],
|
|
3690
3832
|
limitations: [
|
|
3691
3833
|
'Judges the window of steps supplied in transcript. A loop longer than the window, or progress made before it, is invisible.',
|
|
3692
3834
|
'Reports that the agent is stalled, not why or what it should do instead. Interrupting, redirecting, or escalating is an application decision.',
|
|
@@ -4162,7 +4304,7 @@ export const recipeMetadata = [
|
|
|
4162
4304
|
title: 'Check result plausibility',
|
|
4163
4305
|
description: 'Is result a plausible, internally consistent answer to request rather than an error, placeholder, empty, or unrelated output dressed as data?',
|
|
4164
4306
|
category: 'workflow',
|
|
4165
|
-
tags: ['agent', 'tool-result', 'plausibility', 'validation', 'quality', 'gate'],
|
|
4307
|
+
tags: ['agent', 'tool-result', 'plausibility', 'validation', 'quality', 'gate', 'harness'],
|
|
4166
4308
|
limitations: [
|
|
4167
4309
|
'Judges internal consistency and fit to the request, not factual accuracy. A plausible result can still be wrong.',
|
|
4168
4310
|
'A genuine empty answer, such as a search that legitimately found nothing, is only plausible if the result says so rather than returning blank output.',
|
|
@@ -4218,7 +4360,7 @@ export const recipeMetadata = [
|
|
|
4218
4360
|
title: 'Decide whether to retry',
|
|
4219
4361
|
description: 'Does failure describe a transient condition where an identical retry could succeed, given any attempt history?',
|
|
4220
4362
|
category: 'workflow',
|
|
4221
|
-
tags: ['agent', 'retry', 'failure', 'resilience', 'transient', 'gate'],
|
|
4363
|
+
tags: ['agent', 'retry', 'failure', 'resilience', 'transient', 'gate', 'harness'],
|
|
4222
4364
|
limitations: [
|
|
4223
4365
|
'Judges the failure text as written. It does not know your retry budget, backoff policy, or whether the action is safe to repeat.',
|
|
4224
4366
|
'Says whether an identical retry could succeed, not whether a modified attempt would. Fixing inputs or permissions is a different decision.',
|
|
@@ -4394,6 +4536,28 @@ export const recipeMetadata = [
|
|
|
4394
4536
|
},
|
|
4395
4537
|
],
|
|
4396
4538
|
},
|
|
4539
|
+
{
|
|
4540
|
+
id: 'route-many',
|
|
4541
|
+
title: 'Route many requests in batches',
|
|
4542
|
+
description: 'Which named route handles each of up to 500 requests, judged in batched Jev requests so a queue of tickets, emails, or events is routed in a handful of calls instead of one per item?',
|
|
4543
|
+
category: 'support',
|
|
4544
|
+
tags: ['batch', 'routing', 'triage', 'queue', 'bulk', 'tickets', 'email', 'throughput'],
|
|
4545
|
+
limitations: [
|
|
4546
|
+
'Every request in a batch shares one model call, so accuracy can fall as batches grow; the default batch size of 20 is a starting point to tune against your own labels.',
|
|
4547
|
+
'Per-item results are independent judgments. The recipe does not deduplicate or group related requests.',
|
|
4548
|
+
],
|
|
4549
|
+
useWhen: 'You have a backlog or stream of messages to route to the same set of handlers and want batched throughput with a per-item review outcome.',
|
|
4550
|
+
related: [
|
|
4551
|
+
{
|
|
4552
|
+
id: 'route',
|
|
4553
|
+
reason: 'Use route for a single request, or when each request has its own set of routes.',
|
|
4554
|
+
},
|
|
4555
|
+
{
|
|
4556
|
+
id: 'ticket-match',
|
|
4557
|
+
reason: 'Use ticket-match to link a new message to an existing ticket rather than a queue.',
|
|
4558
|
+
},
|
|
4559
|
+
],
|
|
4560
|
+
},
|
|
4397
4561
|
{
|
|
4398
4562
|
id: 'rule-compliance',
|
|
4399
4563
|
title: 'Check rule compliance',
|
|
@@ -4682,7 +4846,7 @@ export const recipeMetadata = [
|
|
|
4682
4846
|
title: 'Check one completion condition',
|
|
4683
4847
|
description: 'Does evidence establish that condition has been met?',
|
|
4684
4848
|
category: 'workflow',
|
|
4685
|
-
tags: ['workflow', 'step', 'complete', 'alignment-research'],
|
|
4849
|
+
tags: ['workflow', 'step', 'complete', 'alignment-research', 'harness'],
|
|
4686
4850
|
limitations: [
|
|
4687
4851
|
'Assesses supplied evidence for one condition. Use exact system state checks when the condition can be determined in code.',
|
|
4688
4852
|
],
|
|
@@ -4981,12 +5145,52 @@ export const recipeMetadata = [
|
|
|
4981
5145
|
},
|
|
4982
5146
|
],
|
|
4983
5147
|
},
|
|
5148
|
+
{
|
|
5149
|
+
id: 'tool-call-gate',
|
|
5150
|
+
title: 'Gate an agent tool call',
|
|
5151
|
+
description: 'Should an agent run toolCall now, ask a person first, or refuse it, given request and policy, with irreversible, destructive, out-of-scope, exfiltration, and injection risks flagged in the same call?',
|
|
5152
|
+
category: 'workflow',
|
|
5153
|
+
tags: [
|
|
5154
|
+
'agent',
|
|
5155
|
+
'tool-call',
|
|
5156
|
+
'permission',
|
|
5157
|
+
'guardrail',
|
|
5158
|
+
'safety',
|
|
5159
|
+
'injection',
|
|
5160
|
+
'pre-tool-use',
|
|
5161
|
+
'harness',
|
|
5162
|
+
],
|
|
5163
|
+
limitations: [
|
|
5164
|
+
'Judges the call as described in toolCall. Pass the actual tool name and arguments, not a summary written by the agent.',
|
|
5165
|
+
'Deterministic rules such as allowlists, path restrictions, and rate limits are cheaper and more reliable for what they cover; run them first and use this recipe for the cases they leave open.',
|
|
5166
|
+
'A review or ask outcome means a person should look; it does not itself block execution. The application must enforce the action.',
|
|
5167
|
+
],
|
|
5168
|
+
useWhen: 'A coding or browsing agent is about to execute a tool call and you need an allow, ask, or deny decision plus the specific risks, in one fast request.',
|
|
5169
|
+
related: [
|
|
5170
|
+
{
|
|
5171
|
+
id: 'action-scope',
|
|
5172
|
+
reason: 'Use action-scope when you only need to know whether an action stays within the request.',
|
|
5173
|
+
},
|
|
5174
|
+
{
|
|
5175
|
+
id: 'action-reversibility',
|
|
5176
|
+
reason: 'Use action-reversibility for a five-level grade of how reversible one action is.',
|
|
5177
|
+
},
|
|
5178
|
+
{
|
|
5179
|
+
id: 'action-effects',
|
|
5180
|
+
reason: 'Use action-effects to label what kinds of side effects an action has.',
|
|
5181
|
+
},
|
|
5182
|
+
{
|
|
5183
|
+
id: 'injection-signal',
|
|
5184
|
+
reason: 'Use injection-signal to screen text for embedded instructions before an agent reads it.',
|
|
5185
|
+
},
|
|
5186
|
+
],
|
|
5187
|
+
},
|
|
4984
5188
|
{
|
|
4985
5189
|
id: 'tool-compare',
|
|
4986
5190
|
title: 'Compare two tools for a task',
|
|
4987
5191
|
description: 'Which of firstTool and secondTool, as described by their stated capabilities, better fits task?',
|
|
4988
5192
|
category: 'workflow',
|
|
4989
|
-
tags: ['agent', 'tool-use', 'comparison', 'pairwise', 'planning', 'workflow'],
|
|
5193
|
+
tags: ['agent', 'tool-use', 'comparison', 'pairwise', 'planning', 'workflow', 'harness'],
|
|
4990
5194
|
limitations: [
|
|
4991
5195
|
'Compares the capability descriptions as written. It does not invoke either tool, check credentials, or know about tools not supplied.',
|
|
4992
5196
|
'A tool can fit the task better and still be unavailable, rate-limited, or forbidden; availability and permission belong in application code.',
|
|
@@ -5008,7 +5212,7 @@ export const recipeMetadata = [
|
|
|
5008
5212
|
title: 'Check a tool fit',
|
|
5009
5213
|
description: 'Can the capabilities explicitly described in tool perform task?',
|
|
5010
5214
|
category: 'workflow',
|
|
5011
|
-
tags: ['workflow', 'tool', 'fit'],
|
|
5215
|
+
tags: ['workflow', 'tool', 'fit', 'harness'],
|
|
5012
5216
|
limitations: [
|
|
5013
5217
|
'Assesses a supplied capability description. It does not discover tools, validate credentials, or grant permission.',
|
|
5014
5218
|
],
|
|
@@ -5164,6 +5368,28 @@ export const recipeMetadata = [
|
|
|
5164
5368
|
},
|
|
5165
5369
|
],
|
|
5166
5370
|
},
|
|
5371
|
+
{
|
|
5372
|
+
id: 'wake-gate',
|
|
5373
|
+
title: 'Decide whether an event should wake a waiting agent',
|
|
5374
|
+
description: 'Should event wake an agent that is paused until waitingFor happens: wake now, keep waiting, or ignore it as unrelated?',
|
|
5375
|
+
category: 'workflow',
|
|
5376
|
+
tags: ['agent', 'wake', 'resume', 'event', 'pause', 'scheduler', 'long-running', 'harness'],
|
|
5377
|
+
limitations: [
|
|
5378
|
+
"Judges only the supplied event against the stated wait condition. It does not know about earlier events or the agent's full history unless context supplies them.",
|
|
5379
|
+
'A wake verdict means the condition appears met or materially changed; the resumed agent still has to verify the actual state.',
|
|
5380
|
+
],
|
|
5381
|
+
useWhen: 'A paused or sleeping agent receives a timer tick, webhook, message, or file change and you must decide whether to resume its model loop.',
|
|
5382
|
+
related: [
|
|
5383
|
+
{
|
|
5384
|
+
id: 'goal-drift',
|
|
5385
|
+
reason: "Use goal-drift to check whether a resumed agent's next step still serves its goal.",
|
|
5386
|
+
},
|
|
5387
|
+
{
|
|
5388
|
+
id: 'progress-stall',
|
|
5389
|
+
reason: 'Use progress-stall to detect an agent that keeps waking without making progress.',
|
|
5390
|
+
},
|
|
5391
|
+
],
|
|
5392
|
+
},
|
|
5167
5393
|
{
|
|
5168
5394
|
id: 'workaround-fit',
|
|
5169
5395
|
title: 'Check workaround fit',
|