trackly-cli 0.1.9 → 0.1.12
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 +20 -6
- package/bin/trackly +36 -5
- package/package.json +2 -2
- package/server.json +17 -3
package/README.md
CHANGED
|
@@ -7,19 +7,21 @@
|
|
|
7
7
|
|
|
8
8
|
The only job tracking CLI built for AI agents.
|
|
9
9
|
|
|
10
|
-
Search
|
|
10
|
+
Search 128,000+ jobs across 1,900+ companies and 40+ ATS types. Track applications, get AI-powered recommendations, and manage your job search -- from the terminal or through Claude Code, Cursor, and other MCP-compatible AI agents.
|
|
11
11
|
|
|
12
12
|
## Quick Start
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
npm install -g trackly-cli
|
|
15
|
+
npm install -g trackly-cli # may need: sudo npm install -g trackly-cli
|
|
16
16
|
trackly login
|
|
17
17
|
trackly jobs --function product
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
+
> **Prerequisites:** [Node.js 18+](https://nodejs.org/) (LTS recommended). On macOS with the official `.pkg` installer, global npm installs may require `sudo`.
|
|
21
|
+
|
|
20
22
|
## At a Glance
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
1,900+ companies | 128K+ jobs | 40+ ATS types | CLI + MCP | 10 MCP tools
|
|
23
25
|
|
|
24
26
|
## CLI Commands
|
|
25
27
|
|
|
@@ -39,6 +41,12 @@ trackly apply 1234 # Mark as applied
|
|
|
39
41
|
trackly save 1234 # Save a job
|
|
40
42
|
trackly dismiss 1234 # Dismiss a job
|
|
41
43
|
trackly ask "PM jobs in SF" # Natural language search (20/day)
|
|
44
|
+
trackly contacts "Stripe" # Search contacts at a company
|
|
45
|
+
trackly brief 1234 # Get network brief for a job
|
|
46
|
+
trackly referral start 1234 # Start a referral campaign
|
|
47
|
+
trackly referral status 1234 # Check referral campaign status
|
|
48
|
+
trackly company-brief 243 # Get company brief (--refresh to regenerate)
|
|
49
|
+
trackly company-workspace 243 # Full company workspace view
|
|
42
50
|
trackly api-key create # Generate API key
|
|
43
51
|
trackly api-key list # List API keys
|
|
44
52
|
trackly config # Show current CLI config
|
|
@@ -55,7 +63,13 @@ Add `--json` to any command for JSON output. Use `--api-key <key>` or `--base-ur
|
|
|
55
63
|
### One-liner (recommended)
|
|
56
64
|
|
|
57
65
|
```bash
|
|
58
|
-
claude mcp add
|
|
66
|
+
claude mcp add --scope user trackly -- trackly mcp
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Or equivalently:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
claude mcp add-json --scope user trackly '{"command":"trackly","args":["mcp"]}'
|
|
59
73
|
```
|
|
60
74
|
|
|
61
75
|
### Claude Code manual config
|
|
@@ -181,7 +195,7 @@ Install trackly-cli (`npm install -g trackly-cli`), authenticate with `trackly l
|
|
|
181
195
|
|
|
182
196
|
**What MCP servers exist for job searching?**
|
|
183
197
|
|
|
184
|
-
trackly-cli includes a built-in MCP server with 10 tools for job search, company lookup, and application tracking. Run `trackly mcp` or add it to Claude Code with `claude mcp add
|
|
198
|
+
trackly-cli includes a built-in MCP server with 10 tools for job search, company lookup, and application tracking. Run `trackly mcp` or add it to Claude Code with `claude mcp add --scope user trackly -- trackly mcp`. It connects to a live database of 128,000+ jobs across 1,900+ companies.
|
|
185
199
|
|
|
186
200
|
**How do I use Claude Code for job hunting?**
|
|
187
201
|
|
|
@@ -189,7 +203,7 @@ Add trackly as an MCP server in Claude Code. Then ask questions naturally: "Find
|
|
|
189
203
|
|
|
190
204
|
**What are the best CLI tools for job search?**
|
|
191
205
|
|
|
192
|
-
trackly-cli is the first dedicated job tracking CLI. It provides direct terminal access to
|
|
206
|
+
trackly-cli is the first dedicated job tracking CLI. It provides direct terminal access to 128,000+ job postings across 1,900+ companies, with filters for job function, location, and work modality. It also integrates with AI agents via the Model Context Protocol (MCP).
|
|
193
207
|
|
|
194
208
|
## Security
|
|
195
209
|
|
package/bin/trackly
CHANGED
|
@@ -214,8 +214,35 @@ async function cmdLogin() {
|
|
|
214
214
|
const hadApiKey = Boolean(config.apiKey);
|
|
215
215
|
delete config.apiKey;
|
|
216
216
|
saveConfig({ ...config, token, refreshToken, baseUrl });
|
|
217
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
218
|
-
res.end(
|
|
217
|
+
res.writeHead(200, { 'Content-Type': 'text/html', 'Referrer-Policy': 'no-referrer' });
|
|
218
|
+
res.end(`<!DOCTYPE html>
|
|
219
|
+
<html lang="en">
|
|
220
|
+
<head>
|
|
221
|
+
<meta charset="utf-8">
|
|
222
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
223
|
+
<title>Trackly CLI</title>
|
|
224
|
+
<style>
|
|
225
|
+
*{margin:0;padding:0;box-sizing:border-box}
|
|
226
|
+
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:#0a0a0a;color:#fafafa;display:flex;align-items:center;justify-content:center;min-height:100vh}
|
|
227
|
+
.card{text-align:center;padding:48px 40px;max-width:420px}
|
|
228
|
+
.icon{margin-bottom:24px}
|
|
229
|
+
.check{width:48px;height:48px;border-radius:50%;background:#22c55e;display:inline-flex;align-items:center;justify-content:center;margin-bottom:20px}
|
|
230
|
+
.check svg{width:24px;height:24px}
|
|
231
|
+
h1{font-size:22px;font-weight:600;margin-bottom:8px;letter-spacing:-0.02em}
|
|
232
|
+
p{color:#a1a1aa;font-size:15px;line-height:1.5}
|
|
233
|
+
.hint{margin-top:24px;padding:12px 16px;background:#18181b;border:1px solid #27272a;border-radius:8px;font-family:'SF Mono','Fira Code',monospace;font-size:13px;color:#71717a}
|
|
234
|
+
</style>
|
|
235
|
+
</head>
|
|
236
|
+
<body>
|
|
237
|
+
<div class="card">
|
|
238
|
+
<div class="icon"><svg width="56" height="56" viewBox="0 0 56 56" fill="none"><rect width="56" height="56" rx="14" fill="#18181b"/><path d="M16 20h24v4H16zm0 8h18v4H16zm0 8h22v4H16z" fill="#22c55e" opacity="0.9"/></svg></div>
|
|
239
|
+
<div class="check"><svg fill="none" stroke="white" stroke-width="3" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" d="M5 13l4 4L19 7"/></svg></div>
|
|
240
|
+
<h1>You're logged in</h1>
|
|
241
|
+
<p>You can close this tab and return to your terminal.</p>
|
|
242
|
+
<div class="hint">trackly search "PM jobs in SF"</div>
|
|
243
|
+
</div>
|
|
244
|
+
</body>
|
|
245
|
+
</html>`);
|
|
219
246
|
console.log(color('green', 'Login successful!'));
|
|
220
247
|
if (hadApiKey) {
|
|
221
248
|
console.log('Switched to OAuth. Stored API key cleared.');
|
|
@@ -611,8 +638,12 @@ async function cmdConfig(args) {
|
|
|
611
638
|
|
|
612
639
|
if (args['api-key'] !== undefined) {
|
|
613
640
|
const keyValue = String(args['api-key']).trim();
|
|
614
|
-
if (
|
|
615
|
-
|
|
641
|
+
if (keyValue.startsWith('trk_') && keyValue.length < 14) {
|
|
642
|
+
failNow('Invalid API key: trk_ keys must be at least 14 characters (trk_ + 10). Run "trackly api-key create" to generate a valid key.');
|
|
643
|
+
} else if (!keyValue.startsWith('trk_') && keyValue.length < 20) {
|
|
644
|
+
failNow('Invalid API key: key does not start with trk_ and is too short (must be 20+ characters). Run "trackly api-key create" to generate a valid key.');
|
|
645
|
+
} else if (!keyValue.startsWith('trk_')) {
|
|
646
|
+
console.log(color('yellow', 'Warning: API key does not start with trk_ prefix. Saving as legacy/JWT key.'));
|
|
616
647
|
}
|
|
617
648
|
const hadToken = Boolean(config.token);
|
|
618
649
|
config.apiKey = keyValue;
|
|
@@ -702,7 +733,7 @@ ${color('bold', 'Flags:')}
|
|
|
702
733
|
--help Show this help
|
|
703
734
|
|
|
704
735
|
${color('bold', 'MCP Setup:')}
|
|
705
|
-
Claude Code: claude mcp add
|
|
736
|
+
Claude Code: claude mcp add --scope user trackly -- trackly mcp
|
|
706
737
|
Cursor: add {"command":"trackly","args":["mcp"]} to .cursor/mcp.json
|
|
707
738
|
`);
|
|
708
739
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "trackly-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"mcpName": "io.github.kevinastuhuaman/trackly",
|
|
5
5
|
"description": "CLI + MCP server for job tracking — search, apply, and manage applications from terminal or AI agents",
|
|
6
6
|
"bin": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"career",
|
|
36
36
|
"terminal"
|
|
37
37
|
],
|
|
38
|
-
"author": "Kevin Astuhuaman <
|
|
38
|
+
"author": "Kevin Astuhuaman <hello@usetrackly.app>",
|
|
39
39
|
"license": "MIT",
|
|
40
40
|
"repository": {
|
|
41
41
|
"type": "git",
|
package/server.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "io.github.kevinastuhuaman/trackly",
|
|
4
4
|
"title": "Trackly CLI",
|
|
5
|
-
"description": "Job
|
|
5
|
+
"description": "Job search and application tracking for AI agents. Search 128K+ jobs across 1,900+ companies and 40+ ATS types. Filter by role, location, visa sponsorship. Natural language queries. Works with Claude Code, Cursor, Windsurf, and any MCP client.",
|
|
6
6
|
"repository": {
|
|
7
7
|
"url": "https://github.com/kevinastuhuaman/trackly-cli",
|
|
8
8
|
"source": "github"
|
|
@@ -15,12 +15,12 @@
|
|
|
15
15
|
"sizes": ["512x512"]
|
|
16
16
|
}
|
|
17
17
|
],
|
|
18
|
-
"version": "0.1.
|
|
18
|
+
"version": "0.1.12",
|
|
19
19
|
"packages": [
|
|
20
20
|
{
|
|
21
21
|
"registryType": "npm",
|
|
22
22
|
"identifier": "trackly-cli",
|
|
23
|
-
"version": "0.1.
|
|
23
|
+
"version": "0.1.12",
|
|
24
24
|
"runtimeHint": "npx",
|
|
25
25
|
"runtimeArguments": [
|
|
26
26
|
{
|
|
@@ -38,5 +38,19 @@
|
|
|
38
38
|
"type": "stdio"
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
],
|
|
42
|
+
"remotes": [
|
|
43
|
+
{
|
|
44
|
+
"type": "streamable-http",
|
|
45
|
+
"url": "https://mcp.usetrackly.app/api/mcp",
|
|
46
|
+
"headers": [
|
|
47
|
+
{
|
|
48
|
+
"name": "Authorization",
|
|
49
|
+
"description": "Bearer API key (trk_*). Create one at https://usetrackly.app/settings",
|
|
50
|
+
"isRequired": true,
|
|
51
|
+
"isSecret": true
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
41
55
|
]
|
|
42
56
|
}
|