@atollhq/skill-claude 0.4.8 → 0.4.10

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 CHANGED
@@ -7,23 +7,25 @@ Gives your Claude Code agent the ability to manage tasks, goals, KPIs, initiativ
7
7
  ## Install
8
8
 
9
9
  ```bash
10
- npx @atollhq/skill-claude --profile agent-a --key sk_atoll_... --org your-org-id --project project-id --team team-id
10
+ npx @atollhq/skill-claude@latest --profile agent-a --key sk_atoll_... --org your-org-id --project project-id --team team-id
11
11
  # or
12
- ATOLL_API_KEY=sk_atoll_... ATOLL_ORG_ID=your-org-id npx @atollhq/skill-claude
12
+ ATOLL_API_KEY=sk_atoll_... ATOLL_ORG_ID=your-org-id npx @atollhq/skill-claude@latest
13
13
  ```
14
14
 
15
- Optional defaults: `--project`, `--team`, and `--base-url` are stored with the selected mode. Use `--no-project`, `--no-team`, or `--no-base-url` to clear previously saved defaults. Pass `--profile` to store credentials and defaults only in that named Atoll CLI profile; Claude settings keep only `ATOLL_PROFILE` so direct CLI commands can use the profile safely. Omit `--profile` to use env-var mode, which writes `ATOLL_ENV_MODE=1` with the credential settings.
15
+ Optional defaults: `--project`, `--team`, and `--base-url` are stored with the selected mode. Use `--no-project`, `--no-team`, or `--no-base-url` to clear previously saved defaults. Pass `--profile` to store credentials and defaults only in that named Atoll CLI profile. The installer does not write a global `ATOLL_PROFILE` or `ATOLL_*` credential settings in profile mode, so direct CLI commands should use `atoll --profile agent-a ...`. Omit `--profile` to use env-var mode, which writes `ATOLL_ENV_MODE=1` with the credential settings.
16
16
 
17
17
  Get an agent API key from **Agents** in the Atoll app. Integration keys are still managed from **Settings > Members**.
18
18
 
19
19
  This does three things:
20
20
 
21
21
  1. Copies the skill into `~/.claude/skills/atoll-api/`
22
- 2. Stores only `ATOLL_PROFILE` in `~/.claude/settings.json` when profile mode is used
22
+ 2. Removes stale Atoll credential/profile env from `~/.claude/settings.json` when profile mode is used
23
23
  3. Creates or updates the named Atoll CLI profile when `--profile` is provided
24
24
 
25
25
  Restart Claude Code and the `atoll-api` skill is available.
26
26
 
27
+ Use `@latest` in the `npx` command so npm does not reuse a stale cached installer. In profile mode, the installer prints its package version and a verification command; run `atoll --profile agent-a agent-context --json` if you need to confirm the profile was created.
28
+
27
29
  ## Using the skill
28
30
 
29
31
  Once installed, ask Claude anything task-related:
@@ -45,9 +47,9 @@ For terminal-first work, see [`@atollhq/cli`](https://www.npmjs.com/package/@ato
45
47
  ```bash
46
48
  npm install -g @atollhq/cli
47
49
  atoll auth login --profile agent-a --key sk_atoll_... --org-id org-uuid --project project-id --team team-id
48
- atoll heartbeat
49
- atoll issue list --json
50
- atoll agent-context
50
+ atoll --profile agent-a heartbeat
51
+ atoll --profile agent-a issue list --json
52
+ atoll --profile agent-a agent-context
51
53
  ```
52
54
 
53
55
  For multiple agents or orgs, use CLI auth profiles:
package/bin/install.mjs CHANGED
@@ -6,6 +6,7 @@ import { homedir } from 'node:os'
6
6
  import { fileURLToPath } from 'node:url'
7
7
 
8
8
  const __dirname = dirname(fileURLToPath(import.meta.url))
9
+ const packageJson = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'))
9
10
 
10
11
  function parseArgs(argv) {
11
12
  const args = {}
@@ -37,8 +38,8 @@ function parseArgs(argv) {
37
38
 
38
39
  function printUsage() {
39
40
  console.log(`
40
- Usage: npx @atollhq/skill-claude [--profile <name>] --key <api-key> --org <org-id> [--project <id>] [--team <id-or-slug>] [--base-url <url>]
41
- or: ATOLL_API_KEY=<api-key> ATOLL_ORG_ID=<org-id> npx @atollhq/skill-claude
41
+ Usage: npx @atollhq/skill-claude@latest [--profile <name>] --key <api-key> --org <org-id> [--project <id>] [--team <id-or-slug>] [--base-url <url>]
42
+ or: ATOLL_API_KEY=<api-key> ATOLL_ORG_ID=<org-id> npx @atollhq/skill-claude@latest
42
43
 
43
44
  Options:
44
45
  --profile Atoll CLI profile name to create/update.
@@ -72,6 +73,8 @@ if (args.help) {
72
73
  process.exit(0)
73
74
  }
74
75
 
76
+ console.log(`Running @atollhq/skill-claude installer v${packageJson.version}`)
77
+
75
78
  if (!args.key || !args.org) {
76
79
  console.error('Error: provide --key and --org, or set ATOLL_API_KEY and ATOLL_ORG_ID\n')
77
80
  printUsage()
@@ -112,7 +115,6 @@ function writeAtollProfile() {
112
115
  else delete profile.defaultTeam
113
116
  if (args.baseUrl) profile.baseUrl = args.baseUrl
114
117
  else delete profile.baseUrl
115
- config.activeProfile = args.profile
116
118
 
117
119
  mkdirSync(atollDir, { recursive: true })
118
120
  writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n')
@@ -128,14 +130,14 @@ cpSync(skillSrc, skillDest, { recursive: true })
128
130
  console.log(`Installed skill to ${skillDest}`)
129
131
 
130
132
  // 2. Configure ~/.claude/settings.json. Profile mode stores credentials only
131
- // in the Atoll CLI profile and keeps Claude's host env limited to profile
132
- // selection, removing stale credential/default env from earlier installs.
133
+ // in the Atoll CLI profile and removes stale credential/profile env from
134
+ // earlier installs so a new profile install does not become globally active.
133
135
  const settingsPath = join(homedir(), '.claude', 'settings.json')
134
136
  let settings = readJson(settingsPath)
135
137
 
136
138
  if (!settings.env) settings.env = {}
137
139
  if (args.profile) {
138
- settings.env.ATOLL_PROFILE = args.profile
140
+ delete settings.env.ATOLL_PROFILE
139
141
  delete settings.env.ATOLL_API_KEY
140
142
  delete settings.env.ATOLL_ORG_ID
141
143
  delete settings.env.ATOLL_PROJECT
@@ -160,14 +162,19 @@ writeAtollProfile()
160
162
 
161
163
  const configuredVars = []
162
164
  if (args.profile) {
163
- configuredVars.push('ATOLL_PROFILE')
165
+ console.log(`Removed stale Atoll env from ${settingsPath}`)
164
166
  } else {
165
167
  configuredVars.push('ATOLL_API_KEY', 'ATOLL_ORG_ID', 'ATOLL_ENV_MODE')
166
168
  if (args.project) configuredVars.push('ATOLL_PROJECT')
167
169
  if (args.team) configuredVars.push('ATOLL_TEAM')
168
170
  if (args.baseUrl) configuredVars.push('ATOLL_BASE_URL')
171
+ console.log(`Configured ${configuredVars.join(', ')} in ${settingsPath}`)
172
+ }
173
+ if (args.profile) {
174
+ console.log('No global Claude ATOLL_PROFILE was written.')
175
+ console.log(`Run profile-scoped commands with: atoll --profile ${args.profile} ...`)
176
+ console.log(`Verify the profile with: atoll --profile ${args.profile} agent-context --json`)
169
177
  }
170
- console.log(`Configured ${configuredVars.join(', ')} in ${settingsPath}`)
171
178
 
172
179
  console.log(`\nDone! Start Claude Code and the atoll-api skill will be available.`)
173
180
  console.log(`Try: "List my Atoll tasks" or "Check my heartbeat"`)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atollhq/skill-claude",
3
- "version": "0.4.8",
3
+ "version": "0.4.10",
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
@@ -186,7 +186,7 @@ CLI JSON conventions:
186
186
 
187
187
  When a human asks you to help automate a KPI from a third-party API, use this Atoll skill. If the current agent environment does not have the `atoll-api` skill installed, tell the user to install it before continuing or use the Atoll CLI/MCP tools directly if they are available.
188
188
 
189
- Agents may create draft syncs and validate proposed configs only after a human admin has allowlisted the exact destination host in Atoll. Human admins must review the draft in Atoll, enter secrets, dry-run, publish, disable, or run-now with snapshot writing.
189
+ Agents may create draft syncs and validate proposed configs only after a human admin has allowlisted the exact destination host in Atoll. Human admins must create or review the draft in Settings > Integrations > KPI syncs, edit supported request/extraction fields and secrets through structured UI, dry-run, publish, disable, or run-now with snapshot writing.
190
190
 
191
191
  ```bash
192
192
  atoll kpi sync validate <kpi-id> \
@@ -203,6 +203,7 @@ Roles: `owner`, `admin`, `member`, `guest`.
203
203
  | POST | `/api/orgs/{id}/kpis/{kpiId}/snapshots` | Record a snapshot |
204
204
  | GET | `/api/orgs/{id}/kpi-http-sync-policy` | List exact-host KPI HTTP sync allowlist policy |
205
205
  | POST | `/api/orgs/{id}/kpi-http-sync-policy` | Add an allowed exact host (human admin only) |
206
+ | GET | `/api/orgs/{id}/kpi-http-syncs` | List org-wide KPI HTTP sync review rows for Settings; admins get config/secret metadata, members get redacted status rows |
206
207
  | GET | `/api/orgs/{id}/kpis/{kpiId}/http-syncs` | List KPI HTTP syncs |
207
208
  | POST | `/api/orgs/{id}/kpis/{kpiId}/http-syncs` | Create a draft KPI HTTP sync |
208
209
  | PUT | `/api/orgs/{id}/kpis/{kpiId}/http-syncs` | Validate a proposed KPI HTTP sync config without storing or running it |
@@ -429,7 +430,7 @@ URL must be an HTTPS DNS hostname. IP literals, `localhost`, and `.local` hosts
429
430
  |--------|----------|-------------|
430
431
  | GET | `/api/orgs/{id}/agents` | List agents (owner/admin) |
431
432
  | GET | `/api/orgs/{id}/agents/manageable` | List agents the current human can manage |
432
- | POST | `/api/orgs/{id}/agents` | Create org, project-scoped, or personal agent |
433
+ | POST | `/api/orgs/{id}/agents` | Create org agent (`{ name, role?, setupScoped? }`), project-scoped agent (`{ name, projectIds }` or legacy `{ name, projectId, projectIds? }`), or personal agent (`{ name, personal: true }`) |
433
434
  | DELETE | `/api/orgs/{id}/agents/{agentId}` | Revoke manageable agent |
434
435
  | PATCH | `/api/orgs/{id}/agents/{agentId}/projects` | Replace project access for a manageable non-personal agent |
435
436
  | POST | `/api/orgs/{id}/projects/{projectId}/agents` | Grant selected manageable agents access to a project |
@@ -15,6 +15,7 @@
15
15
  - [Heartbeat Response](#heartbeat-response)
16
16
  - [Analytics Response](#analytics-response)
17
17
  - [Plan Limit Errors](#plan-limit-errors)
18
+ - [Agent Fields](#agent-fields)
18
19
  - [Enums](#enums)
19
20
 
20
21
  ---
@@ -73,6 +74,10 @@ Creation endpoints may return `402` when an org reaches its billing plan limit:
73
74
 
74
75
  `resource` is one of `humans`, `agents`, `activeProjects`, or `activeIssues`.
75
76
 
77
+ ## Agent Fields
78
+
79
+ 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`.
80
+
76
81
  ## Goal Fields
77
82
 
78
83
  ```json