@atollhq/skill-codex 0.4.3 → 0.4.4
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 +5 -4
- package/bin/install.mjs +24 -11
- package/package.json +1 -1
- package/skill/SKILL.md +1 -0
- package/skill/references/api-endpoints.md +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ npx @atollhq/skill-codex --profile agent-a --key sk_atoll_... --org your-org-id
|
|
|
12
12
|
ATOLL_API_KEY=sk_atoll_... ATOLL_ORG_ID=your-org-id npx @atollhq/skill-codex
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Optional defaults: `--
|
|
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. When `--profile` is set, credentials and defaults are stored only in that named Atoll CLI profile. The installer does not write global `ATOLL_*` exports to `~/.zshrc` or `~/.bashrc`. Use `atoll --profile agent-a ...` for profile-scoped commands, or omit `--profile` to use env-var mode.
|
|
16
16
|
|
|
17
17
|
Get an API key from **Settings > Members > Add Agent** (or **Create API Key** for integrations) in the Atoll app.
|
|
18
18
|
|
|
@@ -21,10 +21,10 @@ This does five things:
|
|
|
21
21
|
1. Installs the `atoll-api` skill to `~/.codex/skills/atoll-api/`
|
|
22
22
|
2. Appends (or updates) an `# Atoll Integration` section in `~/.codex/AGENTS.md`
|
|
23
23
|
3. Copies API reference files to `~/.codex/atoll-references/`
|
|
24
|
-
4.
|
|
25
|
-
5.
|
|
24
|
+
4. Creates or updates the named Atoll CLI profile when `--profile` is provided
|
|
25
|
+
5. Appends Atoll env var exports to your shell profile (`~/.zshrc` or `~/.bashrc`) only when no profile is provided
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
For profile mode, Codex has the Atoll skill immediately and terminal commands can use `atoll --profile agent-a ...`. For env-var mode, open a fresh shell or `source` your profile.
|
|
28
28
|
|
|
29
29
|
## Using the integration
|
|
30
30
|
|
|
@@ -45,6 +45,7 @@ For terminal-first work, see [`@atollhq/cli`](https://www.npmjs.com/package/@ato
|
|
|
45
45
|
```bash
|
|
46
46
|
npm install -g @atollhq/cli
|
|
47
47
|
atoll auth login --profile agent-a --key sk_atoll_... --org-id org-uuid --project project-id --team team-id
|
|
48
|
+
atoll auth login --profile agent-a --key sk_atoll_... --org-id org-uuid --project project-id --no-team --no-base-url
|
|
48
49
|
atoll heartbeat
|
|
49
50
|
atoll issue list --json
|
|
50
51
|
atoll agent-context
|
package/bin/install.mjs
CHANGED
|
@@ -30,7 +30,7 @@ Usage: npx @atollhq/skill-codex [--profile <name>] --key <api-key> --org <org-id
|
|
|
30
30
|
or: ATOLL_API_KEY=<api-key> ATOLL_ORG_ID=<org-id> npx @atollhq/skill-codex
|
|
31
31
|
|
|
32
32
|
Options:
|
|
33
|
-
--profile Atoll CLI profile name to create/update.
|
|
33
|
+
--profile Atoll CLI profile name to create/update. Profile mode does not write shell env vars.
|
|
34
34
|
--key Atoll API key (sk_atoll_...). Defaults to ATOLL_API_KEY.
|
|
35
35
|
--org Organization ID. Defaults to ATOLL_ORG_ID.
|
|
36
36
|
--project Default project ID. Defaults to ATOLL_PROJECT.
|
|
@@ -44,12 +44,12 @@ Options:
|
|
|
44
44
|
Installs the Atoll integration for Codex CLI:
|
|
45
45
|
- Installs the atoll-api skill to ~/.codex/skills/atoll-api/
|
|
46
46
|
- Writes AGENTS.md with API reference to ~/.codex/
|
|
47
|
-
-
|
|
47
|
+
- Creates/updates an Atoll CLI profile when --profile is provided
|
|
48
|
+
- Otherwise writes Atoll env vars to your shell profile for env-var mode
|
|
48
49
|
`)
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
const args = parseArgs(process.argv)
|
|
52
|
-
args.profile ??= process.env.ATOLL_PROFILE
|
|
53
53
|
args.key ??= process.env.ATOLL_API_KEY
|
|
54
54
|
args.org ??= process.env.ATOLL_ORG_ID
|
|
55
55
|
if (args.clearProject) delete args.project
|
|
@@ -83,7 +83,7 @@ function readJson(path) {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
function writeAtollProfile() {
|
|
86
|
-
if (!args.profile) return
|
|
86
|
+
if (!args.profile) return null
|
|
87
87
|
|
|
88
88
|
const atollDir = join(homedir(), '.atoll')
|
|
89
89
|
const configPath = join(atollDir, 'config.json')
|
|
@@ -106,6 +106,7 @@ function writeAtollProfile() {
|
|
|
106
106
|
mkdirSync(atollDir, { recursive: true })
|
|
107
107
|
writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n')
|
|
108
108
|
console.log(`Configured Atoll CLI profile "${args.profile}" in ${configPath}`)
|
|
109
|
+
return configPath
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
// 1. Install the Codex skill to ~/.codex/skills/atoll-api/
|
|
@@ -122,7 +123,13 @@ console.log(`Installed Atoll skill to ${skillDest}`)
|
|
|
122
123
|
const skillMd = readFileSync(join(skillDir, 'SKILL.md'), 'utf-8')
|
|
123
124
|
// Strip YAML frontmatter for AGENTS.md
|
|
124
125
|
const body = skillMd.replace(/^---[\s\S]*?---\n*/, '')
|
|
126
|
+
const profileModeInstructions = args.profile ? `## Profile-scoped CLI configuration
|
|
127
|
+
|
|
128
|
+
This Codex install is scoped to Atoll CLI profile \`${args.profile}\`. No global \`ATOLL_API_KEY\`, \`ATOLL_ORG_ID\`, \`ATOLL_PROJECT\`, \`ATOLL_TEAM\`, or \`ATOLL_BASE_URL\` shell exports were written. Use \`atoll --profile ${args.profile} ...\` for direct Atoll CLI commands. Direct API snippets below use \`ATOLL_API_KEY\` / \`ATOLL_ORG_ID\` only when you intentionally choose env-var mode.
|
|
129
|
+
|
|
130
|
+
` : ''
|
|
125
131
|
const optionalCredentialLines = [
|
|
132
|
+
args.profile ? `- Atoll CLI profile: ${args.profile}` : null,
|
|
126
133
|
args.project ? `- Default project ID: ${args.project}` : null,
|
|
127
134
|
args.team ? `- Default team: ${args.team}` : null,
|
|
128
135
|
args.baseUrl ? `- Base URL: ${args.baseUrl}` : null,
|
|
@@ -130,11 +137,12 @@ const optionalCredentialLines = [
|
|
|
130
137
|
|
|
131
138
|
const agentsMd = `# Atoll Integration
|
|
132
139
|
|
|
140
|
+
${profileModeInstructions}
|
|
133
141
|
${body}
|
|
134
142
|
|
|
135
143
|
## Credentials
|
|
136
144
|
|
|
137
|
-
- API Key: set as ATOLL_API_KEY environment variable
|
|
145
|
+
- API Key: ${args.profile ? `stored in Atoll CLI profile \`${args.profile}\`` : 'set as ATOLL_API_KEY environment variable'}
|
|
138
146
|
- Org ID: ${args.org}${optionalCredentialLines ? `\n${optionalCredentialLines}` : ''}
|
|
139
147
|
`
|
|
140
148
|
|
|
@@ -162,7 +170,16 @@ for (const file of ['api-endpoints.md', 'api-fields.md']) {
|
|
|
162
170
|
}
|
|
163
171
|
console.log(`Copied API references to ${refsDir}`)
|
|
164
172
|
|
|
165
|
-
// 4.
|
|
173
|
+
// 4. In profile mode, keep credentials scoped to the Atoll CLI profile.
|
|
174
|
+
if (args.profile) {
|
|
175
|
+
writeAtollProfile()
|
|
176
|
+
console.log('No Atoll shell exports were written.')
|
|
177
|
+
console.log(`Run profile-scoped commands with: atoll --profile ${args.profile} ...`)
|
|
178
|
+
console.log(`\nDone! Codex has the Atoll skill installed, and the Atoll CLI profile "${args.profile}" is active.`)
|
|
179
|
+
process.exit(0)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// 4. Set env vars in shell profile for env-var mode.
|
|
166
183
|
const shell = process.env.SHELL || '/bin/bash'
|
|
167
184
|
const profilePath = shell.includes('zsh')
|
|
168
185
|
? join(homedir(), '.zshrc')
|
|
@@ -185,7 +202,7 @@ if (existsSync(profilePath)) {
|
|
|
185
202
|
if (!profile.includes('# Atoll (added by @atollhq/skill-codex)')) {
|
|
186
203
|
profile = `${profile.trimEnd()}\n\n# Atoll (added by @atollhq/skill-codex)\n`
|
|
187
204
|
}
|
|
188
|
-
|
|
205
|
+
profile = removeExport(profile, 'ATOLL_PROFILE')
|
|
189
206
|
profile = upsertExport(profile, 'ATOLL_API_KEY', args.key)
|
|
190
207
|
profile = upsertExport(profile, 'ATOLL_ORG_ID', args.org)
|
|
191
208
|
if (args.project) profile = upsertExport(profile, 'ATOLL_PROJECT', args.project)
|
|
@@ -195,10 +212,8 @@ if (existsSync(profilePath)) {
|
|
|
195
212
|
if (args.baseUrl) profile = upsertExport(profile, 'ATOLL_BASE_URL', args.baseUrl)
|
|
196
213
|
else profile = removeExport(profile, 'ATOLL_BASE_URL')
|
|
197
214
|
writeFileSync(profilePath, profile)
|
|
198
|
-
writeAtollProfile()
|
|
199
215
|
|
|
200
216
|
const configuredVars = []
|
|
201
|
-
if (args.profile) configuredVars.push('ATOLL_PROFILE')
|
|
202
217
|
configuredVars.push('ATOLL_API_KEY', 'ATOLL_ORG_ID')
|
|
203
218
|
if (args.project) configuredVars.push('ATOLL_PROJECT')
|
|
204
219
|
if (args.team) configuredVars.push('ATOLL_TEAM')
|
|
@@ -207,7 +222,6 @@ if (existsSync(profilePath)) {
|
|
|
207
222
|
} else {
|
|
208
223
|
const envLines = [
|
|
209
224
|
'# Atoll (added by @atollhq/skill-codex)',
|
|
210
|
-
args.profile ? `export ATOLL_PROFILE="${args.profile}"` : null,
|
|
211
225
|
`export ATOLL_API_KEY="${args.key}"`,
|
|
212
226
|
`export ATOLL_ORG_ID="${args.org}"`,
|
|
213
227
|
args.project ? `export ATOLL_PROJECT="${args.project}"` : null,
|
|
@@ -216,7 +230,6 @@ if (existsSync(profilePath)) {
|
|
|
216
230
|
].filter(Boolean)
|
|
217
231
|
const envBlock = `\n${envLines.join('\n')}\n`
|
|
218
232
|
writeFileSync(profilePath, envBlock)
|
|
219
|
-
writeAtollProfile()
|
|
220
233
|
console.log(`Created ${profilePath} with Atoll env vars`)
|
|
221
234
|
}
|
|
222
235
|
|
package/package.json
CHANGED
package/skill/SKILL.md
CHANGED
|
@@ -149,6 +149,7 @@ atoll feedback "The status error should list custom board statuses"
|
|
|
149
149
|
|
|
150
150
|
# Projects & milestones
|
|
151
151
|
atoll project list
|
|
152
|
+
atoll project delete <project-id> --confirm DELETE
|
|
152
153
|
atoll milestone list --project <project-id>
|
|
153
154
|
atoll milestone upsert --project <project-id> --name "v1.0" --date 2026-06-01
|
|
154
155
|
|
|
@@ -64,7 +64,7 @@ All endpoints require `Authorization: Bearer sk_atoll_...` header.
|
|
|
64
64
|
| POST | `/api/orgs/{id}/projects` | Create project (`{ name, description?, visibility?, color?, icon?, github_repo? }`) |
|
|
65
65
|
| GET | `/api/orgs/{id}/projects/{projectId}` | Get project with issues |
|
|
66
66
|
| PATCH | `/api/orgs/{id}/projects/{projectId}` | Update project (`{ name?, description?, status?, visibility?, color?, icon? }`) |
|
|
67
|
-
| DELETE | `/api/orgs/{id}/projects/{projectId}` |
|
|
67
|
+
| DELETE | `/api/orgs/{id}/projects/{projectId}` | Permanently delete project and all tasks in it (owner/admin; body must include `{ "confirmation": "DELETE" }`) |
|
|
68
68
|
|
|
69
69
|
Guest users only see projects they are assigned to.
|
|
70
70
|
|