Executors
An executor performs the actual work for a run. Wakeplane dispatches each run based on target.kind. Three executors ship with Wakeplane v0.2.0-beta.1.
HTTP Executor
Section titled “HTTP Executor”target: kind: http method: GET url: https://api.example.com/healthzThe HTTP executor writes a receipt containing response status and a summary of the response body. Timeout and cancellation are handled through context.
Shell Executor
Section titled “Shell Executor”target: kind: shell command: /usr/local/bin/backup.sh args: - "--compress" - "--destination=/mnt/backups"The shell executor writes stdout, stderr, and exit code receipts. It uses exec.CommandContext, so timeout or cancellation results in SIGKILL.
Workflow Executor
Section titled “Workflow Executor”target: kind: workflow workflow_id: sync.customers input: source: crm dry_run: falseWorkflow handlers must be registered explicitly before the service starts:
service, err := app.NewWithOptions(ctx, cfg, app.WithWorkflowHandler("sync.customers", syncCustomersHandler), app.WithWorkflowHandler("generate.report", generateReportHandler),)Handlers use:
type WorkflowHandler func(ctx context.Context, input map[string]any) (map[string]any, error)Missing handler registrations fail at dispatch time and follow normal retry/dead-letter behavior.
Receipt Access
Section titled “Receipt Access”Receipts for any run are available at:
GET /v1/runs/{id}/receiptsExecutor Comparison
Section titled “Executor Comparison”| Aspect | HTTP | Shell | Workflow |
|---|---|---|---|
| Target | URL + method | Command + args | Registered handler by ID |
| Cancellation | Context -> HTTP abort | Context -> SIGKILL | Context -> ctx.Done() |
| Receipt kind | HTTP response summary | stdout/stderr/exit code | Handler return value |
| Registration | None needed | None needed | Must register explicitly |
Not Shipped Yet
Section titled “Not Shipped Yet”- Per-target credential injection
- Dynamic workflow handler loading
- gRPC executor
- Native TLS or auth-aware executor features