@atollhq/skill-claude 0.4.37 → 0.4.39
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 +1 -1
- package/skill/SKILL.md +233 -2
- package/skill/references/api-endpoints.md +204 -28
- package/skill/references/api-fields.md +421 -13
- package/skill/references/artifact-workflow.md +37 -0
- package/skill/references/cli-operations.md +32 -2
- package/skill/references/execution-and-attention.md +54 -1
- package/skill/references/integrations-and-api.md +71 -11
- package/skill/references/local-runner.md +40 -2
- package/skill/references/platform-rules.md +3 -2
- package/skill/references/strategy-and-heartbeat.md +9 -0
|
@@ -103,6 +103,19 @@ Mutation metadata is closed: `progress` accepts `preparing`,
|
|
|
103
103
|
`finalizing`; `errorCode` accepts `runner_error`, `sdk_error`, `model_error`,
|
|
104
104
|
`timeout`, `cancelled`, or `unknown`. Free-form runtime details are rejected.
|
|
105
105
|
|
|
106
|
+
For verified workflow resume, set GitHub verification mode to `resume` in
|
|
107
|
+
Workspace Settings. This mode is disabled by default, requires a current Codex
|
|
108
|
+
runner for the delivery agent, and adds `verificationEventId` to a verified
|
|
109
|
+
workflow `attention_resume` claim. The server binds the completed issue lease to the
|
|
110
|
+
repository ID, PR number, exact head SHA, source lease generation, runner
|
|
111
|
+
installation, runner host, and preserved thread.
|
|
112
|
+
Only a matching `verification.completed` item is routed to
|
|
113
|
+
`resume_agent_thread`; uncertain or mismatched identity remains review-only.
|
|
114
|
+
`RUNNER_LEASE_VERIFICATION_BINDING_MISMATCH` is a definite 409 claim
|
|
115
|
+
rejection; the local attempt closes while the notification remains unread for
|
|
116
|
+
the next review pass. There is no new-thread fallback. Terminal replay is
|
|
117
|
+
acknowledgement-only.
|
|
118
|
+
|
|
106
119
|
## Hosted runner fleet control
|
|
107
120
|
|
|
108
121
|
`GET /api/orgs/{id}/runners` is human-session only. It returns one current or
|
|
@@ -242,6 +255,30 @@ Creation endpoints may return `402` when an org reaches its billing plan limit:
|
|
|
242
255
|
|
|
243
256
|
`resource` is one of `humans`, `agents`, `activeProjects`, or `activeIssues`.
|
|
244
257
|
|
|
258
|
+
## Member Directory Fields
|
|
259
|
+
|
|
260
|
+
`GET /api/orgs/{id}/members?shape=envelope` returns the bounded member
|
|
261
|
+
directory. Supplying `q`, `limit`, or `offset` also selects this directory
|
|
262
|
+
mode. It returns a list envelope with exact `total`, `limit`, `offset`,
|
|
263
|
+
`nextOffset`, `truncated`, and `hint` values.
|
|
264
|
+
|
|
265
|
+
Each `items[]` row contains only:
|
|
266
|
+
|
|
267
|
+
| Field | Description |
|
|
268
|
+
|-------|-------------|
|
|
269
|
+
| `id` | Stable organization member UUID. Use this in issue `assignee_id` or `assignee_ids` writes. |
|
|
270
|
+
| `display_name` | Safe display name; missing names use `Unknown member`. |
|
|
271
|
+
| `type` | `human` or `agent`. |
|
|
272
|
+
| `role` | Current organization role. |
|
|
273
|
+
| `avatar_url` | Avatar URL or `null`. |
|
|
274
|
+
|
|
275
|
+
Directory inputs are `projectId`, `type=human|agent`, case-insensitive
|
|
276
|
+
display-name `q`, `limit` (default 25, maximum 100), and `offset` (default 0).
|
|
277
|
+
Project results require caller access and follow existing collaborator
|
|
278
|
+
visibility rules. Unprojected directory results exclude guests. `includeEmail`
|
|
279
|
+
does not add email to this response. A request without `shape`, `q`, `limit`, or
|
|
280
|
+
`offset` keeps the legacy member response for web consumers.
|
|
281
|
+
|
|
245
282
|
## Agent Fields
|
|
246
283
|
|
|
247
284
|
Create org-wide agents with `{ "name": "...", "role": "member", "setupScoped": false }`; org-wide creation is owner/admin-only. Create project-scoped agents with non-empty `projectIds`, for example `{ "name": "...", "projectIds": ["project-uuid"] }`; `projectId` remains accepted as a legacy/default-project alias and is merged with `projectIds`. Project-scoped agents are created as guests, and human members may only scope them to projects they can access. Create personal agents with `{ "name": "...", "personal": true }`; personal agents inherit their human owner's project access and reject explicit `projectId`/`projectIds`. Any create form may include an allowlisted `avatarPreset` ID. Arbitrary URLs are rejected. Existing agent presets are changed with `{ "preset": "codex" }` on the avatar PATCH endpoint.
|
|
@@ -366,6 +403,12 @@ attribution.
|
|
|
366
403
|
|
|
367
404
|
V1 syncs are `GET` only, `https` only, JSON only, exact-host allowlisted, no redirects, no request bodies, no inline query strings, and no secret values. Machine actors can create drafts and validate configs only after the host is allowlisted. Human admins manage allowlists, secrets, dry-runs, publishing, disabling, and snapshot-writing run-now actions in Atoll.
|
|
368
405
|
|
|
406
|
+
Both MCP profiles expose `atoll_create_kpi_http_sync_draft` and
|
|
407
|
+
`atoll_validate_kpi_http_sync_config` for this draft-only workflow. The tools
|
|
408
|
+
reject inline secret values and return safe draft metadata rather than request
|
|
409
|
+
configuration. Public MCP does not expose secret entry, network dry runs,
|
|
410
|
+
publishing, disabling, or snapshot writes.
|
|
411
|
+
|
|
369
412
|
## Initiative Fields
|
|
370
413
|
|
|
371
414
|
```json
|
|
@@ -436,16 +479,42 @@ writes persist canonical resource UUIDs within the initiative's authorized
|
|
|
436
479
|
scope; malformed, concealed, ambiguous, and resolver-failure outcomes are
|
|
437
480
|
`400`, `404`, `409`, and `500` respectively.
|
|
438
481
|
|
|
439
|
-
## Public MCP
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
name
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
482
|
+
## Public MCP typed product fields
|
|
483
|
+
|
|
484
|
+
Public plugin calls use snake_case fields and accept the opaque per-call
|
|
485
|
+
`profile_ref` selector. Project references accept a UUID, exact slug, or exact
|
|
486
|
+
name. Issue references accept UUIDs, bare numbers, `#number`, `ATOLL-number`,
|
|
487
|
+
`TSK-number`, and unambiguous project-derived prefixes. Label references accept
|
|
488
|
+
a UUID or exact label name. Initiative milestone-link creation also accepts an
|
|
489
|
+
exact milestone name; unlink operations use the canonical milestone UUID.
|
|
490
|
+
|
|
491
|
+
Core typed tools include issue archive/unarchive and dependency-chain reads;
|
|
492
|
+
label and subtask list/create/update/delete; strategy audit; organization
|
|
493
|
+
activity; notification list/acknowledgement; project create/delete and board
|
|
494
|
+
column creation; and goal/KPI create/update. `atoll_get_strategy_audit` accepts
|
|
495
|
+
`severity: "critical" | "warning" | "info"`; the returned summary and type
|
|
496
|
+
counts match the filtered findings. `atoll_list_activity` accepts filter
|
|
497
|
+
`by_me` or `mine`, `limit: 1..100`, and non-negative `offset`.
|
|
498
|
+
|
|
499
|
+
Goal update accepts `goal_id` as a UUID or exact goal title. KPI create and
|
|
500
|
+
update accept `goal_id` as a UUID or exact goal title; KPI update accepts
|
|
501
|
+
`kpi_id` as a UUID or exact KPI name. These lookups are exact and scoped to
|
|
502
|
+
the selected organization. Missing names return `reference_not_found`, and
|
|
503
|
+
duplicate exact names return `ambiguous_reference`; neither writes a mutation.
|
|
504
|
+
Archive and unarchive emit the normal `issue.updated` webhook event. The
|
|
505
|
+
project, label, subtask, board-column, goal, and KPI writes listed in the API
|
|
506
|
+
endpoint reference can return `core_write_uncertain` with `retryable: false`
|
|
507
|
+
when transport failure, HTTP 5xx, or invalid success output leaves the outcome
|
|
508
|
+
unclear. Use the error's readback steps to reconcile state before a replay;
|
|
509
|
+
authoritative 4xx responses are preserved.
|
|
510
|
+
|
|
511
|
+
Subtask creation accepts `{ title }`; update accepts `title`, `completed`, or
|
|
512
|
+
both. Board-column creation accepts `project_id`, lowercase `key`, `label`,
|
|
513
|
+
optional inline `description`, and optional `color`; MCP has no file-input
|
|
514
|
+
field. Project deletion requires the exact `confirmation: "DELETE"` value and
|
|
515
|
+
owner/admin access. Linked Artifacts and active executions can still block
|
|
516
|
+
deletion. Goal writes remain owner/admin-only. KPI update changes configuration;
|
|
517
|
+
use `atoll_record_kpi_snapshot` to record `current_value` measurements.
|
|
449
518
|
|
|
450
519
|
Examples:
|
|
451
520
|
|
|
@@ -460,6 +529,36 @@ Examples:
|
|
|
460
529
|
|
|
461
530
|
Initiative creation accepts either a non-empty `title` or the legacy `name`
|
|
462
531
|
alias; updates use `title` only. Initiative, target, and milestone due dates use `YYYY-MM-DD`.
|
|
532
|
+
|
|
533
|
+
## Read-only repository context fields
|
|
534
|
+
|
|
535
|
+
`atoll_list_project_repositories` accepts `org_id` and `project_id`;
|
|
536
|
+
`project_id` supports a UUID, exact slug, or exact name. Its response contains
|
|
537
|
+
`project`, mapped `repositories`, and `truncated`. Each repository includes an
|
|
538
|
+
opaque `repo_ref`, safe repository and project identities, `default_ref`, and
|
|
539
|
+
`read_only_app.status: "connected"`.
|
|
540
|
+
|
|
541
|
+
The other four tools accept that `repo_ref`. Tree, file, search, and commit
|
|
542
|
+
results include `requested_ref` and `resolved_commit_sha`, which identifies the
|
|
543
|
+
exact commit used for the read. Tree entries contain `name`, `path`, `type`,
|
|
544
|
+
nullable `sha`, and nullable `size`; the response keeps `truncated`. File
|
|
545
|
+
results contain `path`, bounded `content`, `encoding: "utf-8"`, and `size`.
|
|
546
|
+
Search results contain `query`, nullable `path`, verified `hits`, `total_count`,
|
|
547
|
+
and `incomplete_results`; each hit includes `name`, `path`, `sha`, nullable
|
|
548
|
+
`html_url`, and `verified_at_commit_sha`. Commit results contain `sha`, nullable
|
|
549
|
+
`html_url`, bounded `message`, `message_truncated`, nullable `author` and
|
|
550
|
+
`committer` snapshots, valid `parents` with nullable `html_url`, and
|
|
551
|
+
`parents_truncated`. Public and full/private MCP output schemas reject
|
|
552
|
+
undeclared fields.
|
|
553
|
+
|
|
554
|
+
Repository errors preserve the REST `{ error, code, retryable }` fields. Codes
|
|
555
|
+
include `repository_not_connected`, `repository_access_denied`,
|
|
556
|
+
`github_installation_unavailable`, `github_permission_missing`,
|
|
557
|
+
`repository_ref_invalid`, `git_ref_not_found`, `repository_path_not_found`,
|
|
558
|
+
`repository_search_ref_unsupported`, `repository_file_too_large`,
|
|
559
|
+
`repository_file_encoding_unsupported`, and `repository_context_unavailable`.
|
|
560
|
+
Public plugin responses also wrap the same data in `result: { ok, data }` or
|
|
561
|
+
`result: { ok, error }`.
|
|
463
562
|
Initiative target writes use the existing target fields above. Public milestone
|
|
464
563
|
create and upsert accept `status: "active" | "closed"`; closed creation is
|
|
465
564
|
persisted in the same downstream write. Public milestone upsert compares exact-name fields and returns `unchanged` for an identical
|
|
@@ -496,6 +595,10 @@ multiple exact-name milestones already exist, upsert returns a structured
|
|
|
496
595
|
}
|
|
497
596
|
```
|
|
498
597
|
|
|
598
|
+
`issue.assigned` matches both assignment changes and issue creation with at
|
|
599
|
+
least one assignee. This includes recurring occurrences that inherit an
|
|
600
|
+
assignee from their recurrence root.
|
|
601
|
+
|
|
499
602
|
Time-based rules use the same definition with `trigger_event:
|
|
500
603
|
"schedule.issue_time"` and a required `schedule_config`:
|
|
501
604
|
|
|
@@ -624,8 +727,9 @@ return `400`. A project UUID requires both organization membership and caller
|
|
|
624
727
|
read access to that project; cross-organization, inaccessible, or missing
|
|
625
728
|
projects return `404`. Organization-wide and unfiltered requests retain existing
|
|
626
729
|
organization-member access. Results remain newest first and include disabled
|
|
627
|
-
or invalid rules with their validation diagnostics.
|
|
628
|
-
|
|
730
|
+
or invalid rules with their validation diagnostics. Both MCP profiles accept
|
|
731
|
+
the same optional `project_id` UUID or `none` filter; the CLI does not add
|
|
732
|
+
filter flags.
|
|
629
733
|
|
|
630
734
|
GET/list rules can include `validation: { valid, issues: [{ path, code, message }] }`.
|
|
631
735
|
Invalid saved rows remain readable. Runtime validation rejects the whole invalid
|
|
@@ -778,6 +882,11 @@ a new private destination version; pending deliveries retain their pinned versio
|
|
|
778
882
|
|
|
779
883
|
URL must be an HTTPS DNS hostname. IP literals, `localhost`, and `.local` hosts are rejected at creation; delivery refuses non-public DNS results and does not follow redirects. The create response includes an Atoll-generated `secret` for HMAC signature verification. Store it immediately; it is shown only once. This is distinct from the receiver-supplied Standard Webhooks `whsec_` secret. Use purpose `automation` or `both` with `auth: { "type": "bearer", "secret": "..." }` for automation destinations; responses expose only `auth.type` and `auth.configured`.
|
|
780
884
|
|
|
885
|
+
`atoll_create_webhook` is available only in the full/private MCP profile because
|
|
886
|
+
normal MCP tool output may be retained in client conversation history. The
|
|
887
|
+
public plugin exposes redacted webhook listing and deletion but never the
|
|
888
|
+
one-time signing secret.
|
|
889
|
+
|
|
781
890
|
List responses include `destination_display` and a deprecated `url` compatibility field containing only the origin plus `/…`. Automation action payloads use schema version `3` with current tenant-scoped project and issue fields; subscription broadcasts and `ping` remain schema version `2`. Delivery requests include `X-Atoll-Signature`, `X-Atoll-Signature-Version`, versioned `X-Atoll-Signatures`, `X-Atoll-Delivery-Id`, and `Idempotency-Key`. When Standard Webhooks is enabled, they also include `webhook-id`, `webhook-timestamp`, and `webhook-signature`. Delivery history includes `delivery_id`, `status`, `status_code`, `error_code`, `delivered_at`, and `next_retry_at`, never payloads, receiver response bodies, or raw errors.
|
|
782
891
|
|
|
783
892
|
## Private Inbox Fields
|
|
@@ -825,7 +934,8 @@ Proposal JSON currently supports at most one item in each collection: `projects`
|
|
|
825
934
|
|
|
826
935
|
`GET /api/orgs/{id}/heartbeat` returns compact delivery by default for REST
|
|
827
936
|
and private CLI/MCP callers. Compact responses contain `mode: "compact"`,
|
|
828
|
-
`agent`, `timestamp`, `attention_items`, `attention_summary`,
|
|
937
|
+
`agent`, `timestamp`, `attention_items`, `attention_summary`, private
|
|
938
|
+
`execution_attention` and `execution_attention_summary`, grouped `signals`, `recommended_action`,
|
|
829
939
|
`counts`, `delta`, and `page`. Full legacy context is available only with
|
|
830
940
|
`view=full` (or the CLI `--full` flag).
|
|
831
941
|
|
|
@@ -836,6 +946,8 @@ and private CLI/MCP callers. Compact responses contain `mode: "compact"`,
|
|
|
836
946
|
| `signals[]` | Grouped actionable signal or dependency-blocker groups. Each group has `key`, `revision`, `severity`, `kind`, `action_reason`, root and impact counts, readiness, bounded `evidence`, and optional `suggested_read`. |
|
|
837
947
|
| `attention_items` | Bounded direct attention projections with required `id`, `event_type`, `severity`, `title`, `resource_type`, and `ack_endpoint`; optional `resource_id` is included when present. |
|
|
838
948
|
| `attention_summary` | Counts for included direct attention items. |
|
|
949
|
+
| `execution_attention` | Private queues with `resolved_unread` answers and `open` requests. Resolved answers remain until explicit receipt acknowledgement or the exact requester `waiting -> running` transition. |
|
|
950
|
+
| `execution_attention_summary` | Private exact counts for `resolved_unread`, `open`, and `total`. |
|
|
839
951
|
| `counts` | `actionable_groups`, severity counts, `direct_blocked`, `downstream_blocked`, `ready_if_released`, `unknown_readiness`, `restricted`, and `suppressed_expected_waits`. |
|
|
840
952
|
| `delta` | `since`, `new_count`, `changed_count`, `escalated_count`, `ready_count`, suppression counts, and `reset_required`. |
|
|
841
953
|
| `page` | Requested `max_bytes` (1,024-16,384) and `max_items` (1-25), returned counts/bytes, `has_more`, `next_cursor`, and terminal `ack_cursor`. |
|
|
@@ -1010,6 +1122,44 @@ Each finding carries whichever entity ids apply: `goal_id`, `kpi_id`, `initiativ
|
|
|
1010
1122
|
|
|
1011
1123
|
## Artifact Fields
|
|
1012
1124
|
|
|
1125
|
+
### Revision source provenance
|
|
1126
|
+
|
|
1127
|
+
An Artifact revision can keep one optional source from an existing External
|
|
1128
|
+
Reference linked to the same issue or project. The source is an immutable
|
|
1129
|
+
pointer snapshot. Atoll does not fetch, copy, or synchronize provider content.
|
|
1130
|
+
|
|
1131
|
+
Create accepts optional `source_external_reference_link_id` (the Context link
|
|
1132
|
+
UUID). Revise uses three states: omit the field to inherit the current snapshot,
|
|
1133
|
+
supply a live link UUID to set or replace it, or send `null` to clear it on the
|
|
1134
|
+
new revision. A source-only change is valid and still requires the exact
|
|
1135
|
+
`expected_revision_id` or `expected_revision_number`. An unchanged title,
|
|
1136
|
+
content, and source is rejected. An unrelated or removed link cannot be selected.
|
|
1137
|
+
|
|
1138
|
+
Source selection returns `404 source_reference_unavailable` for a missing,
|
|
1139
|
+
concealed, or concurrently removed link; these cases are indistinguishable.
|
|
1140
|
+
A link on an unrelated Artifact target returns `400 source_target_mismatch`.
|
|
1141
|
+
Choose another source or clear the selection. A stale expected revision still
|
|
1142
|
+
returns `409 CONFLICT` and requires rereading the Artifact before retrying.
|
|
1143
|
+
|
|
1144
|
+
Add `?projection=source_provenance_v1` to Artifact create, revision create, or
|
|
1145
|
+
single-revision GET to receive `revision.source_reference`. Default responses
|
|
1146
|
+
and revision lists remain unchanged. Unknown or duplicate projections return
|
|
1147
|
+
`400`. The projection is `null` when no source exists or the caller cannot read
|
|
1148
|
+
the recorded source target. Otherwise it contains `external_reference_id`,
|
|
1149
|
+
`target_type`, `target_id`, `canonical_url`, `provider`, `object_type`,
|
|
1150
|
+
`provenance`, nullable `label`, and live `currently_linked`.
|
|
1151
|
+
|
|
1152
|
+
The URL is HTTP(S), has no credentials, and is limited to 2048 UTF-8 bytes;
|
|
1153
|
+
provider, object type, and provenance are each limited to 64 bytes, and the
|
|
1154
|
+
label to 240 characters (at most 960 UTF-8 bytes). All fields except `currently_linked` come from the saved
|
|
1155
|
+
snapshot. Removing the live Context link preserves history and permits
|
|
1156
|
+
inherit or clear. Later reference changes cannot rewrite a saved source.
|
|
1157
|
+
Linking the Artifact to another target does not grant access to its source.
|
|
1158
|
+
|
|
1159
|
+
The web editor and CLI support this workflow. Typed MCP source inputs and
|
|
1160
|
+
outputs are not yet available; their existing Artifact contract is unchanged.
|
|
1161
|
+
|
|
1162
|
+
|
|
1013
1163
|
`atoll_list_artifacts` accepts optional `issue_id` for a compact issue manifest
|
|
1014
1164
|
or `project_id` for direct project links; these selectors are mutually
|
|
1015
1165
|
exclusive. All modes accept `limit` (1-100, default 50) and `offset`
|
|
@@ -1063,6 +1213,15 @@ returns state `assigned`. Transition requires `expected_state_version`,
|
|
|
1063
1213
|
provenance; the server derives safe OAuth provenance. The generic transition
|
|
1064
1214
|
enum excludes `needs_human`.
|
|
1065
1215
|
|
|
1216
|
+
The local runner uses `harness_kind: "atoll_local_runner"` and the lease UUID
|
|
1217
|
+
as `external_run_id`. Its private job record stores the exact execution state
|
|
1218
|
+
and version plus one bounded pending management operation. Canonical human
|
|
1219
|
+
attention adds private claim fields `attention_source: "human_attention"`,
|
|
1220
|
+
`execution_id`, `human_attention_item_id`, `expected_attention_version`, and
|
|
1221
|
+
`expected_execution_version`; those identities are separate from notification
|
|
1222
|
+
`attention_item_id`. The runner sends only canonical IDs and the closed
|
|
1223
|
+
resolution outcome enum to the retained thread.
|
|
1224
|
+
|
|
1066
1225
|
## Analytics Response
|
|
1067
1226
|
|
|
1068
1227
|
```json
|
|
@@ -1098,6 +1257,23 @@ bounded `resolution_summary`. Free-form text rejects secret-like values.
|
|
|
1098
1257
|
Internal requester/actor provenance, hashes, response snapshots, and mutation
|
|
1099
1258
|
metadata are never returned by the public API.
|
|
1100
1259
|
|
|
1260
|
+
Private heartbeat execution-attention items contain bounded execution, issue,
|
|
1261
|
+
project, kind, title, request summary, request time, status, attention version,
|
|
1262
|
+
execution state version, resolution outcome/summary when resolved, the close
|
|
1263
|
+
state version, and an `ack_endpoint`. The receipt ack body is
|
|
1264
|
+
`{ expected_attention_version, expected_execution_state_version_at_close,
|
|
1265
|
+
idempotency_key }`. It is requester-only, checks current project access, is
|
|
1266
|
+
idempotent for the same key and body, and never resumes work. Stale versions return `409`, including after consumption; current versions after another consumer return `already_consumed: true` without consuming again.
|
|
1267
|
+
|
|
1268
|
+
The full/private and public plugin MCP profiles expose typed execution tools
|
|
1269
|
+
for list, detail, assigned creation, version-fenced transition, evidence list,
|
|
1270
|
+
and existing-evidence link, plus requester attention list, detail, create,
|
|
1271
|
+
cancel, and receipt acknowledgement. These tools preserve the REST projections
|
|
1272
|
+
and require explicit lifecycle idempotency/version inputs on writes. Their
|
|
1273
|
+
schemas exclude local file content and do not expose human resolution,
|
|
1274
|
+
administrator recovery/retarget/cancel, or runner and harness controls. Public
|
|
1275
|
+
actor-dependent calls use the selected connection-scoped `profile_ref`.
|
|
1276
|
+
|
|
1101
1277
|
## Enums
|
|
1102
1278
|
|
|
1103
1279
|
| Domain | Field | Values |
|
|
@@ -1228,6 +1404,11 @@ metadata-only Activity actions `external_reference.linked`,
|
|
|
1228
1404
|
|
|
1229
1405
|
### External operational delivery context
|
|
1230
1406
|
|
|
1407
|
+
Manual `workflow_dispatch` evidence requires one distinct current linked PR,
|
|
1408
|
+
canonical numeric PR and repository identity, and matching head SHA and branch.
|
|
1409
|
+
Several issue links to that same PR are allowed. Provider PR membership remains
|
|
1410
|
+
required for `pull_request` runs. Unresolved dispatch identity creates no signal.
|
|
1411
|
+
|
|
1231
1412
|
`GET /api/orgs/{id}/issues/{issueId}/external-operational-signals` returns
|
|
1232
1413
|
`{ deliveryContext }`. The value is `null` without a linked PR. With several
|
|
1233
1414
|
links, selection prefers an open PR, then the latest `updated_at`, then the
|
|
@@ -1334,3 +1515,230 @@ not a hosted API or MCP surface. Its browser projection excludes credentials,
|
|
|
1334
1515
|
raw configuration, prompts, and model output. Local bindings use `repo_ref` but
|
|
1335
1516
|
do not grant project/repository access. Intake is read-only locally; hosted
|
|
1336
1517
|
Workspace Settings → Runners owns pause/resume. See the CLI local-runner guide.
|
|
1518
|
+
|
|
1519
|
+
## MCP Events subscription fields
|
|
1520
|
+
|
|
1521
|
+
The modern public OAuth MCP endpoint (`https://atollhq.com/mcp`, version `2026-07-28`) advertises `events` and supports `events/list`, `events/subscribe`, and `events/unsubscribe`. Legacy 2025 tool calls remain supported. No event subscriptions are available to API-key, private or stdio identities.
|
|
1522
|
+
|
|
1523
|
+
The authenticated adapter uses `POST /api/mcp-events/subscriptions` to create/refresh and `DELETE /api/mcp-events/subscriptions` to unsubscribe. Resolve the OAuth connection and optional `X-Atoll-Agent-Profile` through existing auth. Request fields are the protocol `name`, `arguments`, `delivery`, optional `ttlMs`, and optional `cursor: null`. Profile selection travels in the header, not business filters.
|
|
1524
|
+
|
|
1525
|
+
Events: `issue.status_changed` (`project_id`, optional `issue_id`, `from_status`, `to_status`); `attention.created` (`project_id`, optional `kind`); `execution.state_changed` (`project_id`, optional `issue_id`, `to_state`). Project and issue UUIDs must be readable in the selected profile; status keys must exist in the project's workflow.
|
|
1526
|
+
|
|
1527
|
+
Subscribe requires `{ mode: "webhook", url: "https://…", secret: "whsec_…" }` with a canonical Base64 key of 24–64 bytes. Unsubscribe uses the same name/arguments/callback identity and does not require a secret. The principal is the resolved OAuth connection plus profile grant. IDs use canonical JSON and callback URLs. POST returns `{ id, refreshBefore, cursor: null, truncated: false }`; DELETE returns `{}`. Secrets are never returned.
|
|
1528
|
+
|
|
1529
|
+
Every grant is bounded by validated OAuth access-token expiry and a shorter finite `ttlMs`, if requested. Even `ttlMs: null` receives a finite grant. Refresh rotates secrets with overlap through the previous grant's expiry. Callback verification is cached only through its granted expiry. Delivery rechecks connection/profile/project access and uses the existing SSRF-safe HTTPS boundary and 15-minute maintenance runner. One compact immutable occurrence is sent per request with stable event ID and Standard Webhooks headers; retries stop at the grant deadline active when the event occurred, even if fanout is delayed. Shorter refreshes clamp cached verification; reactivation requires a fresh challenge. Quiet expiry/revocation and expired rotation overlap clear signing material through bounded maintenance batches. No replay; 410/413 are terminal. Callback errors use `callback_endpoint_error` with a categorized `reason`, mapped to MCP `-32015`. Temporary service failures map to MCP `-32603`.
|
|
1530
|
+
|
|
1531
|
+
## MCP App extension (not a REST endpoint)
|
|
1532
|
+
|
|
1533
|
+
Public plugin discovery adds the app-only `atoll.open` global entrypoint,
|
|
1534
|
+
input `{}`, initial result `{page:"home"}`, and resource
|
|
1535
|
+
`ui://atoll/command-center` with MIME `text/html;profile=mcp-app`.
|
|
1536
|
+
`_meta.ui.resourceUri`, app-only visibility, a monochrome tool icon and
|
|
1537
|
+
`_meta["openai/ui"].entrypoints:[{type:"global"}]` identify the UI.
|
|
1538
|
+
Existing business reads keep their `profile_ref` and authorization contract.
|
|
1539
|
+
No REST field, write endpoint or persistent profile preference is added.
|
|
1540
|
+
|
|
1541
|
+
## Bounded collection search
|
|
1542
|
+
|
|
1543
|
+
Projects, goals, KPIs and initiatives accept `q` for case-insensitive literal
|
|
1544
|
+
substring matching of the display name/title, `q_exact=true` for the complete
|
|
1545
|
+
name, and `limit`/`offset` for server-side pagination. Defaults in bounded mode
|
|
1546
|
+
are 25 results, maximum 100, and offset 0. Filtering and authorization precede
|
|
1547
|
+
pagination; offsets beyond matching results return an empty page with the exact
|
|
1548
|
+
total. KPI pages include current calculated values. Use `shape=envelope`
|
|
1549
|
+
(or `response_shape=cli`) for `resource`, `items`, `total`, `limit`, `offset`,
|
|
1550
|
+
`nextOffset`, `truncated` and `hint`. Supplying a search or pagination parameter
|
|
1551
|
+
also selects bounded retrieval. Calls without these parameters retain their
|
|
1552
|
+
legacy resource-key response and full-list behavior.
|
|
1553
|
+
|
|
1554
|
+
Members add `member_id=<UUID>` and `q_exact=true` in bounded directory mode.
|
|
1555
|
+
Identity filtering uses the same collaborator visibility rules and safe fields
|
|
1556
|
+
as name search; it does not grant access or return credentials or account email.
|
|
1557
|
+
Members and initiatives also accept `scope=accessible_projects` for a bounded
|
|
1558
|
+
union under the current actor. The server derives project IDs; callers cannot
|
|
1559
|
+
supply ID arrays. Guests see only accessible project-linked initiatives and
|
|
1560
|
+
eligible collaborators. Existing member/admin projectless initiative rights
|
|
1561
|
+
remain. Empty project access gives guests an empty page. Unknown scope or scope
|
|
1562
|
+
combined with an explicit project returns `400`. Explicit project scope remains
|
|
1563
|
+
`project_id` for initiatives and `projectId` for members.
|
|
1564
|
+
|
|
1565
|
+
Full issue lists resolve authorized human identifiers such as `AH-123`,
|
|
1566
|
+
`ATOLL-123`, `#123` or a number before loose title/description matching. They also
|
|
1567
|
+
accept `q_exact=true` for the full title. The exact flag is rejected with `400`
|
|
1568
|
+
for compact `view=board`/`view=list`; existing compact search stays unchanged.
|
|
1569
|
+
The existing issue filters and actor/project authorization still apply.
|
|
1570
|
+
|
|
1571
|
+
CLI list commands for projects, goals, KPIs, initiatives and members use
|
|
1572
|
+
`--search`, `--exact`, `--limit` and `--offset`; issue list uses `--q` with
|
|
1573
|
+
`--exact`. Member list also supports `--member-id`. These filters are evaluated
|
|
1574
|
+
by the API. Existing public/private MCP list tools expose `q`, `q_exact`,
|
|
1575
|
+
`limit` and `offset`; `atoll_list_members` adds `member_id`. Member and initiative
|
|
1576
|
+
lists expose `--accessible-projects` in the CLI and `scope=accessible_projects`
|
|
1577
|
+
in MCP. The initiative flag suppresses a configured default project and cannot
|
|
1578
|
+
combine with `--project` or `--org-wide`. Normal MCP goal/KPI/initiative calls
|
|
1579
|
+
without query, exact, paging or scope options retain legacy full-list responses.
|
|
1580
|
+
Composer search uses a constant number of bounded list calls per profile and
|
|
1581
|
+
entity kind, independent of the number of accessible projects.
|
|
1582
|
+
|
|
1583
|
+
### Interactive forms and create identity
|
|
1584
|
+
|
|
1585
|
+
`POST /api/orgs/{id}/issues` optionally accepts HTTP `Idempotency-Key: <UUID>`.
|
|
1586
|
+
The API scopes it to the authenticated member/org. One transaction consumes it;
|
|
1587
|
+
concurrent/later/changed-body replay returns 409 without another issue/effect,
|
|
1588
|
+
even after deletion. Invalid key returns 400; definite validation failure does
|
|
1589
|
+
not consume it. No header preserves independent create. Never retry an uncertain
|
|
1590
|
+
result automatically. The interactive tool generates this identity internally;
|
|
1591
|
+
ordinary CLI/MCP arguments do not expose it.
|
|
1592
|
+
|
|
1593
|
+
`atoll_create_issue_interactive` seeds: required profile_ref; optional title,
|
|
1594
|
+
description, project_id UUID, project_query, milestone_query, priority 0-3 (0 Urgent, 1 High, 2 Medium, 3 Low),
|
|
1595
|
+
assignee_query, assignee_ids (max 10), start_date and due_date. Explicit forms
|
|
1596
|
+
confirm basic then project-dependent fields; cancel/refusal/expiry/invalid data
|
|
1597
|
+
creates nothing. State expires after ten minutes and binds grant, actor, profile,
|
|
1598
|
+
tool and original arguments. Both standard form and OpenAI rich-form capabilities
|
|
1599
|
+
are required. Normal atoll_create_issue is unchanged.
|
|
1600
|
+
|
|
1601
|
+
Project milestone GET accepts optional q/q_exact/limit 1-100/offset>=0 and
|
|
1602
|
+
shape=envelope. Filter/paging happen before materialization; current calculated
|
|
1603
|
+
issueCount/completedCount/progress/statusCounts remain. Empty pages retain total
|
|
1604
|
+
and pagination. Default calls preserve the unpaged milestones alias.
|
|
1605
|
+
|
|
1606
|
+
Forms retain at most 25 choices per collection. A truncated project or milestone
|
|
1607
|
+
page returns `issue_create_refine_project` or `issue_create_refine_milestone`;
|
|
1608
|
+
restart with a narrower `project_query` or `milestone_query`. A known accessible
|
|
1609
|
+
`project_id` can be supplied directly. No-match or truncated assignee search
|
|
1610
|
+
returns `issue_create_refine_assignee`; revise `assignee_query` rather than
|
|
1611
|
+
silently dropping the assignment. Recovery includes confirmed basic field seeds.
|
|
1612
|
+
Refinement creates no issue.
|
|
1613
|
+
|
|
1614
|
+
|
|
1615
|
+
## Vercel deployment context
|
|
1616
|
+
|
|
1617
|
+
Vercel deployment observations use `provider: "vercel"`, `object_type: "deployment"`,
|
|
1618
|
+
and `provenance: "vercel_api"` in existing scoped External Reference reads.
|
|
1619
|
+
Metadata contains only label, environment, state, optional exact revision, and
|
|
1620
|
+
provider effective time. A complete authenticated repository/SHA tuple proves
|
|
1621
|
+
identity. Later missing fields cannot erase that proof; contradictory known
|
|
1622
|
+
identity is rejected. Partial observations are never combined to invent proof.
|
|
1623
|
+
The mapped project always receives the reference. An issue receives it only
|
|
1624
|
+
when exactly one unarchived issue in that project has the same numeric GitHub
|
|
1625
|
+
repository ID and exact SHA. Preview/staging supersession is chronological;
|
|
1626
|
+
production supersession follows an authenticated project production target and
|
|
1627
|
+
supports rollback to an older build. Deployment evidence does not change issue
|
|
1628
|
+
status, authorize release, or prove acceptance. Generic list/get/unlink work;
|
|
1629
|
+
manual link remains GitHub-pull-request-only. Unlink does not suppress later
|
|
1630
|
+
verified ingestion. See https://docs.atollhq.com/integrations/vercel.
|
|
1631
|
+
|
|
1632
|
+
### Vercel connection and recovery fields
|
|
1633
|
+
|
|
1634
|
+
|
|
1635
|
+
Vercel deployment `display_metadata` has only `label`, `environment`, `state`,
|
|
1636
|
+
optional `revision`, and `provider_effective_at`, within 2 KiB. Environment is
|
|
1637
|
+
`preview|staging|production`; state is
|
|
1638
|
+
`queued|building|ready|failed|cancelled|superseded`. Revision is lowercase
|
|
1639
|
+
40-hex and is omitted when unavailable. Provider time is an RFC 3339 UTC
|
|
1640
|
+
string. Resolution errors also include `identity_unavailable`,
|
|
1641
|
+
`repository_mismatch`, and `provider_unavailable`. Unlink is association-only;
|
|
1642
|
+
a later verified observation can restore it.
|
|
1643
|
+
|
|
1644
|
+
The owner/admin human-session endpoint is
|
|
1645
|
+
`/api/orgs/{id}/integrations/vercel`. GET returns `{ connections }` with safe
|
|
1646
|
+
`id`, `team_id`, `state`, `health_status`, nullable `health_code`,
|
|
1647
|
+
`last_health_checked_at`, `disabled_at`, `created_at`, `updated_at`,
|
|
1648
|
+
`webhook_url`, and `mappings`. Mapping fields are `id`, `connection_id`,
|
|
1649
|
+
`vercel_project_id`, `project_id`, `github_app_repository_id`, and `updated_at`.
|
|
1650
|
+
No credential value or ciphertext is returned.
|
|
1651
|
+
|
|
1652
|
+
PUT requires all of these fields and rejects extras:
|
|
1653
|
+
|
|
1654
|
+
| Field | Contract |
|
|
1655
|
+
| --- | --- |
|
|
1656
|
+
| `connection_id` | Proposed UUID for a new connection; saved UUID for edits |
|
|
1657
|
+
| `expected_updated_at` | `null` for a new connection, exact saved timestamp for edits |
|
|
1658
|
+
| `team_id`, `vercel_project_id` | 1–200 letters, digits, underscores, or hyphens |
|
|
1659
|
+
| `project_id`, `github_app_repository_id` | Same-org UUIDs; repository must be enabled and verified |
|
|
1660
|
+
| `api_token`, `webhook_secret` | Write-only non-empty strings, at most 4,096 UTF-8 bytes each |
|
|
1661
|
+
|
|
1662
|
+
PUT validates the live Vercel project/repository and returns
|
|
1663
|
+
`{ connection_id, updated_at, webhook_url }`. Credentials must be supplied
|
|
1664
|
+
again on edit. Include every mapped Vercel project in the account webhook’s
|
|
1665
|
+
project scope, using the same callback URL and signing secret for the connection;
|
|
1666
|
+
Atoll does not change Vercel webhook settings. A mapping with history cannot change its Atoll project or
|
|
1667
|
+
repository. DELETE requires `{ connection_id, expected_updated_at }` and
|
|
1668
|
+
returns `{ disabled: true, updated_at }`. It clears credentials and revokes
|
|
1669
|
+
resolvability while preserving history.
|
|
1670
|
+
|
|
1671
|
+
An organization supports at most 50 team connections, including disabled
|
|
1672
|
+
connections. Existing connections can reconnect and update mappings at that
|
|
1673
|
+
limit; new teams return `409 connection_limit`.
|
|
1674
|
+
|
|
1675
|
+
POST `/api/orgs/{id}/integrations/vercel/reconcile` requires
|
|
1676
|
+
`{ connection_id }`; optional `vercel_project_id` selects one saved mapping.
|
|
1677
|
+
The response is `{ complete, results }`. Each result contains `mapping_id`,
|
|
1678
|
+
`environment`, `discovered`, `ingested`, `skipped`, `failed`, `truncated`, and
|
|
1679
|
+
`codes`. It reads one page of at most 50 per environment, plus the current
|
|
1680
|
+
production target when it is outside that page (at most 151 deployments per
|
|
1681
|
+
mapping). The extra target counts in `discovered`; history remains `truncated`
|
|
1682
|
+
when the provider has more pages. It stops new work after a bounded request budget. No raw provider response or credential is
|
|
1683
|
+
returned. Partial results use HTTP 200 with `complete=false`.
|
|
1684
|
+
|
|
1685
|
+
Setup errors use `{ error: <safe code> }`: 400 for invalid input/provider
|
|
1686
|
+
proof, 403 for a non-human/non-admin caller, 404 for a missing connection or mapping,
|
|
1687
|
+
409 for `configuration_changed`, `mapping_has_history`, `mapping_limit`, or `connection_limit`,
|
|
1688
|
+
and 503 for transient provider, secret-key, or storage failure. Connection
|
|
1689
|
+
configuration uses an exact version fence; read the saved state before
|
|
1690
|
+
retrying an uncertain write.
|
|
1691
|
+
|
|
1692
|
+
## Compact Context index
|
|
1693
|
+
|
|
1694
|
+
`GET /api/orgs/{id}/issues/{issueId}/context` and
|
|
1695
|
+
`GET /api/orgs/{id}/projects/{projectId}/context` return `{ context }` after
|
|
1696
|
+
normal target authorization. Inaccessible targets are concealed. Projectless
|
|
1697
|
+
issues retain their existing access rules; setup-only agents receive no Artifact
|
|
1698
|
+
items. Project reads include directly linked records only.
|
|
1699
|
+
|
|
1700
|
+
Use optional `group` (`development`, `design`, `discussion`, `documents`,
|
|
1701
|
+
`deployments`, or `production`) and `limit` (1–25, default 5 per group).
|
|
1702
|
+
Without `group`, all six groups are returned. Design and Discussion are reserved
|
|
1703
|
+
empty groups. `cursor` requires one group and the same target and limit as its
|
|
1704
|
+
previous page. Unknown or repeated query keys and invalid cursors return 400.
|
|
1705
|
+
Each group has its own `page.next_cursor` and `page.has_more`; these are live
|
|
1706
|
+
keyset pages, not a historical snapshot. Refresh to restart after evidence changes.
|
|
1707
|
+
Deduplicate continued items by `id`.
|
|
1708
|
+
|
|
1709
|
+
The version-1 response contains `target`, `groups`, and `partial`. Each group has
|
|
1710
|
+
`key`, `state` (`available`, `empty`, `partial`, or `unavailable`), `items`, `page`
|
|
1711
|
+
(`limit`, `returned_count`, `has_more`, `next_cursor`), and safe `errors`.
|
|
1712
|
+
Items contain a namespaced `id`, `kind`, `group`, `authority`, `availability`,
|
|
1713
|
+
`summary`, `freshness`, `current_identity`, `follow_up`, and action capabilities.
|
|
1714
|
+
Artifact identities carry the current revision; revision-bound delivery and
|
|
1715
|
+
provider evidence carry an available commit SHA. Null means unknown, not current.
|
|
1716
|
+
External evidence is stale after 24 hours. Partial evidence stays explicit.
|
|
1717
|
+
|
|
1718
|
+
Artifact summaries contain only title and type. Reference summaries contain a
|
|
1719
|
+
safe label/URL, provider/object type, environment, state, and provider time.
|
|
1720
|
+
Delivery summaries contain PR number/state, review, configured-workflow and
|
|
1721
|
+
required-check aggregates, and a fixed blocker code. Atoll records,
|
|
1722
|
+
provider references, and operational evidence have separate authority. A passed
|
|
1723
|
+
check, merged PR, ready deployment, current production target, and human
|
|
1724
|
+
acceptance are separate facts.
|
|
1725
|
+
|
|
1726
|
+
Follow-ups are `artifact_revision` (Artifact and optional revision UUID),
|
|
1727
|
+
`external_reference` (reference UUID), or `issue_delivery_context` (issue UUID).
|
|
1728
|
+
Use existing authorized detail reads only when needed. The index never returns
|
|
1729
|
+
Artifact bodies, digests, revision history, provider payloads, credentials, or
|
|
1730
|
+
unbounded signal/check collections. Mutation capabilities are display hints;
|
|
1731
|
+
every mutation rechecks access. Responses are capped below 64 KiB; a larger
|
|
1732
|
+
request returns 413 `context_response_too_large`, so retry with a smaller limit.
|
|
1733
|
+
An individual source failure affects its group; a total read failure returns
|
|
1734
|
+
500 `context_unavailable`.
|
|
1735
|
+
|
|
1736
|
+
CLI: `atoll context list --issue ATOLL-42 --json` or
|
|
1737
|
+
`atoll context list --project project-slug --group documents --limit 5 --json`.
|
|
1738
|
+
Pass exactly one target. Continue with `--group`, `--limit`, and `--cursor`.
|
|
1739
|
+
JSON preserves the REST envelope; human output includes explicit follow-up
|
|
1740
|
+
commands. The full/private MCP tool is `atoll_list_context`, with exactly one
|
|
1741
|
+
`issue_id` or `project_id` UUID and the same optional group, limit, and cursor.
|
|
1742
|
+
Public MCP Context and delivery-detail tools are not available; AH-3067 owns
|
|
1743
|
+
post-freeze parity. Existing public Artifact and External Reference reads remain
|
|
1744
|
+
available. No existing issue, heartbeat, or public tool schema changes.
|
|
@@ -71,3 +71,40 @@ In a CLI environment, use `atoll issue get` for the compact manifest and
|
|
|
71
71
|
[CLI operations](cli-operations.md). Use the required named profile.
|
|
72
72
|
Exact REST routes and field limits are in [API endpoints](api-endpoints.md#artifacts)
|
|
73
73
|
and [API fields](api-fields.md#artifact-fields).
|
|
74
|
+
|
|
75
|
+
### Revision source provenance
|
|
76
|
+
|
|
77
|
+
An Artifact revision can keep one optional source from an existing External
|
|
78
|
+
Reference linked to the same issue or project. The source is an immutable
|
|
79
|
+
pointer snapshot. Atoll does not fetch, copy, or synchronize provider content.
|
|
80
|
+
|
|
81
|
+
Create accepts optional `source_external_reference_link_id` (the Context link
|
|
82
|
+
UUID). Revise uses three states: omit the field to inherit the current snapshot,
|
|
83
|
+
supply a live link UUID to set or replace it, or send `null` to clear it on the
|
|
84
|
+
new revision. A source-only change is valid and still requires the exact
|
|
85
|
+
`expected_revision_id` or `expected_revision_number`. An unchanged title,
|
|
86
|
+
content, and source is rejected. An unrelated or removed link cannot be selected.
|
|
87
|
+
|
|
88
|
+
Source selection returns `404 source_reference_unavailable` for a missing,
|
|
89
|
+
concealed, or concurrently removed link; these cases are indistinguishable.
|
|
90
|
+
A link on an unrelated Artifact target returns `400 source_target_mismatch`.
|
|
91
|
+
Choose another source or clear the selection. A stale expected revision still
|
|
92
|
+
returns `409 CONFLICT` and requires rereading the Artifact before retrying.
|
|
93
|
+
|
|
94
|
+
Add `?projection=source_provenance_v1` to Artifact create, revision create, or
|
|
95
|
+
single-revision GET to receive `revision.source_reference`. Default responses
|
|
96
|
+
and revision lists remain unchanged. Unknown or duplicate projections return
|
|
97
|
+
`400`. The projection is `null` when no source exists or the caller cannot read
|
|
98
|
+
the recorded source target. Otherwise it contains `external_reference_id`,
|
|
99
|
+
`target_type`, `target_id`, `canonical_url`, `provider`, `object_type`,
|
|
100
|
+
`provenance`, nullable `label`, and live `currently_linked`.
|
|
101
|
+
|
|
102
|
+
The URL is HTTP(S), has no credentials, and is limited to 2048 UTF-8 bytes;
|
|
103
|
+
provider, object type, and provenance are each limited to 64 bytes, and the
|
|
104
|
+
label to 240 characters (at most 960 UTF-8 bytes). All fields except `currently_linked` come from the saved
|
|
105
|
+
snapshot. Removing the live Context link preserves history and permits
|
|
106
|
+
inherit or clear. Later reference changes cannot rewrite a saved source.
|
|
107
|
+
Linking the Artifact to another target does not grant access to its source.
|
|
108
|
+
|
|
109
|
+
The web editor and CLI support this workflow. Typed MCP source inputs and
|
|
110
|
+
outputs are not yet available; their existing Artifact contract is unchanged.
|
|
@@ -7,7 +7,7 @@ Read this reference for routine Atoll CLI installation and resource operations.
|
|
|
7
7
|
Install globally or use via npx:
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install -g @atollhq/cli # or:
|
|
10
|
+
npm install -g @atollhq/cli # or: npm exec --yes --ignore-scripts --package @atollhq/cli@latest -- atoll ...
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
Configure once:
|
|
@@ -35,6 +35,21 @@ plus archived issues, while preserving every custom and other non-terminal
|
|
|
35
35
|
status. It composes with other list filters, ordering, pagination, and JSON,
|
|
36
36
|
and cannot be combined with `--include-archived`.
|
|
37
37
|
|
|
38
|
+
## Discover members
|
|
39
|
+
|
|
40
|
+
Use one member directory for humans and agents. Resolve a project by UUID, exact
|
|
41
|
+
slug, or exact name, then filter by member type and display name:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
atoll member list --project project-slug --type human --search "Ada" --json
|
|
45
|
+
atoll member list --limit 25 --offset 25
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The result is bounded to 25 members by default and 100 maximum. It returns
|
|
49
|
+
stable member IDs that can be used with issue assignment commands. The matching
|
|
50
|
+
MCP tool is `atoll_list_members`; it lists collaborators, while
|
|
51
|
+
`atoll_list_agent_profiles` selects the caller identity.
|
|
52
|
+
|
|
38
53
|
Full REST issue-list items include the canonical project-prefixed `identifier`
|
|
39
54
|
and collision-free `projectSlug` for project issues, or `null` for projectless
|
|
40
55
|
issues. Compact board/list views do not include these fields.
|
|
@@ -205,7 +220,7 @@ default. Use `--full` for the legacy full context; full mode cannot combine with
|
|
|
205
220
|
- Compact signal groups include dependency blockers grouped by root blocker and release condition. Expected waits are suppressed for an unsatisfied dependency when the readable blocker is before its release column and there is no active stall, threatened or overdue commitment, or explicit deadline, gate, permission, or stale anomaly. An unowned backlog or Todo blocker by itself is an ordinary wait and never alerts. Actionable groups surface active stalls, threatened or overdue commitments, and explicit anomalies; escalation metadata alone does not surface an expected wait. Initiative-target and stalled aggregates are also suppressed when every underlying dependency is an expected wait. Groups can include a bounded `suggested_read` REST, CLI, or private-MCP call. Public plugin MCP keeps legacy full heartbeat behavior; private MCP supports compact heartbeat, `atoll_ack_heartbeat`, and `atoll_get_dependency_chain`.
|
|
206
221
|
- `atoll heartbeat --json` includes the structured `cli` update metadata for agents, plus direct `attention`/`attention_items` and `recommended_action` when Atoll can propose one concrete strategy-backed next action. Handle direct attention items first, then call each handled item's `ack_endpoint`. Follow `recommended_action.usage_guidance`: prefer `suggested_write.operation` when it still matches the board, preserve KPI/initiative/initiative_target/why-now/expected-impact/first-step/success-criteria evidence, and avoid copying deferred busywork into issue or comment payloads. If a `start_work` recommendation uses `issue.update` with a body, update the issue status and preserve that body as an issue comment; `PATCH /issues/{issueId}` accepts `comment_body` for this same-request progress note.
|
|
207
222
|
- Authorized humans can configure an agent's included heartbeat sections and generated-signal focus in the Atoll **Heartbeats** UI. The saved policy is applied by the API before CLI or MCP request-level narrowing; it never changes project access, and existing heartbeat commands require no new arguments.
|
|
208
|
-
- GitHub `workflow_run` signals are accepted only when HMAC-signed and completed, then reread and matched exactly by repository, PR, workflow path, run attempt, and head SHA. Workflow verification is disabled by default and observe-only until an owner/admin enables it in **Settings > Integrations > GitHub**. `attention` mode can add one bounded `verification.completed` attention item through authorized REST or CLI heartbeat for exactly one eligible current agent assignee or, when there is no unambiguous assignee, an eligible configured delivery agent. The public MCP heartbeat excludes this private event type. Unresolved recipients and cancelled, obsolete, superseded, mismatched, or unreadable runs create no attention. Owners and admins can configure 1–10 workflow paths of at most 255 characters each; the bounded evidence list defaults to 25 items and accepts a maximum `limit` of 100. Signed pull-request writes and reconciliation bind PR links to the stable GitHub repository ID, so repository renames keep existing workflow evidence linked. Do not expect raw payloads, secrets, logs, or thread IDs in evidence; owner/admin reconciliation retries pending evidence after current GitHub and PR-link readback.
|
|
223
|
+
- GitHub `workflow_run` signals are accepted only when HMAC-signed and completed, then reread and matched exactly by repository, PR, workflow path, run attempt, and head SHA. Pull-request runs require provider PR membership. A completed `workflow_dispatch` run can have an empty PR list; Atoll requires exactly one distinct current linked PR and confirms its numeric repository IDs, PR identity, head SHA, and branch through GitHub. Several issues can link to that same PR. Ambiguous links, fork heads, changed heads, and newer runs do not produce verification. Signed nonterminal notifications are acknowledged without evidence. Manual dispatch does not emit the generic `ci.run.completed` automation trigger. Workflow verification is disabled by default and observe-only until an owner/admin enables it in **Settings > Integrations > GitHub**. `attention` mode can add one bounded `verification.completed` attention item through authorized REST or CLI heartbeat for exactly one eligible current agent assignee or, when there is no unambiguous assignee, an eligible configured delivery agent. The public MCP heartbeat excludes this private event type. Unresolved recipients and cancelled, obsolete, superseded, mismatched, or unreadable runs create no attention. Owners and admins can configure 1–10 workflow paths of at most 255 characters each; the bounded evidence list defaults to 25 items and accepts a maximum `limit` of 100. Signed pull-request writes and reconciliation bind PR links to the stable GitHub repository ID, so repository renames keep existing workflow evidence linked. Do not expect raw payloads, secrets, logs, or thread IDs in evidence; owner/admin reconciliation retries pending evidence after current GitHub and PR-link readback.
|
|
209
224
|
- Release-added required GitHub hook events mark existing reconciled and already-pending connections pending. The bounded 15-minute service sweep verifies immutable repository identity and upgrades hooks automatically; transient failures remain pending for retry, and owners/admins can reconcile manually.
|
|
210
225
|
- Issue delivery context is read with `atoll issue delivery-context <identifier>`; `--json` preserves `{ deliveryContext }`, while TTY output includes the full head SHA, review, actual required checks, configured verification, freshness, blocker, and partial state. The endpoint selects an open PR first, then the latest updated link, then the highest PR number. Required checks union active rulesets and classic branch protection for the base branch and use exact-head check-run/status evidence. `pending` review/workflow state with null provenance means no current-head observation and does not by itself set `partial`. Required-check collection is disabled by default; with the reader disabled, state `disabled` and aggregate `none` do not set `partial`. The server-only `ATOLL_GITHUB_REQUIRED_CHECKS_READ_ENABLED=1` flag enables read-only provider GETs; when enabled, partial or unavailable collection or aggregate `unknown` sets `partial`. This result does not authorize merge, deployment, production testing, or human acceptance. Configured workflows report `required: false`.
|
|
211
226
|
- Aggregate review state keeps each reviewer's latest exact-head opinion, ignores comments, and removes dismissed opinions. Change requests win. `approved` means at least one effective approval and no effective change request; it does not prove required-review counts or branch protection.
|
|
@@ -240,3 +255,18 @@ Rule writes, tests, and run history require owner/admin access; CLI does not byp
|
|
|
240
255
|
rule, use separate `disable`, `update` while disabled, `test`, and `enable`
|
|
241
256
|
operations. Human `get` output includes invalid state and validation paths;
|
|
242
257
|
`--json` preserves the API response.
|
|
258
|
+
|
|
259
|
+
### Select an Artifact source
|
|
260
|
+
|
|
261
|
+
Use `--source-reference-id <uuid>` on `artifact create` or `artifact update` to
|
|
262
|
+
select a canonical External Reference already in the issue's Context. The CLI
|
|
263
|
+
resolves its Context link ID before saving. On update, use `--clear-source` to
|
|
264
|
+
clear the new revision's source. The two flags cannot be combined. Omit both
|
|
265
|
+
to inherit the current snapshot. A source-only update still requires
|
|
266
|
+
`--expected-revision-id`.
|
|
267
|
+
|
|
268
|
+
`artifact get` and write readback request `source_provenance_v1`; text output
|
|
269
|
+
shows an authorized source link, and JSON includes `revision.source_reference`.
|
|
270
|
+
Historical snapshots survive removal of the live Context link. Atoll does not
|
|
271
|
+
import or synchronize the source content. Typed MCP source fields remain
|
|
272
|
+
unavailable.
|