@atollhq/skill-claude 0.4.26 → 0.4.28
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/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -38,6 +38,18 @@ Read only the references required for the current task:
|
|
|
38
38
|
- Request and response fields, enums, and validation:
|
|
39
39
|
[api-fields.md](references/api-fields.md)
|
|
40
40
|
|
|
41
|
+
For automation rule V1 actions (including create issue), explicit project or
|
|
42
|
+
organization scope, CI create-only rules, event conditions, validation, safe
|
|
43
|
+
disabling, repair, and example-only CI dry runs, read [Automation Rule Fields](references/api-fields.md#automation-rule-fields).
|
|
44
|
+
Use `atoll automation` for rule management, previews, and run history; see
|
|
45
|
+
[CLI operations](references/cli-operations.md#automation-rules).
|
|
46
|
+
Rule creates require an explicit `project_id`: use a project UUID for project
|
|
47
|
+
scope or `null` for organization scope. Partial updates preserve the saved
|
|
48
|
+
scope when `project_id` is omitted; include it only when intentionally changing
|
|
49
|
+
scope. An invalid rule executes no actions. Repair an invalid rule with
|
|
50
|
+
separate `disable`, `update` while it is disabled, `test`, and `enable`
|
|
51
|
+
operations. Enable only after the latest saved revision passes the dry run.
|
|
52
|
+
|
|
41
53
|
Do not load every reference by default. Start with this entrypoint and load a
|
|
42
54
|
topic reference only when the requested operation needs it.
|
|
43
55
|
|
|
@@ -729,7 +729,24 @@ receive projectless work. An inaccessible explicit `projectId` is concealed as
|
|
|
729
729
|
| GET | `/api/orgs/{id}/automation-rules/{ruleId}/activity` | Rule execution history (owner/admin; latest 100 runs) |
|
|
730
730
|
| POST | `/api/orgs/{id}/automation-rules/{ruleId}/test` | Dry-run test |
|
|
731
731
|
|
|
732
|
-
|
|
732
|
+
V1 definitions validate on create, merged partial updates, dry runs, and runtime.
|
|
733
|
+
On create, `project_id` must be explicit: use a project UUID for project scope
|
|
734
|
+
or `null` for organization scope. Partial updates preserve the saved scope
|
|
735
|
+
when `project_id` is omitted; include it only when intentionally changing
|
|
736
|
+
scope. A concurrent edit during validation returns `409`; reload before
|
|
737
|
+
retrying. An enabled rule must be
|
|
738
|
+
disabled with a separate exact `{ "enabled": false }` update before changing
|
|
739
|
+
scope or repairing an invalid definition. A disabled invalid rule can be
|
|
740
|
+
repaired while remaining disabled; run `test` on that saved revision before a
|
|
741
|
+
separate `enable` update.
|
|
742
|
+
GET/list preserve invalid rows with optional `validation: { valid, issues }`
|
|
743
|
+
(`issues` contain `path`, `code`, and `message`). Owner/admin callers can disable
|
|
744
|
+
an invalid rule with only `{ "enabled": false }`. Change-condition dry runs
|
|
745
|
+
require a canonical `event`; snapshots cannot establish transitions. See
|
|
746
|
+
[Automation Rule Fields](api-fields.md#automation-rule-fields) for the grammar
|
|
747
|
+
and legacy normalization. No public MCP tool is added.
|
|
748
|
+
|
|
749
|
+
Trigger events: `issue.created`, `issue.status_changed`, `issue.assigned`, `issue.priority_changed`, `pr.merged`, `ci.run.completed`.
|
|
733
750
|
Create and update requests reject unsupported action types or malformed action
|
|
734
751
|
values before persistence. Activity returns safe durable run/action history;
|
|
735
752
|
non-matches, dry runs, and rules without executable actions create no history,
|
|
@@ -938,3 +955,5 @@ not a hosted API or MCP surface. Its browser projection excludes credentials,
|
|
|
938
955
|
raw configuration, prompts, and model output. Local bindings use `repo_ref` but
|
|
939
956
|
do not grant project/repository access. Intake is read-only locally; hosted
|
|
940
957
|
Workspace Settings → Runners owns pause/resume. See the CLI local-runner guide.
|
|
958
|
+
|
|
959
|
+
Automation rule create/update accepts the core action set including one `create_issue` per rule. See [Automation Rule Fields](api-fields.md#automation-rule-fields) for required fields, original-issue targets, replay results, and external-event limits.
|
|
@@ -483,22 +483,101 @@ multiple exact-name milestones already exist, upsert returns a structured
|
|
|
483
483
|
|
|
484
484
|
```json
|
|
485
485
|
{
|
|
486
|
+
"schema_version": 1,
|
|
486
487
|
"name": "Auto-assign urgent bugs",
|
|
487
488
|
"trigger_event": "issue.created",
|
|
488
|
-
"conditions": [{ "field": "priority", "operator": "eq", "value": 0 }],
|
|
489
|
+
"conditions": [{ "kind": "field", "field": "priority", "operator": "eq", "value": 0 }],
|
|
489
490
|
"actions": [{ "type": "set_assignee", "value": "member-uuid" }],
|
|
490
491
|
"enabled": true,
|
|
491
492
|
"project_id": "project-uuid"
|
|
492
493
|
}
|
|
493
494
|
```
|
|
494
495
|
|
|
495
|
-
Supported action values are: `set_status` (
|
|
496
|
-
|
|
497
|
-
`
|
|
498
|
-
`
|
|
496
|
+
Supported action values are: `set_status` (canonical project status key),
|
|
497
|
+
`set_assignee` (replace the full assignee set with one member UUID, or `null` to
|
|
498
|
+
clear it), `add_assignee` (add a member UUID without removing others), `unassign`
|
|
499
|
+
(omit `value`), `set_priority` (integer `0` through `3`), `add_label` and
|
|
500
|
+
`remove_label` (label UUID), `post_comment` (non-empty text, at most 10,000
|
|
501
|
+
characters), and legacy `close_issue` (omit `value`, targets the valid `done` key).
|
|
502
|
+
Already satisfied assignments, priorities, statuses, and label relationships
|
|
503
|
+
succeed without duplicate mutation events. Invalid references still fail.
|
|
499
504
|
Unsupported action types or malformed values return `400` and are not saved.
|
|
500
505
|
|
|
501
|
-
|
|
506
|
+
`create_issue` requires `project_id` (UUID), `status` (that project's column key),
|
|
507
|
+
and `title` (1–500 characters). Optional fields are `description` (up to 10,000
|
|
508
|
+
characters), `priority` (0–3), `assignee_ids` (member UUID array), and `label_ids`
|
|
509
|
+
(label UUID array). The member and label arrays accept at most 100 entries each.
|
|
510
|
+
At most one create action is allowed per rule. Configure the new issue inside
|
|
511
|
+
this action; later actions still target the original issue. Target-project access,
|
|
512
|
+
references, limits, and normal creation rules remain authoritative.
|
|
513
|
+
|
|
514
|
+
Creation content supports fixed text and approved `{{repository}}`, `{{workflow}}`,
|
|
515
|
+
`{{conclusion}}`, and `{{run_url}}` fields only. Missing event fields and invalid or
|
|
516
|
+
oversized rendered content fail before creation. Current issue triggers do not
|
|
517
|
+
provide those external fields; use fixed text for issue triggers. The
|
|
518
|
+
`ci.run.completed` trigger supplies them from a signed GitHub completion event.
|
|
519
|
+
CI rules require organization scope (`project_id: null`) and support only
|
|
520
|
+
`create_issue`. CI rules accept only event conditions. Issue triggers reject event conditions.
|
|
521
|
+
Event conditions use `kind: "event"`, `eq` or `neq`, and fields
|
|
522
|
+
`conclusion`, `repository`, `workflow`, `branch` (strings), `has_pr`, or
|
|
523
|
+
`has_linked_issue` (booleans). Use conclusion `failure` and
|
|
524
|
+
`has_linked_issue: false` to create an issue only for an unlinked failed run.
|
|
525
|
+
The first receipt freezes link state; duplicate repository/run/attempt deliveries
|
|
526
|
+
reuse it. A new run attempt is a distinct event. CI dry runs use marked example
|
|
527
|
+
values and never execute actions.
|
|
528
|
+
|
|
529
|
+
A durable action result records `created_issue_id` in the same transaction as
|
|
530
|
+
canonical creation. Repeated execution of that action cannot create another issue.
|
|
531
|
+
If a process stops after creation but before effects finish, the created ID remains
|
|
532
|
+
visible and the interrupted action fails closed; this does not prove all effects
|
|
533
|
+
completed. Deleting the created issue does not permit automatic recreation.
|
|
534
|
+
Dry runs create no issue and fail clearly when required content fields are missing.
|
|
535
|
+
|
|
536
|
+
**CI dry-run test:** Send `{}` with no event or issue overrides. The result has
|
|
537
|
+
`preview_source: "example"`, fixed `test_ci` values, and `test_issue: null`.
|
|
538
|
+
Custom repository or branch conditions can fail to match this example; a preview
|
|
539
|
+
does not verify a live run.
|
|
540
|
+
|
|
541
|
+
**Issue dry-run test**: Send `{ "issue_id": "uuid" }` or `{ "issue": { "status": "todo", "priority": 2 } }`. Returns `{ matched, actions_that_would_run }`.
|
|
542
|
+
|
|
543
|
+
**Rule definition V1:** `schema_version` defaults to `1`. Conditions are ANDed;
|
|
544
|
+
actions run in array order. A field condition uses `kind: "field"`, a field
|
|
545
|
+
(`status`, `priority`, or `assignee_id`), `eq` or `neq`, and a typed `value`.
|
|
546
|
+
A change condition uses `kind: "change"` with `changed` (omit `value`),
|
|
547
|
+
`changed_from`, or `changed_to` (require a typed `value`). Change conditions
|
|
548
|
+
require an issue change trigger; `issue.created` and `pr.merged` reject them.
|
|
549
|
+
Priority values are integers `0`–`3`; status values are lowercase workflow keys;
|
|
550
|
+
assignee values are organization member UUIDs or `null`.
|
|
551
|
+
|
|
552
|
+
Create and partial `PUT` requests reject unknown keys, unsupported versions,
|
|
553
|
+
malformed conditions/actions, and invalid references with `400` and
|
|
554
|
+
`issues: [{ path, code, message }]`. A partial update is merged with the stored
|
|
555
|
+
definition and the complete result is validated. If another edit changes the rule
|
|
556
|
+
during validation, `PUT` returns `409`; reload the rule before retrying. An enabled
|
|
557
|
+
rule must be disabled by a separate exact `{ "enabled": false }` request before
|
|
558
|
+
changing `project_id`; combining disable with a scope change is rejected. An
|
|
559
|
+
enabled invalid rule must also be disabled separately before repair. A disabled
|
|
560
|
+
invalid rule accepts a valid repair only while remaining disabled; repair and
|
|
561
|
+
enable must be separate. Project-scoped status values
|
|
562
|
+
must exist in that workflow; project, member, and label references must belong
|
|
563
|
+
to the organization. A request containing only `{ "enabled": false }` can
|
|
564
|
+
disable an invalid rule without changing its definition; owner/admin access
|
|
565
|
+
is still required. Enabling requires a valid definition.
|
|
566
|
+
|
|
567
|
+
GET/list rules can include `validation: { valid, issues: [{ path, code, message }] }`.
|
|
568
|
+
Invalid saved rows remain readable. Runtime validation rejects the whole invalid
|
|
569
|
+
rule before any action; valid actions are not salvaged from a malformed rule.
|
|
570
|
+
Legacy missing `schema_version` and condition `kind` normalize to `1` and `field`;
|
|
571
|
+
priority strings `"0"`–`"3"` normalize to integers. Stored legacy `close_issue`
|
|
572
|
+
with `value: null` normalizes to no value, and stored empty `set_assignee` values
|
|
573
|
+
normalize to `null`. New writes must omit `close_issue.value`. Prefer `unassign` to clear all
|
|
574
|
+
assignees; legacy `set_assignee` with `null` remains supported.
|
|
575
|
+
|
|
576
|
+
**Change-condition dry runs:** Send `{ "event": <canonical IssueDomainEventV1> }`
|
|
577
|
+
to the existing `/test` endpoint. The event must match the organization and rule
|
|
578
|
+
project scope. Its derived triggers and before/after change map determine the
|
|
579
|
+
result. An issue snapshot alone returns `400` for a change-aware rule. Dry runs
|
|
580
|
+
perform no actions and create no run history.
|
|
502
581
|
|
|
503
582
|
**Automation run history**: `GET /api/orgs/{id}/automation-rules/{ruleId}/activity`
|
|
504
583
|
returns `{ runs }` to owner/admin members, newest first and limited to the
|
|
@@ -919,7 +998,7 @@ metadata are never returned by the public API.
|
|
|
919
998
|
| Status update | `status` | `on_track`, `at_risk`, `off_track` |
|
|
920
999
|
| Member | `role` | `owner`, `admin`, `member`, `guest` |
|
|
921
1000
|
| Project member | `accessLevel` | `view`, `edit`, `admin` |
|
|
922
|
-
| Automation | `trigger_event` | `issue.created`, `issue.status_changed`, `issue.assigned`, `issue.priority_changed` |
|
|
1001
|
+
| Automation | `trigger_event` | `issue.created`, `issue.status_changed`, `issue.assigned`, `issue.priority_changed`, `pr.merged`, `ci.run.completed` |
|
|
923
1002
|
| Heartbeat signal | `type` | `kpi_off_pace`, `kpi_stale`, `issue_stale`, `issue_blocked`, `milestone_overdue`, `initiative_stalled`, `initiative_target_due_soon`, `initiative_target_overdue`, `initiative_target_blocked`, `webhook_failing` |
|
|
924
1003
|
| Heartbeat signal | `severity` | `info`, `warning`, `critical` |
|
|
925
1004
|
| Custom view | `display_mode` | `board`, `list` |
|
|
@@ -193,3 +193,29 @@ CLI JSON conventions:
|
|
|
193
193
|
### Bulk create tasks from a plan
|
|
194
194
|
|
|
195
195
|
`POST /api/orgs/{id}/issues/bulk` with `{ "issues": [{...}, ...] }` (max 50).
|
|
196
|
+
|
|
197
|
+
## Automation rules
|
|
198
|
+
|
|
199
|
+
Use `atoll automation list`, `get <rule-uuid>`, `create --file rule.json`,
|
|
200
|
+
`update <rule-uuid> --file patch.json`, `test <rule-uuid> [--file preview.json]`,
|
|
201
|
+
`runs <rule-uuid> --limit 20`, `enable`, `disable`, and `delete --force`.
|
|
202
|
+
Use `delete <rule-uuid> --dry-run` to preview deletion. Use `--json`
|
|
203
|
+
for machine-readable results and `--file -` for standard input. Create defaults
|
|
204
|
+
to disabled when `enabled` is omitted, but the JSON must include an explicit
|
|
205
|
+
`project_id` UUID or `null` for Organization-wide scope; update preserves omitted
|
|
206
|
+
fields.
|
|
207
|
+
List uses the selected organization and applies a project filter only with
|
|
208
|
+
explicit `--project`; it does not inherit the default project.
|
|
209
|
+
|
|
210
|
+
Rule files use the canonical Automation Rule Fields contract. CI rules require
|
|
211
|
+
`project_id: null`, only `create_issue` actions, and event conditions. Use
|
|
212
|
+
conclusion `failure` and `has_linked_issue: false` for unlinked CI failures.
|
|
213
|
+
The action chooses its target project/status and accepts approved
|
|
214
|
+
`{{repository}}`, `{{workflow}}`, `{{conclusion}}`, `{{run_url}}` substitutions.
|
|
215
|
+
CI `test` sends `{}` by default, uses marked fixed examples, rejects overrides,
|
|
216
|
+
and executes no actions. Inspect the preview before explicitly enabling.
|
|
217
|
+
Rule writes, tests, and run history require owner/admin access; CLI does not bypass it.
|
|
218
|
+
`runs` preserves created issue IDs and interrupted-action evidence. For an invalid
|
|
219
|
+
rule, use separate `disable`, `update` while disabled, `test`, and `enable`
|
|
220
|
+
operations. Human `get` output includes invalid state and validation paths;
|
|
221
|
+
`--json` preserves the API response.
|