@keystrokehq/skills 0.0.3 → 0.0.6
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/CHANGELOG.md +39 -0
- package/README.md +24 -15
- package/package.json +3 -10
- package/{AGENTS-blurb.md → src/_AGENTS.md} +1 -1
- package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/SKILL.md +1 -1
- package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/source-map.md +1 -1
- package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/testing.md +1 -1
- package/{keystroke-cli-workspace → src/keystroke-cli-workspace}/SKILL.md +1 -1
- package/{keystroke-cli-workspace → src/keystroke-cli-workspace}/references/command-map.md +3 -3
- package/{keystroke-cli-workspace → src/keystroke-cli-workspace}/references/project-lifecycle.md +1 -1
- package/{keystroke-credential-binding → src/keystroke-credential-binding}/SKILL.md +4 -3
- package/{keystroke-credential-binding → src/keystroke-credential-binding}/references/patterns.md +14 -15
- package/{keystroke-credential-binding → src/keystroke-credential-binding}/references/source-map.md +2 -1
- package/{keystroke-task-authoring → src/keystroke-task-authoring}/SKILL.md +4 -6
- package/{keystroke-task-authoring → src/keystroke-task-authoring}/references/patterns.md +7 -7
- package/{keystroke-task-authoring → src/keystroke-task-authoring}/references/source-map.md +4 -5
- package/{keystroke-trigger-authoring → src/keystroke-trigger-authoring}/SKILL.md +26 -20
- package/{keystroke-trigger-authoring → src/keystroke-trigger-authoring}/references/patterns.md +62 -66
- package/src/keystroke-trigger-authoring/references/source-map.md +166 -0
- package/{keystroke-trigger-authoring → src/keystroke-trigger-authoring}/references/testing.md +30 -27
- package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/SKILL.md +4 -3
- package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/patterns.md +6 -6
- package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/prebuilt-integrations.md +1 -1
- package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/runtime-helpers.md +2 -2
- package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/source-map.md +1 -1
- package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/testing.md +2 -2
- package/keystroke-agent-authoring/evals/evals.json +0 -29
- package/keystroke-cli-workspace/evals/evals.json +0 -23
- package/keystroke-credential-binding/evals/evals.json +0 -29
- package/keystroke-data-toolkit/evals/evals.json +0 -23
- package/keystroke-task-authoring/evals/evals.json +0 -23
- package/keystroke-trigger-authoring/evals/evals.json +0 -29
- package/keystroke-trigger-authoring/references/source-map.md +0 -128
- package/keystroke-workflow-as-tool-debugging/evals/evals.json +0 -23
- package/keystroke-workflow-authoring/evals/evals.json +0 -29
- /package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/messaging-gateways.md +0 -0
- /package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/patterns.md +0 -0
- /package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/prebuilt-integrations.md +0 -0
- /package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/sandbox-and-mcp.md +0 -0
- /package/{keystroke-cli-workspace → src/keystroke-cli-workspace}/references/credentials-and-connect.md +0 -0
- /package/{keystroke-credential-binding → src/keystroke-credential-binding}/references/cli.md +0 -0
- /package/{keystroke-data-toolkit → src/keystroke-data-toolkit}/SKILL.md +0 -0
- /package/{keystroke-data-toolkit → src/keystroke-data-toolkit}/references/usage.md +0 -0
- /package/{keystroke-workflow-as-tool-debugging → src/keystroke-workflow-as-tool-debugging}/SKILL.md +0 -0
- /package/{keystroke-workflow-as-tool-debugging → src/keystroke-workflow-as-tool-debugging}/references/playbook.md +0 -0
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "keystroke-cli-workspace",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "I need to deploy a Keystroke task. What command should I use, and how should I inspect the available flags before running it?",
|
|
7
|
-
"expected_output": "Uses the CLI skill, chooses `keystroke deploy --target <task.task.ts>`, and tells the agent to inspect `keystroke deploy --help` first.",
|
|
8
|
-
"files": []
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": 2,
|
|
12
|
-
"prompt": "How do I set up a new Keystroke project and make the Keystroke-authored skills available in Cursor?",
|
|
13
|
-
"expected_output": "Uses `keystroke init`, explains `keystroke skills sync`, and tells the agent to inspect command help first.",
|
|
14
|
-
"files": []
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": 3,
|
|
18
|
-
"prompt": "I need to figure out which CLI options exist for uploading credentials. What should I do before running the upload command?",
|
|
19
|
-
"expected_output": "Explicitly uses `keystroke credentials upload --help` before describing the upload flow.",
|
|
20
|
-
"files": []
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "keystroke-credential-binding",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "I need to add a credential set for a new API integration in Keystroke. Can you show me how to define the CredentialSet and how a step would read it safely?",
|
|
7
|
-
"expected_output": "Explains CredentialSet authoring, typed schemas, and step context access through ctx.credentials.",
|
|
8
|
-
"files": []
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": 2,
|
|
12
|
-
"prompt": "Before I deploy these workflows, how do I figure out which credentials are required and upload them from env vars with the Keystroke CLI?",
|
|
13
|
-
"expected_output": "Uses the tested credential requirements and upload flows, including the KEYSTROKE_<KEY> convention.",
|
|
14
|
-
"files": []
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": 3,
|
|
18
|
-
"prompt": "Does the same credential model work for steps, tools, agents, and triggers, or are there important differences I need to know?",
|
|
19
|
-
"expected_output": "Explains the shared CredentialSet model and the differences in where credentials are attached and consumed across primitives.",
|
|
20
|
-
"files": []
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"id": 4,
|
|
24
|
-
"prompt": "How do I upload official GitHub credentials with the current Keystroke CLI? Please use the real command surface, not an outdated one.",
|
|
25
|
-
"expected_output": "Uses the current credentials upload syntax, including --integration and the KEYSTROKE_<KEY> convention, and avoids stale flags such as --from-workflows or --no-verify.",
|
|
26
|
-
"files": []
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "keystroke-data-toolkit",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "My workflow tool can return a few megabytes of audit rows. How should I configure the workflow and how should the agent inspect the result?",
|
|
7
|
-
"expected_output": "Recommends largeResultMode: 'ref', explains the ref envelope, and uses describe_ref/read_ref/slice_ref with bounded ranges.",
|
|
8
|
-
"files": []
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": 2,
|
|
12
|
-
"prompt": "The agent called read_ref and got truncated: true. What should it do next?",
|
|
13
|
-
"expected_output": "Explains that truncation is signaled and the agent should request a narrower range or targeted slice rather than assuming it saw all data.",
|
|
14
|
-
"files": []
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": 3,
|
|
18
|
-
"prompt": "Can we add DuckDB reducers for this large CSV workflow output?",
|
|
19
|
-
"expected_output": "States that reducers and DuckDB are deferred in the active product and recommends bounded ref reads or samples instead.",
|
|
20
|
-
"files": []
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "keystroke-task-authoring",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "I want a Keystroke task that runs an agent every time a webhook fires and includes the webhook payload in the prompt. How should I author that?",
|
|
7
|
-
"expected_output": "Explains Task authoring, inline triggers, prompt templating with trigger context, and keeps workflow attachments out of the task path.",
|
|
8
|
-
"files": []
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": 2,
|
|
12
|
-
"prompt": "Should this be a workflow or a task? The job is just: cron fires, agent writes a summary, then stop.",
|
|
13
|
-
"expected_output": "Chooses Task, explains why the task model fits better than workflow orchestration, and mentions deploy --target for focused task deploys.",
|
|
14
|
-
"files": []
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": 3,
|
|
18
|
-
"prompt": "How do I limit a Keystroke task to run once and expire after a week?",
|
|
19
|
-
"expected_output": "Explains task lifecycle fields such as maxExecutions and expiresAfter with authored code examples.",
|
|
20
|
-
"files": []
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "keystroke-trigger-authoring",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "How do I create a Keystroke webhook trigger for a Stripe event and map the incoming payload into my workflow input?",
|
|
7
|
-
"expected_output": "Explains webhookTrigger() factory setup, required and optional fields, and the bound trigger transform pattern via Workflow({ triggers: [trigger({ transform })] }).",
|
|
8
|
-
"files": []
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": 2,
|
|
12
|
-
"prompt": "I need a polling trigger that checks an external API every 15 minutes and only launches the workflow for new items. What should that look like?",
|
|
13
|
-
"expected_output": "Explains pollingTrigger() factory setup, schedule, poll/response, optional filter and idempotency behavior, and listing the trigger in Workflow({ triggers: [...] }) with optional transform binding.",
|
|
14
|
-
"files": []
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": 3,
|
|
18
|
-
"prompt": "What is the right way to test a Keystroke trigger? I want to validate webhook verify/filter logic and the input transform into the workflow.",
|
|
19
|
-
"expected_output": "Points to trigger-specific callback tests (verify, filter, payload.parse) plus bound trigger transform testing via bound.transform?.(payload).",
|
|
20
|
-
"files": []
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"id": 4,
|
|
24
|
-
"prompt": "I want a cron-driven agent job. Do I attach a trigger to the agent, attach it to a task, or something else?",
|
|
25
|
-
"expected_output": "Explains that workflow triggers are listed in Workflow({ triggers: [...] }), task triggers are listed inline on Task.triggers, and messaging gateways are not triggers.",
|
|
26
|
-
"files": []
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
# Trigger Feature Map
|
|
2
|
-
|
|
3
|
-
Use only the public imports a user repo can rely on:
|
|
4
|
-
|
|
5
|
-
```ts
|
|
6
|
-
import {
|
|
7
|
-
cronTrigger,
|
|
8
|
-
pollingTrigger,
|
|
9
|
-
providerTrigger,
|
|
10
|
-
webhookTrigger,
|
|
11
|
-
} from '@keystrokehq/core';
|
|
12
|
-
import type {
|
|
13
|
-
BoundTrigger,
|
|
14
|
-
CallableTrigger,
|
|
15
|
-
ExecutionIdentityPolicy,
|
|
16
|
-
TriggerBindOptions,
|
|
17
|
-
TriggerEntry,
|
|
18
|
-
TriggerInstance,
|
|
19
|
-
} from '@keystrokehq/core/types';
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
When a trigger explanation also needs to talk about workflow steps or agent tools, use the terminology from the other Keystroke skills:
|
|
23
|
-
|
|
24
|
-
- `Step`, `Tool`, and `Operation` are aliases for the same `Operation` class
|
|
25
|
-
- use the workflow skill for workflow-side operation guidance
|
|
26
|
-
- use the agent skill for agent-side tool guidance
|
|
27
|
-
|
|
28
|
-
## Common trigger fields
|
|
29
|
-
|
|
30
|
-
- `name`
|
|
31
|
-
- `description`
|
|
32
|
-
- `enabled`
|
|
33
|
-
- `credentialSets`
|
|
34
|
-
- `executionIdentityPolicy`
|
|
35
|
-
- `modeDefault`
|
|
36
|
-
|
|
37
|
-
## Common trigger methods
|
|
38
|
-
|
|
39
|
-
- `describe()`
|
|
40
|
-
- `toManifest()`
|
|
41
|
-
|
|
42
|
-
## `cronTrigger` fields
|
|
43
|
-
|
|
44
|
-
- `input`
|
|
45
|
-
- `payload`
|
|
46
|
-
- `schedule`
|
|
47
|
-
- `timezone`
|
|
48
|
-
|
|
49
|
-
## `cronTrigger` instance properties
|
|
50
|
-
|
|
51
|
-
- `.name`
|
|
52
|
-
- `.payload`
|
|
53
|
-
- `.schedule`
|
|
54
|
-
- `.timezone`
|
|
55
|
-
- `.toManifest()`
|
|
56
|
-
- `.describe()`
|
|
57
|
-
|
|
58
|
-
## `webhookTrigger` fields
|
|
59
|
-
|
|
60
|
-
- `path`
|
|
61
|
-
- `method`
|
|
62
|
-
- `payload`
|
|
63
|
-
- `verify`
|
|
64
|
-
- `filter`
|
|
65
|
-
- `idempotencyKey`
|
|
66
|
-
- `response`
|
|
67
|
-
|
|
68
|
-
## `webhookTrigger` instance methods
|
|
69
|
-
|
|
70
|
-
- `.payload.parse(data)` — validate parsed body against the payload schema
|
|
71
|
-
- `.verify?(request, ctx)` — raw request + credentials for authenticity checks
|
|
72
|
-
- `.filter?(payload, request?)` — typed parsed body, optional raw request (no credentials)
|
|
73
|
-
- `.idempotencyKey?(payload, request?)` — typed parsed body, optional raw request (no credentials)
|
|
74
|
-
|
|
75
|
-
## `pollingTrigger` fields
|
|
76
|
-
|
|
77
|
-
- `schedule`
|
|
78
|
-
- `response`
|
|
79
|
-
- `poll`
|
|
80
|
-
- `filter`
|
|
81
|
-
- `idempotencyKey`
|
|
82
|
-
|
|
83
|
-
## `pollingTrigger` instance methods
|
|
84
|
-
|
|
85
|
-
- `.poll(ctx)`
|
|
86
|
-
- `.parseResponse(response)`
|
|
87
|
-
- `.filter?(payload)` — typed parsed payload (no credentials)
|
|
88
|
-
- `.idempotencyKey?(payload)` — typed parsed payload (no credentials)
|
|
89
|
-
|
|
90
|
-
## `providerTrigger` fields
|
|
91
|
-
|
|
92
|
-
- `provider`
|
|
93
|
-
- `eventTypes`
|
|
94
|
-
- `appRef`
|
|
95
|
-
- `filter`
|
|
96
|
-
- `idempotencyKey`
|
|
97
|
-
|
|
98
|
-
## Calling a trigger (creating a bound trigger)
|
|
99
|
-
|
|
100
|
-
All factory-created triggers are callable. Calling one returns a `BoundTrigger`:
|
|
101
|
-
|
|
102
|
-
- `trigger()` — bare binding (no transform)
|
|
103
|
-
- `trigger({ transform })` — bound with payload-to-input mapping
|
|
104
|
-
- `trigger({ filter })` — bound with additional filter
|
|
105
|
-
- `trigger({ transform, filter })` — bound with both
|
|
106
|
-
|
|
107
|
-
## `BoundTrigger`
|
|
108
|
-
|
|
109
|
-
- `.isBoundTrigger` — always `true`
|
|
110
|
-
- `.trigger` — reference to the underlying trigger instance
|
|
111
|
-
- `.filter?` — composed filter (trigger's filter + binding filter)
|
|
112
|
-
- `.transform?` — payload-to-workflow-input mapping function
|
|
113
|
-
|
|
114
|
-
## Workflow `triggers` array
|
|
115
|
-
|
|
116
|
-
`Workflow({ triggers: [...] })` accepts a `TriggerEntry[]`:
|
|
117
|
-
- a bare `CallableTrigger` (trigger payload passes through as workflow input)
|
|
118
|
-
- a `BoundTrigger` (returned by calling the trigger with options)
|
|
119
|
-
|
|
120
|
-
## Task note
|
|
121
|
-
|
|
122
|
-
- task triggers are declared inline in `Task.triggers`
|
|
123
|
-
- messaging gateways belong to agent authoring, not trigger authoring
|
|
124
|
-
|
|
125
|
-
## Where to read next
|
|
126
|
-
|
|
127
|
-
- `patterns.md` for trigger field examples
|
|
128
|
-
- `testing.md` for trigger callback and bound trigger tests
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "keystroke-workflow-as-tool-debugging",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "A workflow tool with ctx.wait returned pending: true and the agent tried to call it again. What should I inspect and what behavior is expected?",
|
|
7
|
-
"expected_output": "Explains yield receipt behavior, turn ending, idempotency, pending yield state, child workflow run, and agent_continue resume path.",
|
|
8
|
-
"files": []
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": 2,
|
|
12
|
-
"prompt": "My midSessionSnapshot workflow tool is suspended_snapshotted. When the child workflow completes, which worker should resume it?",
|
|
13
|
-
"expected_output": "States that agent_resume handles current snapshots through Path B conversation-log replay and does not claim native Pi process restore.",
|
|
14
|
-
"files": []
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": 3,
|
|
18
|
-
"prompt": "A workflow tool returned a ref and the model wants to query it with a reducer. What should I do?",
|
|
19
|
-
"expected_output": "Recommends describe_ref/read_ref/slice_ref with bounded ranges and states reducers/DuckDB are deferred and unsupported.",
|
|
20
|
-
"files": []
|
|
21
|
-
}
|
|
22
|
-
]
|
|
23
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"skill_name": "keystroke-workflow-authoring",
|
|
3
|
-
"evals": [
|
|
4
|
-
{
|
|
5
|
-
"id": 1,
|
|
6
|
-
"prompt": "I'm building a Keystroke workflow that checks a few upstream APIs, waits 10 minutes between retries, and then posts the result to Slack. Can you show me how to structure the workflow and what should be steps versus workflow orchestration?",
|
|
7
|
-
"expected_output": "Explains workflow planning, step boundaries, replay-safe orchestration, the durable wait path, and where Slack or other external work belongs.",
|
|
8
|
-
"files": []
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"id": 2,
|
|
12
|
-
"prompt": "I have a workflow that uses Math.random() and Date.now() inside Workflow.run to make request ids. Why is that a problem in Keystroke, and how should I rewrite it?",
|
|
13
|
-
"expected_output": "Explains workflow replay safety, why nondeterministic logic should not live in the workflow body, and how to move it into a step or agent boundary.",
|
|
14
|
-
"files": []
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"id": 3,
|
|
18
|
-
"prompt": "How do I test a Keystroke workflow that uses workflowGlobals and a webhook trigger? I want the recommended testing path, not a random custom harness.",
|
|
19
|
-
"expected_output": "Uses core Vitest helpers, covers workflowGlobals, and points to bound trigger transform testing via bound.transform?.(payload, ctx).",
|
|
20
|
-
"files": []
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"id": 4,
|
|
24
|
-
"prompt": "Can my Keystroke workflow run bash to call a Python script, or should I structure this differently?",
|
|
25
|
-
"expected_output": "Explains that workflows are authored as TypeScript orchestration and do not run bash as part of the workflow model, then routes shell-heavy work to an agent sandbox.",
|
|
26
|
-
"files": []
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/sandbox-and-mcp.md
RENAMED
|
File without changes
|
|
File without changes
|
/package/{keystroke-credential-binding → src/keystroke-credential-binding}/references/cli.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/{keystroke-workflow-as-tool-debugging → src/keystroke-workflow-as-tool-debugging}/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|