Knock CLI skill
This skill provides comprehensive guidelines for working with the Knock CLI to manage workflows, templates, and other notification resources.
Overview
The Knock CLI skill includes detailed rule sets covering:
- CLI installation and authentication - How to install and authenticate with the Knock CLI
- Knock directory structure - Understanding the knock directory layout and configuration
- CLI commands reference - Pull, push, and resource management commands
- Workflow templates - Structures, patterns, and best practices for workflows and templates
- Guides and message types - Working with in-app guides for lifecycle messaging and message types as their schema
- Partials - Reusable template building blocks for email design systems
How to use this skill
For initial setup
When setting up a new project with Knock:
Start with installation and authentication (rules/cli-installation-authentication.md)
- Verify the CLI is installed
- Authenticate with a service token or dashboard account
- Initialize the project with
knock init
Understand the directory structure (rules/knock-directory-structure.md)
- Learn the knock.json configuration
- Understand resource organization
For managing resources
When working with Knock resources:
Use the CLI commands reference (rules/cli-commands-reference.md)
- Pull resources from Knock to your local project
- Push changes back to Knock
- Work with specific resource types
Follow workflow and template guidelines (rules/workflow-templates.md)
- Understand template modes and structures
- Avoid common mistakes with file paths and variables
- Follow best practices for workflow modifications
For managing guides and message types
When working with in-app guides (banners, modals, announcements):
Start with guides and message types (rules/guides-and-message-types.md)
- Understand that guides are separate from workflows (lifecycle messaging vs notifications)
- Message types define the schema; guides reference them via
schema_key and schema_variant_key
- Use built-in types (banner, modal, card) when possible; create custom message types when needed
Discover before creating
- Run
knock message-type list to see available message type keys
- Run
knock guide list to see existing guides
- Use exact keys from output when creating new guides
For working with partials
When building reusable email components (callouts, quote blocks, comment cards):
Start with partials (rules/partials.md)
- Understand partial file structure and
partial.json schema
- Define
input_schema for block editor fields (same format as message type variant fields)
- Use
visual_block_enabled: true for partials that appear in the email visual block editor
Create and push
- Run
knock partial new -k <key> -n "Name" -t html --force to scaffold
- Add
input_schema and edit content; validate and push with knock partial push <key>
For modifying workflows and templates
When making changes to workflows or templates:
- Always read before writing - Understand existing structure before modifying
- Use visual blocks for new emails - Always default to visual blocks mode; only use HTML mode if explicitly requested
- Use correct variable namespaces -
data for trigger payload, vars for environment variables
- Verify file path references - Paths are relative to the file containing the reference
- Push after modifying - Local file changes are not synced to Knock until you push. Run
knock workflow push <key> (or the equivalent for other resource types) for changes to take effect.
Rule files reference
rules/cli-installation-authentication.md - Installation and authentication setup
rules/knock-directory-structure.md - Directory structure and configuration
rules/cli-commands-reference.md - CLI commands for resource management
rules/workflow-templates.md - Workflow and template structures and best practices
rules/guides-and-message-types.md - Guides and message types for lifecycle messaging
rules/partials.md - Partials and reusable template building blocks
Quick reference
Common commands
# Initialize a new project (interactive; prompts for the resources directory)
knock init
# Pull all resources from Knock (--force skips confirmation prompts)
knock pull --force
# Pull a specific workflow
knock workflow pull <workflow-key> --force
# Push all resources to Knock (push never prompts)
knock push
# Push a specific workflow
knock workflow push <workflow-key>
# Push a specific email layout
knock layout push <layout-key>
# List channels (discover valid channel_key values before creating workflows)
knock channel list
# Guide and message type commands
knock message-type list # Discover message type keys before creating guides
knock guide list # List existing guides
knock guide push <guide-key> # Push a guide after modifying
knock message-type push <key> # Push a message type after modifying
# Partial commands (email design system building blocks)
knock partial list # List existing partials
knock partial new -k <key> -n "Name" -t html --force # Create a new partial
knock partial pull <key> --force # Pull a partial from Knock
knock partial push <key> # Push a partial after modifying
knock partial validate <key> # Validate a partial locally
# Commit and promote a specific resource only (safe when other resources have pending changes)
knock commit -m "message" --resource-type=workflow --resource-id=<key> --force
knock commit list --resource-type=workflow --resource-id=<key> # get the commit ID
knock commit promote --only=<commit-id> --force
Key concepts
- knockDir: The directory where Knock resources are stored (configured in knock.json)
- Resource types: workflows, layouts, guides, message-types, translations, partials, audiences, schemas
- Guides vs workflows: Guides are for lifecycle messaging (banners, modals); workflows are for notifications
- Template modes: Visual blocks (default for new emails) vs HTML (only when explicitly requested)
- Variable namespaces:
data (trigger payload), vars (environment variables), recipient, actor, tenant
Important patterns
- Use
--force on commands with prompts - Many CLI commands (pull, commit, promote, activate) display interactive confirmation prompts. Always pass --force to skip them in automated/agent contexts.
- Push after every change - Local edits stay local until pushed. No push = no update in Knock.
- File path references use
@ suffix: "content@": "visual_blocks/1.content.md"
- Paths are relative to containing file: Don't double the step directory
- Always use
data. for trigger payload values, not vars.
- Read existing files before modifying to preserve structure
- Discover channel keys before creating workflows - Run
knock channel list to get valid channel_key values
- Discover message type keys before creating guides - Run
knock message-type list to get valid message type keys
- Scope commits and promotes when working on a single resource -
knock commit promote --to=<env> promotes ALL unpromoted commits across all resources. When working on one resource, use --resource-type and --resource-id to commit only that resource, then use knock commit promote --only=<commit-id> to promote only that commit. See the "Promote a specific resource only" workflow below.
Best practices summary
- Pull before editing - Sync latest changes before making modifications
- Push after modifying - Local changes are not persisted to Knock until explicitly pushed
- Read before writing - Understand existing structure to avoid data loss
- Use correct namespaces -
data for dynamic payload, vars for environment constants
- Visual blocks by default - Use visual blocks for new emails; preserve existing mode when editing
- Verify paths - File references are relative to the containing file
- Test changes - Validate workflows after pushing changes
- Scope commits and promotes - Default to
--resource-type/--resource-id on commit and --only on promote when working on a single resource. Only use knock commit promote --to=<env> when you intend to promote all pending changes across every resource.
1---2name: knock-cli3description: Guidelines for working with the Knock CLI to manage workflows, templates, and other notification resources in a Knock project.4---5
6# Knock CLI skill
7
8This skill provides comprehensive guidelines for working with the Knock CLI to manage workflows, templates, and other notification resources.
9
10## Overview
11
12The Knock CLI skill includes detailed rule sets covering:
13
141. **CLI installation and authentication** - How to install and authenticate with the Knock CLI
152. **Knock directory structure** - Understanding the knock directory layout and configuration
163. **CLI commands reference** - Pull, push, and resource management commands
174. **Workflow templates** - Structures, patterns, and best practices for workflows and templates
185. **Guides and message types** - Working with in-app guides for lifecycle messaging and message types as their schema
196. **Partials** - Reusable template building blocks for email design systems
20
21## How to use this skill
22
23### For initial setup
24
25When setting up a new project with Knock:
26
271. **Start with installation and authentication** (`rules/cli-installation-authentication.md`)
28 - Verify the CLI is installed
29 - Authenticate with a service token or dashboard account
30 - Initialize the project with `knock init`
31
322. **Understand the directory structure** (`rules/knock-directory-structure.md`)
33 - Learn the knock.json configuration
34 - Understand resource organization
35
36### For managing resources
37
38When working with Knock resources:
39
401. **Use the CLI commands reference** (`rules/cli-commands-reference.md`)
41 - Pull resources from Knock to your local project
42 - Push changes back to Knock
43 - Work with specific resource types
44
452. **Follow workflow and template guidelines** (`rules/workflow-templates.md`)
46 - Understand template modes and structures
47 - Avoid common mistakes with file paths and variables
48 - Follow best practices for workflow modifications
49
50### For managing guides and message types
51
52When working with in-app guides (banners, modals, announcements):
53
541. **Start with guides and message types** (`rules/guides-and-message-types.md`)
55 - Understand that guides are separate from workflows (lifecycle messaging vs notifications)
56 - Message types define the schema; guides reference them via `schema_key` and `schema_variant_key`
57 - Use built-in types (banner, modal, card) when possible; create custom message types when needed
58
592. **Discover before creating**
60 - Run `knock message-type list` to see available message type keys
61 - Run `knock guide list` to see existing guides
62 - Use exact keys from output when creating new guides
63
64### For working with partials
65
66When building reusable email components (callouts, quote blocks, comment cards):
67
681. **Start with partials** (`rules/partials.md`)
69 - Understand partial file structure and `partial.json` schema
70 - Define `input_schema` for block editor fields (same format as message type variant fields)
71 - Use `visual_block_enabled: true` for partials that appear in the email visual block editor
72
732. **Create and push**
74 - Run `knock partial new -k <key> -n "Name" -t html --force` to scaffold
75 - Add `input_schema` and edit content; validate and push with `knock partial push <key>`
76
77### For modifying workflows and templates
78
79When making changes to workflows or templates:
80
811. **Always read before writing** - Understand existing structure before modifying
822. **Use visual blocks for new emails** - Always default to visual blocks mode; only use HTML mode if explicitly requested
833. **Use correct variable namespaces** - `data` for trigger payload, `vars` for environment variables
844. **Verify file path references** - Paths are relative to the file containing the reference
855. **Push after modifying** - Local file changes are not synced to Knock until you push. Run `knock workflow push <key>` (or the equivalent for other resource types) for changes to take effect.
86
87## Rule files reference
88
89- `rules/cli-installation-authentication.md` - Installation and authentication setup
90- `rules/knock-directory-structure.md` - Directory structure and configuration
91- `rules/cli-commands-reference.md` - CLI commands for resource management
92- `rules/workflow-templates.md` - Workflow and template structures and best practices
93- `rules/guides-and-message-types.md` - Guides and message types for lifecycle messaging
94- `rules/partials.md` - Partials and reusable template building blocks
95
96## Quick reference
97
98### Common commands
99
100```bash
101# Initialize a new project (interactive; prompts for the resources directory)
102knock init
103
104# Pull all resources from Knock (--force skips confirmation prompts)
105knock pull --force
106
107# Pull a specific workflow
108knock workflow pull <workflow-key> --force
109
110# Push all resources to Knock (push never prompts)
111knock push
112
113# Push a specific workflow
114knock workflow push <workflow-key>
115
116# Push a specific email layout
117knock layout push <layout-key>
118
119# List channels (discover valid channel_key values before creating workflows)
120knock channel list
121
122# Guide and message type commands
123knock message-type list # Discover message type keys before creating guides
124knock guide list # List existing guides
125knock guide push <guide-key> # Push a guide after modifying
126knock message-type push <key> # Push a message type after modifying
127
128# Partial commands (email design system building blocks)
129knock partial list # List existing partials
130knock partial new -k <key> -n "Name" -t html --force # Create a new partial
131knock partial pull <key> --force # Pull a partial from Knock
132knock partial push <key> # Push a partial after modifying
133knock partial validate <key> # Validate a partial locally
134
135# Commit and promote a specific resource only (safe when other resources have pending changes)
136knock commit -m "message" --resource-type=workflow --resource-id=<key> --force
137knock commit list --resource-type=workflow --resource-id=<key> # get the commit ID
138knock commit promote --only=<commit-id> --force
139```
140
141### Key concepts
142
143- **knockDir**: The directory where Knock resources are stored (configured in knock.json)
144- **Resource types**: workflows, layouts, guides, message-types, translations, partials, audiences, schemas
145- **Guides vs workflows**: Guides are for lifecycle messaging (banners, modals); workflows are for notifications
146- **Template modes**: Visual blocks (default for new emails) vs HTML (only when explicitly requested)
147- **Variable namespaces**: `data` (trigger payload), `vars` (environment variables), `recipient`, `actor`, `tenant`
148
149### Important patterns
150
1511. **Use `--force` on commands with prompts** - Many CLI commands (pull, commit, promote, activate) display interactive confirmation prompts. Always pass `--force` to skip them in automated/agent contexts.
1522. **Push after every change** - Local edits stay local until pushed. No push = no update in Knock.
1533. **File path references use `@` suffix**: `"content@": "visual_blocks/1.content.md"`
1544. **Paths are relative to containing file**: Don't double the step directory
1555. **Always use `data.` for trigger payload values**, not `vars.`
1566. **Read existing files before modifying** to preserve structure
1577. **Discover channel keys before creating workflows** - Run `knock channel list` to get valid `channel_key` values
1588. **Discover message type keys before creating guides** - Run `knock message-type list` to get valid message type keys
1599. **Scope commits and promotes when working on a single resource** - `knock commit promote --to=<env>` promotes ALL unpromoted commits across all resources. When working on one resource, use `--resource-type` and `--resource-id` to commit only that resource, then use `knock commit promote --only=<commit-id>` to promote only that commit. See the "Promote a specific resource only" workflow below.
160
161## Best practices summary
162
1631. **Pull before editing** - Sync latest changes before making modifications
1642. **Push after modifying** - Local changes are not persisted to Knock until explicitly pushed
1653. **Read before writing** - Understand existing structure to avoid data loss
1664. **Use correct namespaces** - `data` for dynamic payload, `vars` for environment constants
1675. **Visual blocks by default** - Use visual blocks for new emails; preserve existing mode when editing
1686. **Verify paths** - File references are relative to the containing file
1697. **Test changes** - Validate workflows after pushing changes
1708. **Scope commits and promotes** - Default to `--resource-type`/`--resource-id` on commit and `--only` on promote when working on a single resource. Only use `knock commit promote --to=<env>` when you intend to promote all pending changes across every resource.