trelly 0.1.1 → 0.2.0
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/.claude-plugin/plugin.json +15 -0
- package/.codex-plugin/plugin.json +25 -0
- package/.cursor-plugin/mcp.json +11 -0
- package/.cursor-plugin/plugin.json +15 -0
- package/.mcp.json +8 -0
- package/PLUGIN.md +85 -0
- package/PRIVACY.md +43 -0
- package/README.md +58 -9
- package/assets/logo.svg +6 -0
- package/assets/terminal.gif +0 -0
- package/bin/install-cursor-plugin-local.sh +15 -0
- package/package.json +18 -4
- package/skills/README.md +115 -0
- package/skills/trelly/SKILL.md +105 -0
- package/skills/trelly-mcp/SKILL.md +115 -0
- package/src/api/client.ts +18 -3
- package/src/cli/commands/boards.ts +6 -6
- package/src/cli/commands/cards.ts +19 -1
- package/src/cli/ui/app.tsx +263 -70
- package/src/index.test.ts +9 -0
- package/src/util/attachment.ts +29 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "trelly",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Trello CLI + MCP tools — boards, lists, cards, search, and raw API via trelly-mcp",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "brandonkramer",
|
|
7
|
+
"url": "https://github.com/brandonkramer"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/brandonkramer/trelly#readme",
|
|
10
|
+
"repository": "https://github.com/brandonkramer/trelly",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": ["trello", "trelly", "mcp", "kanban", "productivity"],
|
|
13
|
+
"skills": ["./skills"],
|
|
14
|
+
"mcpServers": "./.mcp.json"
|
|
15
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "trelly",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Trello CLI + MCP — boards, lists, cards, search, and raw API via trelly-mcp",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "brandonkramer",
|
|
7
|
+
"url": "https://github.com/brandonkramer"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/brandonkramer/trelly#readme",
|
|
10
|
+
"repository": "https://github.com/brandonkramer/trelly",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": ["trello", "trelly", "mcp", "kanban"],
|
|
13
|
+
"skills": "./skills/",
|
|
14
|
+
"mcpServers": "./.mcp.json",
|
|
15
|
+
"interface": {
|
|
16
|
+
"displayName": "Trelly",
|
|
17
|
+
"shortDescription": "Trello boards, cards, and search from Codex",
|
|
18
|
+
"longDescription": "Manage Trello with trelly-mcp tools and CLI guidance. Auth once with trelly auth login.",
|
|
19
|
+
"developerName": "brandonkramer",
|
|
20
|
+
"category": "Productivity",
|
|
21
|
+
"capabilities": ["Read", "Write"],
|
|
22
|
+
"websiteURL": "https://github.com/brandonkramer/trelly",
|
|
23
|
+
"privacyPolicyURL": "https://github.com/brandonkramer/trelly/blob/main/PRIVACY.md"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "trelly",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Trello boards, lists, cards, search, and comments via MCP — with agent skills for CLI and trelly-mcp tools.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "brandonkramer"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://github.com/brandonkramer/trelly#readme",
|
|
9
|
+
"repository": "https://github.com/brandonkramer/trelly",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"keywords": ["trello", "trelly", "mcp", "kanban", "productivity"],
|
|
12
|
+
"logo": "assets/logo.svg",
|
|
13
|
+
"skills": "./skills/",
|
|
14
|
+
"mcpServers": "mcp.json"
|
|
15
|
+
}
|
package/.mcp.json
ADDED
package/PLUGIN.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Trelly agent plugin
|
|
2
|
+
|
|
3
|
+
Marketplace-facing overview for **Cursor**, **Claude Code**, and **Codex**. The npm
|
|
4
|
+
package root is the plugin bundle (skills + MCP + launcher scripts).
|
|
5
|
+
|
|
6
|
+
## What it does
|
|
7
|
+
|
|
8
|
+
- **Skills** teach agents when to use the CLI vs MCP, how auth works, and archive vs
|
|
9
|
+
delete safety (`skills/trelly`, `skills/trelly-mcp`).
|
|
10
|
+
- **MCP** exposes 27 Trello tools via stdio (`trelly-mcp` → `src/mcp/server.ts`).
|
|
11
|
+
- **CLI** (`trelly`) is optional for humans/scripts; the plugin does not require global
|
|
12
|
+
npm install if the IDE loads the plugin from this repository (MCP uses bundled
|
|
13
|
+
`bin/trelly-mcp`).
|
|
14
|
+
|
|
15
|
+
## Prerequisites (end users)
|
|
16
|
+
|
|
17
|
+
1. **Node 22+** (or Bun) — `bin/run-ts` falls back to bundled `tsx` for MCP/CLI.
|
|
18
|
+
2. One-time Trello auth:
|
|
19
|
+
```bash
|
|
20
|
+
trelly auth setup # API key from https://trello.com/power-ups/admin
|
|
21
|
+
trelly auth login # browser OAuth → ~/.config/trelly/config.json
|
|
22
|
+
```
|
|
23
|
+
3. macOS or Linux (`package.json` `"os"`).
|
|
24
|
+
|
|
25
|
+
## Plugin layout
|
|
26
|
+
|
|
27
|
+
| Path | Purpose |
|
|
28
|
+
|------|---------|
|
|
29
|
+
| `.cursor-plugin/plugin.json` | Cursor manifest |
|
|
30
|
+
| `.cursor-plugin/mcp.json` | Cursor MCP (bundled `bin/trelly-mcp`) |
|
|
31
|
+
| `.claude-plugin/plugin.json` | Claude Code manifest |
|
|
32
|
+
| `.mcp.json` | Claude/Codex MCP (`${CLAUDE_PLUGIN_ROOT}/bin/trelly-mcp`) |
|
|
33
|
+
| `.codex-plugin/plugin.json` | Codex manifest |
|
|
34
|
+
| `skills/` | Agent skills (source of truth) |
|
|
35
|
+
| `assets/logo.svg` | Plugin logo |
|
|
36
|
+
| [PRIVACY.md](PRIVACY.md) | Data handling |
|
|
37
|
+
|
|
38
|
+
## Test locally (Cursor)
|
|
39
|
+
|
|
40
|
+
Symlinks are unreliable in Cursor plugins — **copy** the repo:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
./bin/install-cursor-plugin-local.sh
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Then **Developer: Reload Window** in Cursor. Verify MCP **trelly** is connected and skills
|
|
47
|
+
appear. Run `trelly auth list` in a terminal if tools return auth errors.
|
|
48
|
+
|
|
49
|
+
## Test locally (Claude Code)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
claude plugin install /absolute/path/to/trelly
|
|
53
|
+
# or after npm install -g trelly:
|
|
54
|
+
claude plugin install "$(npm root -g)/trelly"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Reload Claude Code. Confirm MCP server **trelly** and skills load.
|
|
58
|
+
|
|
59
|
+
## Submit to official marketplaces
|
|
60
|
+
|
|
61
|
+
| Platform | Action |
|
|
62
|
+
|----------|--------|
|
|
63
|
+
| **Cursor** | [cursor.com/marketplace/publish](https://cursor.com/marketplace/publish) — repo `https://github.com/brandonkramer/trelly` |
|
|
64
|
+
| **Claude Code** | [clau.de/plugin-directory-submission](https://clau.de/plugin-directory-submission) — same repo |
|
|
65
|
+
|
|
66
|
+
Requirements:
|
|
67
|
+
|
|
68
|
+
- Open source (MIT) ✅
|
|
69
|
+
- Valid manifests and skill frontmatter ✅
|
|
70
|
+
- Logo at `assets/logo.svg` ✅
|
|
71
|
+
- Privacy summary in [PRIVACY.md](PRIVACY.md) ✅
|
|
72
|
+
- Manual review on updates (Cursor); Anthropic review for official directory
|
|
73
|
+
|
|
74
|
+
After Claude approval, users install with:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
/plugin install trelly@claude-plugins-official
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## MCP safety notes for reviewers
|
|
81
|
+
|
|
82
|
+
- **`trello_card_archive`** / **`trello_board_archive`** — reversible (Trello `closed=true`)
|
|
83
|
+
- **`trello_card_delete`** — permanent; marked `destructiveHint` in MCP registration
|
|
84
|
+
- No MCP board-delete tool
|
|
85
|
+
- Auth never appears in URLs; tokens in `Authorization` header only
|
package/PRIVACY.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Trelly privacy
|
|
2
|
+
|
|
3
|
+
Trelly is a local CLI and MCP plugin for [Trello](https://trello.com). This document
|
|
4
|
+
describes data handling for marketplace review and end users.
|
|
5
|
+
|
|
6
|
+
## What runs locally
|
|
7
|
+
|
|
8
|
+
- **CLI (`trelly`)** and **MCP server (`trelly-mcp`)** run on your machine as child
|
|
9
|
+
processes of your terminal or IDE.
|
|
10
|
+
- **Credentials** (API key + token) are stored only in `~/.config/trelly/config.json`
|
|
11
|
+
(file mode `600`). The plugin does not upload credentials to any server operated by
|
|
12
|
+
the trelly author.
|
|
13
|
+
- **Agent skills** are static markdown instructions bundled in the package. They contain
|
|
14
|
+
no telemetry or phone-home logic.
|
|
15
|
+
|
|
16
|
+
## What leaves your machine
|
|
17
|
+
|
|
18
|
+
- API requests go **directly to Trello** (`https://api.trello.com`) using your token in
|
|
19
|
+
the `Authorization` header. Trello’s privacy policy applies to that data:
|
|
20
|
+
[Atlassian Privacy Policy](https://www.atlassian.com/legal/privacy-policy).
|
|
21
|
+
- The trelly package does **not** collect analytics, crash reports, or usage metrics.
|
|
22
|
+
|
|
23
|
+
## MCP and IDE plugins
|
|
24
|
+
|
|
25
|
+
- Cursor, Claude Code, and Codex plugins bundle the same `trelly-mcp` stdio server and
|
|
26
|
+
skills. Enabling the plugin lets the IDE spawn `trelly-mcp`; tool calls follow the same
|
|
27
|
+
Trello API path as the CLI.
|
|
28
|
+
- IDE vendors (Cursor, Anthropic, OpenAI) may log prompts or tool traffic according to
|
|
29
|
+
their own product policies. That is outside trelly’s control.
|
|
30
|
+
|
|
31
|
+
## Your responsibilities
|
|
32
|
+
|
|
33
|
+
- Register your own Trello Power-Up API key at
|
|
34
|
+
[power-ups/admin](https://trello.com/power-ups/admin).
|
|
35
|
+
- Treat `~/.config/trelly/config.json` like a password file.
|
|
36
|
+
- Prefer **`trello_*_archive`** MCP tools over **`trello_card_delete`** unless permanent
|
|
37
|
+
deletion is intended.
|
|
38
|
+
|
|
39
|
+
## Contact
|
|
40
|
+
|
|
41
|
+
Issues and security reports: [github.com/brandonkramer/trelly/issues](https://github.com/brandonkramer/trelly/issues)
|
|
42
|
+
|
|
43
|
+
License: MIT — see [LICENSE](LICENSE).
|
package/README.md
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
<p>
|
|
2
|
+
<img src="assets/logo.svg" alt="Trelly" width="128" height="128" />
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# Trelly -- Trello CLI
|
|
2
6
|
|
|
3
7
|
Fast Trello CLI + MCP server ([npm](https://www.npmjs.com/package/trelly): `npm install -g trelly`).
|
|
4
8
|
**Human, Trello-styled output by default**; add `--json` for scripts and automation.
|
|
5
9
|
Commands: **`trelly`** (CLI) and **`trelly-mcp`** (MCP server).
|
|
6
10
|
|
|
7
|
-

|
|
8
12
|
|
|
9
13
|
Boards, lists, cards, checklists, labels, custom fields, search, webhooks, multi-profile
|
|
10
14
|
auth, interactive kanban TUI, raw `trelly api` escape hatch.
|
|
11
15
|
|
|
12
|
-
##
|
|
16
|
+
## Install
|
|
13
17
|
|
|
14
18
|
```bash
|
|
15
|
-
npm install -g trelly
|
|
16
|
-
|
|
17
|
-
trelly
|
|
18
|
-
trelly
|
|
19
|
+
npm install -g trelly # npm (Node 22+)
|
|
20
|
+
brew install brandonkramer/tap/trelly # Homebrew
|
|
21
|
+
bunx trelly # run without installing (Bun)
|
|
22
|
+
npx trelly # run without installing (Node 22+)
|
|
19
23
|
```
|
|
20
24
|
|
|
21
25
|
From source (repo [brandonkramer/trelly](https://github.com/brandonkramer/trelly)):
|
|
@@ -32,6 +36,24 @@ No Bun? `npm install` in the clone — tsx is the fallback runtime.
|
|
|
32
36
|
|
|
33
37
|
Optional: `bun link` / `npm link`, or add `bin/` to `PATH`.
|
|
34
38
|
|
|
39
|
+
### Updating
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
npm update -g trelly # or: npm install -g trelly@latest
|
|
43
|
+
brew upgrade trelly # Homebrew
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Auth in `~/.config/trelly/config.json` is kept across upgrades. Reload your IDE after
|
|
47
|
+
updating if you use the agent plugin MCP server.
|
|
48
|
+
|
|
49
|
+
## Quick start
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
trelly auth setup # once: API key from power-ups/admin
|
|
53
|
+
trelly auth login # browser → Allow
|
|
54
|
+
trelly boards list
|
|
55
|
+
```
|
|
56
|
+
|
|
35
57
|
## Output
|
|
36
58
|
|
|
37
59
|
| Mode | Command | stdout |
|
|
@@ -56,6 +78,8 @@ trelly ui BOARD_ID # jump straight to a board
|
|
|
56
78
|
|
|
57
79
|
Requires a TTY. Keys: **arrows** / **hjkl** move focus, **Enter** card detail, **r** refresh, **q** / **Esc** back or quit.
|
|
58
80
|
|
|
81
|
+
In card detail: **↑↓** move over attachments and comments, **Enter** opens the focused attachment in your browser or expands/collapses the focused comment, **c** new comment, **r** reply to the focused comment (prefills `@author`), **a** attach a file path or URL, **Esc** back.
|
|
82
|
+
|
|
59
83
|
See the demo above or run `trelly --help` for all subcommands.
|
|
60
84
|
|
|
61
85
|
## Auth
|
|
@@ -93,6 +117,7 @@ trelly --profile work boards lists BOARD_ID
|
|
|
93
117
|
trelly cards create --list LIST_ID --name "Ship feature"
|
|
94
118
|
trelly cards comments CARD_ID
|
|
95
119
|
trelly cards comment CARD_ID --text "Shipped"
|
|
120
|
+
trelly cards add-attachment CARD_ID --file screenshot.png # or --url https://…
|
|
96
121
|
trelly search "customer onboarding"
|
|
97
122
|
trelly api -X PUT --path /cards/CARD_ID --query idList=LIST_ID
|
|
98
123
|
trelly api -X POST --path /cards --body '{"idList":"LIST_ID","name":"Hi"}'
|
|
@@ -111,7 +136,7 @@ Top-level: `auth` · `boards` · `lists` · `cards` · `checklists` · `labels`
|
|
|
111
136
|
| **auth** | `setup` · `login` · `list` · `use` · `logout` · `url` |
|
|
112
137
|
| **boards** | `list` · `get` · `create` · `update` · `archive` · `delete` · `lists` · `cards` · `labels` · `members` · `actions` · `custom-fields` |
|
|
113
138
|
| **lists** | `get` · `create` · `update` · `archive` · `cards` |
|
|
114
|
-
| **cards** | `get` · `list` · `create` · `update` · `move` · `comments` · `comment` · `archive` · `delete` · `members` · `add-member` · `remove-member` · `labels` · `add-label` · `remove-label` · `actions` · `attachments` · `add-attachment` · `custom-fields` |
|
|
139
|
+
| **cards** | `get` · `list` · `create` · `update` · `move` · `comments` · `comment` · `archive` · `delete` · `members` · `add-member` · `remove-member` · `labels` · `add-label` · `remove-label` · `actions` · `attachments` · `add-attachment` · `delete-attachment` · `custom-fields` |
|
|
115
140
|
| **checklists** | `get` · `create` · `update` · `delete` · `add-item` · `update-item` · `delete-item` |
|
|
116
141
|
| **labels** | `get` · `create` · `update` · `delete` |
|
|
117
142
|
| **custom-fields** | `get` · `create` · `update` · `delete` · `set-item` |
|
|
@@ -184,7 +209,31 @@ bun run typecheck && bun test && bun run lint
|
|
|
184
209
|
|
|
185
210
|
CI runs the same via `bun install --frozen-lockfile`. See `AGENTS.md` for conventions.
|
|
186
211
|
|
|
187
|
-
|
|
212
|
+
## Agent skills & plugins
|
|
213
|
+
|
|
214
|
+
Shipped in the npm package for **end users** — skills plus IDE plugin manifests. Full
|
|
215
|
+
plugin docs: [PLUGIN.md](PLUGIN.md) · Privacy: [PRIVACY.md](PRIVACY.md) ·
|
|
216
|
+
[skills/README.md](skills/README.md).
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
npm install -g trelly
|
|
220
|
+
trelly auth setup && trelly auth login
|
|
221
|
+
|
|
222
|
+
pi install npm:trelly
|
|
223
|
+
claude plugin install "$(npm root -g)/trelly"
|
|
224
|
+
./bin/install-cursor-plugin-local.sh # Cursor local test (copy, not symlink)
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
MCP-only (no plugin): add `trelly-mcp` to `~/.cursor/mcp.json` — [mcp.example.json](mcp.example.json).
|
|
228
|
+
|
|
229
|
+
### Marketplace submission
|
|
230
|
+
|
|
231
|
+
| Platform | Submit |
|
|
232
|
+
|----------|--------|
|
|
233
|
+
| **Cursor** | [cursor.com/marketplace/publish](https://cursor.com/marketplace/publish) → `https://github.com/brandonkramer/trelly` |
|
|
234
|
+
| **Claude Code** | [clau.de/plugin-directory-submission](https://clau.de/plugin-directory-submission) |
|
|
235
|
+
|
|
236
|
+
Open source (MIT). After Claude listing: `/plugin install trelly@claude-plugins-official`.
|
|
188
237
|
|
|
189
238
|
## License
|
|
190
239
|
|
package/assets/logo.svg
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Trelly">
|
|
2
|
+
<rect width="128" height="128" rx="28" fill="#0A7EA4"/>
|
|
3
|
+
<rect x="22" y="30" width="24" height="68" rx="5" fill="#fff" opacity="0.92"/>
|
|
4
|
+
<rect x="52" y="30" width="24" height="50" rx="5" fill="#fff" opacity="0.78"/>
|
|
5
|
+
<rect x="82" y="30" width="24" height="60" rx="5" fill="#fff" opacity="0.86"/>
|
|
6
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copy trelly into ~/.cursor/plugins/local/trelly for marketplace preflight testing.
|
|
3
|
+
# Cursor plugin symlinks are unreliable — use cp -R (see PLUGIN.md).
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
7
|
+
DEST="${HOME}/.cursor/plugins/local/trelly"
|
|
8
|
+
|
|
9
|
+
rm -rf "$DEST"
|
|
10
|
+
mkdir -p "${HOME}/.cursor/plugins/local"
|
|
11
|
+
cp -R "$ROOT" "$DEST"
|
|
12
|
+
chmod +x "$DEST/bin/trelly" "$DEST/bin/trelly-mcp" "$DEST/bin/run-ts" 2>/dev/null || true
|
|
13
|
+
|
|
14
|
+
echo "Copied trelly plugin to: $DEST"
|
|
15
|
+
echo "Next: reload Cursor (Developer: Reload Window) and check MCP + skills."
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trelly",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "trelly — fast Trello CLI with multi-profile auth, MCP server, and kanban TUI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -11,8 +11,14 @@
|
|
|
11
11
|
"trelly",
|
|
12
12
|
"mcp",
|
|
13
13
|
"kanban",
|
|
14
|
-
"automation"
|
|
14
|
+
"automation",
|
|
15
|
+
"pi-package"
|
|
15
16
|
],
|
|
17
|
+
"pi": {
|
|
18
|
+
"skills": [
|
|
19
|
+
"./skills"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
16
22
|
"repository": {
|
|
17
23
|
"type": "git",
|
|
18
24
|
"url": "https://github.com/brandonkramer/trelly.git"
|
|
@@ -26,7 +32,15 @@
|
|
|
26
32
|
],
|
|
27
33
|
"files": [
|
|
28
34
|
"bin/",
|
|
29
|
-
"src/"
|
|
35
|
+
"src/",
|
|
36
|
+
"skills/",
|
|
37
|
+
"assets/",
|
|
38
|
+
".claude-plugin/",
|
|
39
|
+
".codex-plugin/",
|
|
40
|
+
".cursor-plugin/",
|
|
41
|
+
".mcp.json",
|
|
42
|
+
"PLUGIN.md",
|
|
43
|
+
"PRIVACY.md"
|
|
30
44
|
],
|
|
31
45
|
"bin": {
|
|
32
46
|
"trelly": "./bin/trelly",
|
|
@@ -40,7 +54,7 @@
|
|
|
40
54
|
"lint": "biome check .",
|
|
41
55
|
"fmt": "biome format --write .",
|
|
42
56
|
"fmt:check": "biome check .",
|
|
43
|
-
"postinstall": "chmod +x bin/trelly bin/trelly-mcp bin/run-ts 2>/dev/null || true",
|
|
57
|
+
"postinstall": "chmod +x bin/trelly bin/trelly-mcp bin/run-ts bin/install-cursor-plugin-local.sh 2>/dev/null || true",
|
|
44
58
|
"prepublishOnly": "bun run typecheck && bun test && bun run lint"
|
|
45
59
|
},
|
|
46
60
|
"engines": {
|
package/skills/README.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# trelly agent skills & plugins
|
|
2
|
+
|
|
3
|
+
These ship **inside the npm package** (`npm install -g trelly`). They teach your AI agent
|
|
4
|
+
how to use the CLI and MCP — for anyone using trelly on their machine, not for people
|
|
5
|
+
developing this repo.
|
|
6
|
+
|
|
7
|
+
| Skill | Use when |
|
|
8
|
+
|-------|----------|
|
|
9
|
+
| [trelly](trelly/SKILL.md) | Terminal / bash: `trelly boards list`, auth, `--json` |
|
|
10
|
+
| [trelly-mcp](trelly-mcp/SKILL.md) | IDE agent with MCP wired: tool names, envelopes, safety |
|
|
11
|
+
|
|
12
|
+
**One copy of the content:** `skills/trelly/` and `skills/trelly-mcp/` in the installed
|
|
13
|
+
package. Plugins and Pi load from there — you don't maintain separate copies.
|
|
14
|
+
|
|
15
|
+
## Prerequisite
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g trelly # or: brew install brandonkramer/tap/trelly
|
|
19
|
+
trelly auth setup
|
|
20
|
+
trelly auth login
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Pi
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pi install npm:trelly
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Loads both skills from the package manifest (`package.json` → `"pi": { "skills": ["./skills"] }`).
|
|
30
|
+
Pi has no built-in MCP — use the **trelly** skill for CLI/bash, or wire MCP in Cursor/Claude
|
|
31
|
+
below.
|
|
32
|
+
|
|
33
|
+
## Claude Code
|
|
34
|
+
|
|
35
|
+
Install the plugin from your global npm package (skills + MCP in one step):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
claude plugin install "$(npm root -g)/trelly"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Reload Claude Code. The plugin starts `trelly-mcp` and loads `skills/trelly` +
|
|
42
|
+
`skills/trelly-mcp`.
|
|
43
|
+
|
|
44
|
+
**MCP only** (no plugin skills): add to your Claude MCP config using `trelly-mcp` on PATH
|
|
45
|
+
(see [trelly-mcp/SKILL.md](trelly-mcp/SKILL.md)).
|
|
46
|
+
|
|
47
|
+
## Codex
|
|
48
|
+
|
|
49
|
+
Codex uses `.codex-plugin/plugin.json` (same layout as Claude: skills + `.mcp.json` at
|
|
50
|
+
package root). Install via a **marketplace** — see
|
|
51
|
+
[Codex plugin docs](https://developers.openai.com/codex/plugins/build).
|
|
52
|
+
|
|
53
|
+
After `npm install -g trelly`:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
mkdir -p ~/.agents/plugins
|
|
57
|
+
ln -sf "$(npm root -g)/trelly" ~/.agents/plugins/trelly
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`~/.agents/plugins/marketplace.json`:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"name": "local-trelly",
|
|
65
|
+
"interface": { "displayName": "Trelly" },
|
|
66
|
+
"plugins": [
|
|
67
|
+
{
|
|
68
|
+
"name": "trelly",
|
|
69
|
+
"source": {
|
|
70
|
+
"source": "local",
|
|
71
|
+
"path": "./trelly"
|
|
72
|
+
},
|
|
73
|
+
"policy": {
|
|
74
|
+
"installation": "AVAILABLE",
|
|
75
|
+
"authentication": "ON_INSTALL"
|
|
76
|
+
},
|
|
77
|
+
"category": "Productivity"
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Restart Codex, run `/plugins`, install **Trelly**, then `trelly auth setup && trelly auth login`
|
|
84
|
+
once. Codex sets `${PLUGIN_ROOT}` (and `${CLAUDE_PLUGIN_ROOT}`) so bundled MCP finds
|
|
85
|
+
`bin/trelly-mcp`.
|
|
86
|
+
|
|
87
|
+
For team/repo distribution, publish a marketplace with a `git-subdir` entry pointing at
|
|
88
|
+
this package, or use `codex plugin marketplace add owner/repo`.
|
|
89
|
+
|
|
90
|
+
## Cursor
|
|
91
|
+
|
|
92
|
+
**Plugin (skills + MCP):**
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
./bin/install-cursor-plugin-local.sh # from repo clone (copy — symlinks break in Cursor)
|
|
96
|
+
# or after npm install -g trelly:
|
|
97
|
+
cp -R "$(npm root -g)/trelly" ~/.cursor/plugins/local/trelly
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Restart Cursor / reload MCP.
|
|
101
|
+
|
|
102
|
+
**MCP only:** copy [mcp.example.json](../mcp.example.json) into `~/.cursor/mcp.json`.
|
|
103
|
+
|
|
104
|
+
## What each piece does
|
|
105
|
+
|
|
106
|
+
| Piece | Role |
|
|
107
|
+
|-------|------|
|
|
108
|
+
| `skills/` | Agent instructions (CLI vs MCP, auth, safety) — **the content** |
|
|
109
|
+
| `.claude-plugin/` + `.mcp.json` | Claude Code plugin manifest + MCP wiring |
|
|
110
|
+
| `.codex-plugin/` + `.mcp.json` | Codex plugin manifest + MCP wiring |
|
|
111
|
+
| `.cursor-plugin/` | Cursor plugin manifest + MCP wiring |
|
|
112
|
+
| `package.json` `"pi"` | Pi package manifest (skills path) |
|
|
113
|
+
|
|
114
|
+
Skills tell the agent *how* to use trelly. MCP config tells the IDE *how to spawn*
|
|
115
|
+
`trelly-mcp`. After `npm install -g trelly`, both bins are on PATH.
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trelly
|
|
3
|
+
description: >-
|
|
4
|
+
Operate the trelly Trello CLI (npm trelly; bins trelly/trello): auth setup/login,
|
|
5
|
+
human vs --json output, boards/lists/cards, search, trello ui, trello api. Use when
|
|
6
|
+
the user asks to run trelly/trello commands, script Trello from the terminal, or
|
|
7
|
+
automate Trello with trelly.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# trelly
|
|
11
|
+
|
|
12
|
+
Fast Trello CLI (`npm install -g trelly`). **Human Trello-styled output by default**;
|
|
13
|
+
**`--json` for scripts**. Commands: **`trelly`** or **`trello`** (same binary).
|
|
14
|
+
|
|
15
|
+
## Prerequisites
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npm install -g trelly
|
|
19
|
+
trelly auth setup # once: API key from https://trello.com/power-ups/admin
|
|
20
|
+
trelly auth login # browser Allow → saves token
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
From source: clone [brandonkramer/trelly](https://github.com/brandonkramer/trelly),
|
|
24
|
+
`bun install`, then `./bin/trelly auth setup`.
|
|
25
|
+
|
|
26
|
+
Auth notes (common confusion):
|
|
27
|
+
|
|
28
|
+
- Power-Up admin is **developer registration**, not installing a Power-Up on a board.
|
|
29
|
+
- Pick any workspace you **admin** (personal is fine) — does not limit which boards you can use.
|
|
30
|
+
- After login the CLI is **you** on Trello (member permissions, not board admin).
|
|
31
|
+
|
|
32
|
+
Credentials: `~/.config/trelly/config.json` (migrates from `~/.config/trello-cli/`; never read/log/commit).
|
|
33
|
+
|
|
34
|
+
## Output contract
|
|
35
|
+
|
|
36
|
+
| Goal | Flags |
|
|
37
|
+
|------|--------|
|
|
38
|
+
| Human (default) | *(none)* |
|
|
39
|
+
| JSON envelope | `--json` → `{ ok, profile, data }` or `{ ok: false, error, ... }` |
|
|
40
|
+
| Pretty JSON | `--json --pretty` |
|
|
41
|
+
|
|
42
|
+
- **Scripts:** always `--json` if parsing stdout.
|
|
43
|
+
- **`--pretty` alone** does not emit JSON; it only indents `--json` output.
|
|
44
|
+
- Errors: red `✗` in human mode; exit code `1`.
|
|
45
|
+
|
|
46
|
+
## Common commands
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
trelly boards list
|
|
50
|
+
trelly --json boards list | jq '.data[].name'
|
|
51
|
+
trelly boards lists BOARD_ID
|
|
52
|
+
trelly boards cards BOARD_ID # or: api GET /boards/{id}/cards
|
|
53
|
+
trelly lists cards LIST_ID
|
|
54
|
+
trelly cards get CARD_ID --fields name,desc
|
|
55
|
+
trelly cards comments CARD_ID
|
|
56
|
+
trelly cards create --list LIST_ID --name "Task"
|
|
57
|
+
trelly cards move CARD_ID --list OTHER_LIST_ID
|
|
58
|
+
trelly cards comment CARD_ID --text "Done"
|
|
59
|
+
trelly search "query"
|
|
60
|
+
trelly ui BOARD_ID # interactive kanban (TTY required)
|
|
61
|
+
trelly auth list
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Global: `-p, --profile <name>` (or `TRELLO_PROFILE`).
|
|
65
|
+
|
|
66
|
+
## Raw API escape hatch
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
trelly api -X GET --path /members/me
|
|
70
|
+
trelly api -X PUT --path /cards/CARD_ID --query idList=LIST_ID
|
|
71
|
+
trelly api -X POST --path /cards --body '{"idList":"LIST_ID","name":"Hi"}'
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Request body flag is **`--body`** (not `--json` — that flag is global output).
|
|
75
|
+
|
|
76
|
+
## Custom fields (list-type)
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
trelly api -X PUT \
|
|
80
|
+
--path "/cards/CARD_ID/customField/FIELD_ID/item" \
|
|
81
|
+
--body '{"idValue":"OPTION_ID"}'
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Safety
|
|
85
|
+
|
|
86
|
+
| Action | CLI | Reversible? |
|
|
87
|
+
|--------|-----|-------------|
|
|
88
|
+
| Close | `cards archive`, `boards archive` | Yes (Trello UI) |
|
|
89
|
+
| Destroy | `cards delete`, `boards delete` | **No** |
|
|
90
|
+
|
|
91
|
+
Prefer **archive** unless the user explicitly wants permanent deletion.
|
|
92
|
+
|
|
93
|
+
## Multi-profile
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
trelly auth login --profile work
|
|
97
|
+
trelly -p work boards list
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Env override: `TRELLO_APP_API_KEY`, `TRELLO_API_KEY`, `TRELLO_TOKEN`, `TRELLO_PROFILE`.
|
|
101
|
+
|
|
102
|
+
## MCP vs CLI
|
|
103
|
+
|
|
104
|
+
- **CLI:** human or `--json` on stdout.
|
|
105
|
+
- **MCP:** separate stdio server (`trelly-mcp`) — see **trelly-mcp** skill.
|