@prave/cli 1.0.2 → 1.0.3
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/dist/index.js +86 -16
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -27,11 +27,35 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
|
27
27
|
const pkg = JSON.parse(readFileSync(resolve(__dirname, '..', 'package.json'), 'utf8'));
|
|
28
28
|
const program = new Command()
|
|
29
29
|
.name('prave')
|
|
30
|
-
.description(
|
|
31
|
-
.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
.description([
|
|
31
|
+
'Prave — Developer platform for Claude Skills.',
|
|
32
|
+
'',
|
|
33
|
+
' Lifecycle: discover · install · author · sync · audit · ship.',
|
|
34
|
+
' Targets ~/.claude/skills/ by default; multi-agent via `prave deploy`.',
|
|
35
|
+
'',
|
|
36
|
+
' Quick start:',
|
|
37
|
+
' prave login # device-code auth in your browser',
|
|
38
|
+
' prave search <q> # discover community skills',
|
|
39
|
+
' prave install <slug> # pull into ~/.claude/skills/',
|
|
40
|
+
' prave usage hook install # real-time invocation tracking',
|
|
41
|
+
'',
|
|
42
|
+
' Docs: https://prave.app/docs',
|
|
43
|
+
' Issues: https://github.com/eppstudio/prave/issues',
|
|
44
|
+
].join('\n'))
|
|
45
|
+
.version(pkg.version)
|
|
46
|
+
.addHelpText('after', '\nRun `prave <cmd> --help` for command-specific options.');
|
|
47
|
+
program
|
|
48
|
+
.command('login')
|
|
49
|
+
.description('Authenticate this machine via device-code (browser opens, no password is ever typed). Tokens are saved chmod-600 to ~/.prave/credentials.json and refresh automatically.')
|
|
50
|
+
.action(loginCommand);
|
|
51
|
+
program
|
|
52
|
+
.command('logout')
|
|
53
|
+
.description('Remove stored credentials from ~/.prave/credentials.json. Re-run `prave login` to authenticate again.')
|
|
54
|
+
.action(logoutCommand);
|
|
55
|
+
program
|
|
56
|
+
.command('whoami')
|
|
57
|
+
.description('Print the signed-in user, plan, and credentials path. Detects stale credentials predating the refresh-token flow.')
|
|
58
|
+
.action(whoamiCommand);
|
|
35
59
|
program
|
|
36
60
|
.command('import')
|
|
37
61
|
.description('Scan ~/.claude/skills/ — optionally upload to Prave')
|
|
@@ -41,9 +65,9 @@ program
|
|
|
41
65
|
.action(importCommand);
|
|
42
66
|
program
|
|
43
67
|
.command('install <slug>')
|
|
44
|
-
.description('Install a Skill into ~/.claude/skills/
|
|
45
|
-
.option('--no-deps', 'skip transitive dependency resolution')
|
|
46
|
-
.option('--force', 'install even
|
|
68
|
+
.description('Install a Skill from the registry into ~/.claude/skills/<slug>/. Resolves and installs transitive dependencies by default. Free plan caps at 5 installs/month — Pro and Max are unlimited.')
|
|
69
|
+
.option('--no-deps', 'skip transitive dependency resolution (don\'t pull deps the Skill declares)')
|
|
70
|
+
.option('--force', 'install even when the SKILL.md content is empty (rare; use for stub Skills)')
|
|
47
71
|
.action(installCommand);
|
|
48
72
|
program
|
|
49
73
|
.command('uninstall <slug>')
|
|
@@ -61,11 +85,11 @@ program
|
|
|
61
85
|
.action((slug, opts) => updateCommand(slug, opts));
|
|
62
86
|
program
|
|
63
87
|
.command('list')
|
|
64
|
-
.description('List installed
|
|
65
|
-
.option('--remote', '
|
|
66
|
-
.option('--verbose', 'show enriched intelligence
|
|
67
|
-
.option('--conflicts', '
|
|
68
|
-
.option('--heavy', '
|
|
88
|
+
.description('List Skills installed locally (default) or stored on your Prave account (--remote).')
|
|
89
|
+
.option('--remote', 'fetch Skills you own + have installed from the Prave API instead of disk')
|
|
90
|
+
.option('--verbose', 'show enriched intelligence: estimated tokens, token tier, target agents')
|
|
91
|
+
.option('--conflicts', 'narrow to Skills flagged as conflicting with another by trigger overlap')
|
|
92
|
+
.option('--heavy', 'narrow to Skills above the heavy-tier threshold (>5k estimated tokens)')
|
|
69
93
|
.action(listCommand);
|
|
70
94
|
program.command('search <query>').description('Search public Skills').action(searchCommand);
|
|
71
95
|
program
|
|
@@ -136,10 +160,56 @@ program
|
|
|
136
160
|
.action(findCommand);
|
|
137
161
|
program
|
|
138
162
|
.command('deploy <skillname>')
|
|
139
|
-
.description('Deploy a
|
|
140
|
-
.option('--agent <agent>', '
|
|
141
|
-
.option('--dry-run', 'log
|
|
163
|
+
.description('Deploy a Skill to every configured agent (Claude Code, Codex, Cursor, Gemini, Cline, Amp). Free plan deploys to Claude Code only; Pro and Max deploy across all six. The skill must already exist locally — use `prave install` first or point to a SKILL.md folder.')
|
|
164
|
+
.option('--agent <agent>', 'restrict deploy to a single agent (claude-code | codex | cursor | gemini | cline | amp)')
|
|
165
|
+
.option('--dry-run', 'log every destination path but write nothing — preview before committing')
|
|
142
166
|
.action(deployCommand);
|
|
167
|
+
// ─── Help command — full quick-reference ───────────────────────────
|
|
168
|
+
program
|
|
169
|
+
.command('cheat')
|
|
170
|
+
.description('Print a one-page cheat sheet of every command.')
|
|
171
|
+
.action(() => {
|
|
172
|
+
console.log([
|
|
173
|
+
'Prave CLI cheat sheet',
|
|
174
|
+
'',
|
|
175
|
+
'Auth & account',
|
|
176
|
+
' prave login # device-code browser auth',
|
|
177
|
+
' prave logout # forget credentials',
|
|
178
|
+
' prave whoami # signed-in user + plan',
|
|
179
|
+
'',
|
|
180
|
+
'Discover & install',
|
|
181
|
+
' prave search <q> # public skill search',
|
|
182
|
+
' prave find <q> [--smart|--local] # smart cross-source search',
|
|
183
|
+
' prave install <slug> [--no-deps] # install into ~/.claude/skills/',
|
|
184
|
+
' prave uninstall <slug> # remove a local skill',
|
|
185
|
+
' prave list [--remote] [--verbose] # what is installed (or remote)',
|
|
186
|
+
' prave export <slug> -o file.md # dump SKILL.md without installing',
|
|
187
|
+
'',
|
|
188
|
+
'Authoring & sync',
|
|
189
|
+
' prave import [--upload --public] # publish ~/.claude/skills/ to Prave',
|
|
190
|
+
' prave deploy <skill> [--agent x] # mirror to other agents',
|
|
191
|
+
' prave sync # pull every installed update',
|
|
192
|
+
' prave update [slug] [--dry-run] # diff + pull outdated skills',
|
|
193
|
+
' prave diff <slug> # local vs registry diff',
|
|
194
|
+
'',
|
|
195
|
+
'Intelligence',
|
|
196
|
+
' prave overview [--json] # token cost summary',
|
|
197
|
+
' prave whatdoes <skill> # triggers, tokens, conflicts',
|
|
198
|
+
' prave conflicts # cross-skill collision check',
|
|
199
|
+
' prave optimize # heavy / underused / mergeable',
|
|
200
|
+
'',
|
|
201
|
+
'Usage tracking (Pro+)',
|
|
202
|
+
' prave usage hook install # real-time PostToolUse hook',
|
|
203
|
+
' prave usage hook uninstall',
|
|
204
|
+
' prave usage scan [--since 7d] # transcript scanner',
|
|
205
|
+
' prave usage status # hook health + recent counts',
|
|
206
|
+
'',
|
|
207
|
+
'Settings',
|
|
208
|
+
' prave settings # configure agents + paths',
|
|
209
|
+
'',
|
|
210
|
+
'Docs: https://prave.app/docs',
|
|
211
|
+
].join('\n'));
|
|
212
|
+
});
|
|
143
213
|
program.parseAsync().catch((err) => {
|
|
144
214
|
console.error(err.message);
|
|
145
215
|
process.exit(1);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prave/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Prave CLI — import, export, install, sync Claude Skills.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"open": "^10.1.0",
|
|
17
17
|
"ora": "^8.0.1",
|
|
18
18
|
"undici": "^6.18.0",
|
|
19
|
-
"@prave/shared": "1.0.
|
|
19
|
+
"@prave/shared": "1.0.3"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^20.12.7",
|