@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.
Files changed (45) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +24 -15
  3. package/package.json +3 -10
  4. package/{AGENTS-blurb.md → src/_AGENTS.md} +1 -1
  5. package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/SKILL.md +1 -1
  6. package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/source-map.md +1 -1
  7. package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/testing.md +1 -1
  8. package/{keystroke-cli-workspace → src/keystroke-cli-workspace}/SKILL.md +1 -1
  9. package/{keystroke-cli-workspace → src/keystroke-cli-workspace}/references/command-map.md +3 -3
  10. package/{keystroke-cli-workspace → src/keystroke-cli-workspace}/references/project-lifecycle.md +1 -1
  11. package/{keystroke-credential-binding → src/keystroke-credential-binding}/SKILL.md +4 -3
  12. package/{keystroke-credential-binding → src/keystroke-credential-binding}/references/patterns.md +14 -15
  13. package/{keystroke-credential-binding → src/keystroke-credential-binding}/references/source-map.md +2 -1
  14. package/{keystroke-task-authoring → src/keystroke-task-authoring}/SKILL.md +4 -6
  15. package/{keystroke-task-authoring → src/keystroke-task-authoring}/references/patterns.md +7 -7
  16. package/{keystroke-task-authoring → src/keystroke-task-authoring}/references/source-map.md +4 -5
  17. package/{keystroke-trigger-authoring → src/keystroke-trigger-authoring}/SKILL.md +26 -20
  18. package/{keystroke-trigger-authoring → src/keystroke-trigger-authoring}/references/patterns.md +62 -66
  19. package/src/keystroke-trigger-authoring/references/source-map.md +166 -0
  20. package/{keystroke-trigger-authoring → src/keystroke-trigger-authoring}/references/testing.md +30 -27
  21. package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/SKILL.md +4 -3
  22. package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/patterns.md +6 -6
  23. package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/prebuilt-integrations.md +1 -1
  24. package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/runtime-helpers.md +2 -2
  25. package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/source-map.md +1 -1
  26. package/{keystroke-workflow-authoring → src/keystroke-workflow-authoring}/references/testing.md +2 -2
  27. package/keystroke-agent-authoring/evals/evals.json +0 -29
  28. package/keystroke-cli-workspace/evals/evals.json +0 -23
  29. package/keystroke-credential-binding/evals/evals.json +0 -29
  30. package/keystroke-data-toolkit/evals/evals.json +0 -23
  31. package/keystroke-task-authoring/evals/evals.json +0 -23
  32. package/keystroke-trigger-authoring/evals/evals.json +0 -29
  33. package/keystroke-trigger-authoring/references/source-map.md +0 -128
  34. package/keystroke-workflow-as-tool-debugging/evals/evals.json +0 -23
  35. package/keystroke-workflow-authoring/evals/evals.json +0 -29
  36. /package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/messaging-gateways.md +0 -0
  37. /package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/patterns.md +0 -0
  38. /package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/prebuilt-integrations.md +0 -0
  39. /package/{keystroke-agent-authoring → src/keystroke-agent-authoring}/references/sandbox-and-mcp.md +0 -0
  40. /package/{keystroke-cli-workspace → src/keystroke-cli-workspace}/references/credentials-and-connect.md +0 -0
  41. /package/{keystroke-credential-binding → src/keystroke-credential-binding}/references/cli.md +0 -0
  42. /package/{keystroke-data-toolkit → src/keystroke-data-toolkit}/SKILL.md +0 -0
  43. /package/{keystroke-data-toolkit → src/keystroke-data-toolkit}/references/usage.md +0 -0
  44. /package/{keystroke-workflow-as-tool-debugging → src/keystroke-workflow-as-tool-debugging}/SKILL.md +0 -0
  45. /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
- }