Skip to content

feat: add skill install command for coding agent integrations#16

Merged
gnapse merged 1 commit into
mainfrom
feat/skill-install-command
Jan 23, 2026
Merged

feat: add skill install command for coding agent integrations#16
gnapse merged 1 commit into
mainfrom
feat/skill-install-command

Conversation

@gnapse
Copy link
Copy Markdown
Collaborator

@gnapse gnapse commented Jan 22, 2026

Summary

  • Add td skill install <agent> command to install skill files for coding agents
  • Support for Claude Code with claude-code agent (installs SKILL.md with Todoist CLI documentation)
  • Extensible architecture for future agent support

Commands

td skill list                         # List agents + install status
td skill install claude-code          # Install globally (~/.claude/skills/)
td skill install claude-code --local  # Install in project (./.claude/skills/)
td skill install claude-code --force  # Overwrite existing
td skill uninstall claude-code        # Remove global
td skill uninstall claude-code --local

Test plan

  • npm run build compiles successfully
  • npm test passes (580 tests)
  • td skill list shows available agents
  • td skill install claude-code creates skill file
  • td skill install claude-code errors without --force when file exists
  • td skill uninstall claude-code removes skill file

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@gnapse gnapse self-assigned this Jan 22, 2026
@gnapse gnapse added the 🙋 Ask PR PR must be reviewed before merging label Jan 22, 2026
@henningmu
Copy link
Copy Markdown
Contributor

In a follow-up PR, we could add support for more agents (get inspired by https://github.com/vercel-labs/add-skill) – I'd at least add Codex as it's used frequently at Doist 👍

@gnapse
Copy link
Copy Markdown
Collaborator Author

gnapse commented Jan 23, 2026

In a follow-up PR, we could add support for more agents (get inspired by https://github.com/vercel-labs/add-skill) – I'd at least add Codex as it's used frequently at Doist 👍

That is precisely the idea. That's why I architected it with multi-agent in mind. It's now up for others to add support for their agentic app of their choice.

@gnapse gnapse merged commit 5c544c0 into main Jan 23, 2026
3 checks passed
@gnapse gnapse deleted the feat/skill-install-command branch January 23, 2026 15:12
scottlovegrove added a commit that referenced this pull request May 12, 2026
)

## Summary

Bumps `@doist/cli-core` to **0.10.0** and migrates `td auth logout` +
`td auth status` onto the new `attachLogoutCommand` /
`attachStatusCommand` registrars that ship alongside the existing
`attachLoginCommand`
([cli-core#16](Doist/cli-core#16)).

- `TodoistTokenStore` gains `getLastClearResult()` so the logout
`onCleared` callback can surface keyring-fallback warnings — cli-core's
`TokenStore.clear: void` contract can't carry the `TokenStorageResult`
directly.
- `auth/index.ts` now creates a single shared `TodoistTokenStore`
instance used by login, logout, and status (login's wrapper takes the
store as a parameter instead of constructing its own).
- `attachTodoistStatusCommand` routes both the active-snapshot path
(`fetchLive`) and the unauthenticated path (`onNotAuthenticated`)
through one `gatherStatusData` helper so env-token mode and `--user
<ref>` (both return `null` from `TokenStore.active()` by the adapter's
documented contract) render byte-for-byte identically to the
persisted-default-user path.
- `auth logout` and `auth status` now accept `--ndjson` for free
(framework-registered) on top of `--json`. `auth status` previously only
had `--json`.
- `td auth token view` stays hand-rolled — its `--user <ref>` selector
depends on multi-user state the `TokenStore` adapter intentionally drops
from `active()`. cli-core PR #16 explicitly carves this out as a scope
note pending a multi-user store contract.

## Test plan

- [x] `npm run check` (oxlint + oxfmt) clean
- [x] `npm run type-check` clean
- [x] `npm test` — 1574/1574 across 60 files
- [x] `npm run build` clean
- [x] Smoke: `HOME=$(mktemp -d) td auth status` prints the legacy "No
API token found." CliError envelope
- [x] Smoke: `td auth {login,logout,status} --help` show
framework-registered `--json` / `--ndjson` flags
- [ ] Manual: full OAuth login → `td auth status` → `td auth status
--json` → `td auth logout` round-trip against a real account
- [ ] Manual: `TODOIST_API_TOKEN=… td auth status` shows `✓
Authenticated (TODOIST_API_TOKEN)` env-mode branch
- [ ] Manual: multi-user setup shows the "Other stored accounts"
enumeration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🙋 Ask PR PR must be reviewed before merging

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants