@atollhq/skill-claude 0.1.3 → 0.1.5

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/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # @atollhq/skill-claude
2
+
3
+ Install the [Atoll](https://atollhq.com) project management skill for [Claude Code](https://docs.anthropic.com/en/docs/claude-code).
4
+
5
+ Gives your Claude Code agent the ability to manage tasks, goals, KPIs, initiatives, milestones, comments, and webhooks on Atoll — the same API surface a human teammate uses.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npx @atollhq/skill-claude --key sk_atoll_... --org your-org-slug
11
+ ```
12
+
13
+ Get an API key from **Settings > Members > Add Agent** (or **Create API Key** for integrations) in the Atoll app.
14
+
15
+ This does two things:
16
+
17
+ 1. Copies the skill into `~/.claude/skills/atoll-api/`
18
+ 2. Writes `ATOLL_API_KEY` and `ATOLL_ORG_SLUG` into `~/.claude/settings.json` under `env`
19
+
20
+ Restart Claude Code and the `atoll-api` skill is available.
21
+
22
+ ## Using the skill
23
+
24
+ Once installed, ask Claude anything task-related:
25
+
26
+ ```
27
+ "List my Atoll tasks"
28
+ "Create an issue to fix the login bug, priority 1"
29
+ "What goals are off pace?"
30
+ "Move ATOLL-42 to in_progress"
31
+ ```
32
+
33
+ The skill also documents how to talk to the Atoll API directly via curl, in case your agent needs to.
34
+
35
+ ## Companion CLI
36
+
37
+ For terminal-first work, see [`@atollhq/cli`](https://www.npmjs.com/package/@atollhq/cli):
38
+
39
+ ```bash
40
+ npm install -g @atollhq/cli
41
+ atoll auth login --key sk_atoll_...
42
+ atoll config set-org your-org-slug
43
+ atoll issue list
44
+ ```
45
+
46
+ ## License
47
+
48
+ MIT
package/bin/install.mjs CHANGED
@@ -23,7 +23,7 @@ function parseArgs(argv) {
23
23
 
24
24
  function printUsage() {
25
25
  console.log(`
26
- Usage: npx @atoll/skill-claude --key <api-key> --org <org-slug>
26
+ Usage: npx @atollhq/skill-claude --key <api-key> --org <org-slug>
27
27
 
28
28
  Options:
29
29
  --key Atoll API key (sk_atoll_...)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atollhq/skill-claude",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Install the Atoll project management skill for Claude Code",
5
5
  "bin": {
6
6
  "skill-claude": "./bin/install.mjs"
package/skill/SKILL.md CHANGED
@@ -26,16 +26,31 @@ Agents are org members with the same API, same permissions, same ability to crea
26
26
 
27
27
  All requests require: `Authorization: Bearer sk_atoll_<key>`
28
28
 
29
- Verify with: `GET /api/auth/me`
29
+ API keys are generated in **Settings > Members > Add Agent** (for agents) or **Settings > Members > Create API Key** (for integrations). Each key is scoped to one org. Store both values as env vars:
30
30
 
31
- API keys are generated in **Settings > Members > Add Agent** (for agents) or **Settings > Members > Create API Key** (for integrations). Store as `$ATOLL_API_KEY`.
31
+ ```bash
32
+ export ATOLL_API_KEY="sk_atoll_..."
33
+ export ATOLL_ORG_ID="..." # UUID of the org the key belongs to
34
+ ```
35
+
36
+ **Sanity check** — exercises the org-scoped issues endpoint, not just `/api/auth/me`:
37
+
38
+ ```bash
39
+ : "${ATOLL_API_KEY:?missing}" "${ATOLL_ORG_ID:?missing}" && \
40
+ curl -sS -o /dev/null -w "HTTP:%{http_code}\n" \
41
+ "https://atollhq.com/api/orgs/$ATOLL_ORG_ID/issues?limit=1" \
42
+ -H "Authorization: Bearer $ATOLL_API_KEY"
43
+ # Expect: HTTP:200
44
+ ```
45
+
46
+ If `$ATOLL_ORG_ID` is empty, the URL collapses to `/api/orgs//issues` which 308-redirects to a non-existent route and returns `Unauthorized` — a misleading symptom that looks like an auth failure. `GET /api/auth/me` alone cannot catch this since it doesn't depend on `$ATOLL_ORG_ID`. Always guard both vars.
32
47
 
33
48
  ## Quick Start — CLI (recommended)
34
49
 
35
50
  Install globally or use via npx:
36
51
 
37
52
  ```bash
38
- npm install -g @atollhq/cli # or: npx atoll ...
53
+ npm install -g @atollhq/cli # or: npx @atollhq/cli ...
39
54
  ```
40
55
 
41
56
  Configure once:
@@ -78,11 +93,16 @@ atoll milestone list --project <project-id>
78
93
  All CLI commands map to REST endpoints. Use the API directly when the CLI doesn't cover a specific operation.
79
94
 
80
95
  ```bash
81
- export ATOLL_API_KEY="sk_atoll_..."
82
-
83
- curl -s -H "Authorization: Bearer $ATOLL_API_KEY" \
84
- -H "Content-Type: application/json" \
85
- "https://atollhq.com/api/orgs/{orgId}/issues?status=todo"
96
+ # Prereq: both env vars exported (see Authentication above)
97
+ atoll() {
98
+ : "${ATOLL_API_KEY:?ATOLL_API_KEY not set}"
99
+ : "${ATOLL_ORG_ID:?ATOLL_ORG_ID not set}"
100
+ curl -s -H "Authorization: Bearer $ATOLL_API_KEY" \
101
+ -H "Content-Type: application/json" \
102
+ "https://atollhq.com$1" "${@:2}"
103
+ }
104
+
105
+ atoll "/api/orgs/$ATOLL_ORG_ID/issues?status=todo"
86
106
  ```
87
107
 
88
108
  ## The Heartbeat Loop
@@ -142,7 +162,7 @@ Full endpoint tables and field schemas:
142
162
  |----------|--------|------|--------|--------|
143
163
  | Orgs | POST `/api/orgs` | GET `/api/orgs` | PATCH `/api/orgs/{id}` | DELETE `/api/orgs/{id}` |
144
164
  | Projects | POST `.../projects` | GET `.../projects` | PATCH `.../projects/{id}` | DELETE `.../projects/{id}` |
145
- | Tasks | POST `.../issues` | GET `.../issues` | PATCH `.../issues/{id}` | DELETE `.../issues/{id}` |
165
+ | Tasks | POST `.../issues` | GET `.../issues` | PATCH `.../issues/{id}` | DELETE `.../issues/{id}` |
146
166
  | Goals | POST `.../goals` | GET `.../goals` | PATCH `.../goals/{id}` | DELETE `.../goals/{id}` |
147
167
  | KPIs | POST `.../kpis` | GET `.../kpis` | PATCH `.../kpis/{id}` | DELETE `.../kpis/{id}` |
148
168
  | Initiatives | POST `.../initiatives` | GET `.../initiatives` | PATCH `.../initiatives/{id}` | DELETE `.../initiatives/{id}` |
@@ -152,6 +172,8 @@ Full endpoint tables and field schemas:
152
172
 
153
173
  All endpoints are under `/api/orgs/{orgId}/...`.
154
174
 
175
+ † `DELETE /issues/{id}` requires `owner` or `admin` role — any caller without that role (including member-role agents) gets `403`. If you just need to remove a task, use `POST /api/orgs/{orgId}/issues/{issueId}/archive` (soft delete, no role gate); reverse with `DELETE` on the same path (unarchive).
176
+
155
177
  ### Quick enum reference
156
178
 
157
179
  - **Task status**: `backlog`, `todo`, `in_progress`, `done`, `cancelled` (custom per project)