@workjournal/cli 0.8.0 → 0.17.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.
Files changed (101) hide show
  1. package/README.md +11 -1
  2. package/dist/api-client.d.ts +26 -9
  3. package/dist/api-client.d.ts.map +1 -1
  4. package/dist/api-client.js +109 -57
  5. package/dist/api-client.js.map +1 -1
  6. package/dist/auth.d.ts +6 -0
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +18 -0
  9. package/dist/auth.js.map +1 -1
  10. package/dist/cli-args.d.ts +19 -0
  11. package/dist/cli-args.d.ts.map +1 -0
  12. package/dist/cli-args.js +50 -0
  13. package/dist/cli-args.js.map +1 -0
  14. package/dist/commands/entries.d.ts +8 -1
  15. package/dist/commands/entries.d.ts.map +1 -1
  16. package/dist/commands/entries.js +74 -15
  17. package/dist/commands/entries.js.map +1 -1
  18. package/dist/commands/export.d.ts.map +1 -1
  19. package/dist/commands/export.js +2 -3
  20. package/dist/commands/export.js.map +1 -1
  21. package/dist/commands/invites.d.ts.map +1 -1
  22. package/dist/commands/invites.js +6 -7
  23. package/dist/commands/invites.js.map +1 -1
  24. package/dist/commands/journals.d.ts +1 -1
  25. package/dist/commands/journals.d.ts.map +1 -1
  26. package/dist/commands/journals.js +20 -19
  27. package/dist/commands/journals.js.map +1 -1
  28. package/dist/commands/prompts.d.ts +9 -0
  29. package/dist/commands/prompts.d.ts.map +1 -0
  30. package/dist/commands/prompts.js +83 -0
  31. package/dist/commands/prompts.js.map +1 -0
  32. package/dist/commands/shares.d.ts.map +1 -1
  33. package/dist/commands/shares.js +11 -13
  34. package/dist/commands/shares.js.map +1 -1
  35. package/dist/commands/tags.d.ts +7 -0
  36. package/dist/commands/tags.d.ts.map +1 -0
  37. package/dist/commands/tags.js +87 -0
  38. package/dist/commands/tags.js.map +1 -0
  39. package/dist/commands/workspaces.d.ts.map +1 -1
  40. package/dist/commands/workspaces.js +4 -7
  41. package/dist/commands/workspaces.js.map +1 -1
  42. package/dist/config.d.ts.map +1 -1
  43. package/dist/config.js +3 -1
  44. package/dist/config.js.map +1 -1
  45. package/dist/help/_dispatch.d.ts +29 -0
  46. package/dist/help/_dispatch.d.ts.map +1 -0
  47. package/dist/help/_dispatch.js +132 -0
  48. package/dist/help/_dispatch.js.map +1 -0
  49. package/dist/help/_registry.d.ts +18 -0
  50. package/dist/help/_registry.d.ts.map +1 -0
  51. package/dist/help/_registry.js +98 -0
  52. package/dist/help/_registry.js.map +1 -0
  53. package/dist/help/_renderer.d.ts +31 -0
  54. package/dist/help/_renderer.d.ts.map +1 -0
  55. package/dist/help/_renderer.js +99 -0
  56. package/dist/help/_renderer.js.map +1 -0
  57. package/dist/help/_types.d.ts +53 -0
  58. package/dist/help/_types.d.ts.map +1 -0
  59. package/dist/help/_types.js +15 -0
  60. package/dist/help/_types.js.map +1 -0
  61. package/dist/help/auth-login.json +12 -0
  62. package/dist/help/auth-logout.json +7 -0
  63. package/dist/help/auth-status.json +7 -0
  64. package/dist/help/auth-whoami.json +7 -0
  65. package/dist/help/config-show.json +7 -0
  66. package/dist/help/entries-delete.json +12 -0
  67. package/dist/help/entries-get.json +12 -0
  68. package/dist/help/entries-last.json +19 -0
  69. package/dist/help/entries-list.json +14 -0
  70. package/dist/help/entries-search.json +15 -0
  71. package/dist/help/entries-update.json +44 -0
  72. package/dist/help/entries-write.json +39 -0
  73. package/dist/help/export.json +29 -0
  74. package/dist/help/invites-delete.json +16 -0
  75. package/dist/help/invites-list.json +11 -0
  76. package/dist/help/invites-new.json +12 -0
  77. package/dist/help/journal.json +13 -0
  78. package/dist/help/journals-assign-prompt.json +12 -0
  79. package/dist/help/journals-delete.json +11 -0
  80. package/dist/help/journals-get.json +20 -0
  81. package/dist/help/journals-list.json +14 -0
  82. package/dist/help/journals-new.json +21 -0
  83. package/dist/help/journals-rename.json +12 -0
  84. package/dist/help/journals-select.json +11 -0
  85. package/dist/help/journals-set-slug.json +16 -0
  86. package/dist/help/journals-unassign-prompt.json +11 -0
  87. package/dist/help/prompts-delete.json +11 -0
  88. package/dist/help/prompts-get.json +11 -0
  89. package/dist/help/prompts-list.json +14 -0
  90. package/dist/help/prompts-new.json +23 -0
  91. package/dist/help/prompts-update.json +29 -0
  92. package/dist/help/shares-delete.json +16 -0
  93. package/dist/help/shares-list.json +11 -0
  94. package/dist/help/tags-delete.json +29 -0
  95. package/dist/help/tags-get.json +29 -0
  96. package/dist/help/tags-list.json +25 -0
  97. package/dist/help/tags-new.json +35 -0
  98. package/dist/help/tags-update.json +41 -0
  99. package/dist/index.js +312 -79
  100. package/dist/index.js.map +1 -1
  101. package/package.json +4 -5
@@ -0,0 +1,12 @@
1
+ {
2
+ "command": "entries get",
3
+ "description": "Fetch a single entry by its per-journal index. The index is the integer shown as `#N` in `entries list` output and is monotonic, never reused.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." },
7
+ { "name": "index", "required": true, "description": "Per-journal positive integer (≥ 1)." }
8
+ ],
9
+ "annotations": { "destructive": false, "idempotent": true },
10
+ "examples": ["workjournal entries get acme engineering 5"],
11
+ "when_to_use": "Reading one specific entry by its index — useful when correlating across `entries search` results or following a reference like `entry #5`."
12
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "command": "entries last",
3
+ "description": "Print the N most recent entries with their full body content. Defaults to 1.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." },
7
+ {
8
+ "name": "count",
9
+ "required": false,
10
+ "description": "How many entries to fetch (positive integer; default 1)."
11
+ }
12
+ ],
13
+ "annotations": { "destructive": false, "idempotent": true },
14
+ "examples": [
15
+ "workjournal entries last acme engineering",
16
+ "workjournal entries last acme engineering 5"
17
+ ],
18
+ "when_to_use": "Reading recent work back to recover context — the most common opening move for an agent starting a new session in an existing journal."
19
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "command": "entries list",
3
+ "description": "List entries in a journal (newest first), slim form — no body. Use `entries last` or `entries get` to read full content.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." }
7
+ ],
8
+ "annotations": { "destructive": false, "idempotent": true },
9
+ "examples": [
10
+ "workjournal entries list acme engineering",
11
+ "workjournal entries list acme engineering --json"
12
+ ],
13
+ "when_to_use": "Browsing what's in a journal. For a view that includes the body, use `entries last <ws> <j> N`."
14
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "command": "entries search",
3
+ "description": "Search a journal's entries by keyword. Returns slim entries (id, index, summary, created_at) — follow up with `entries get` for the full body.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." },
7
+ { "name": "query", "required": true, "description": "Search string. Quote multi-word queries." }
8
+ ],
9
+ "annotations": { "destructive": false, "idempotent": true },
10
+ "examples": [
11
+ "workjournal entries search acme engineering auth",
12
+ "workjournal entries search acme engineering \"refresh token\" --json"
13
+ ],
14
+ "when_to_use": "Finding past entries on a topic — file paths, feature names, error strings, decision keywords. Run several searches with different terms to find related entries."
15
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "command": "entries update",
3
+ "description": "Patch any subset of an entry's title, summary, or body. Preserves `created_at` and the per-journal index; advances `updated_at`.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." },
7
+ { "name": "index", "required": true, "description": "Per-journal positive integer (≥ 1)." }
8
+ ],
9
+ "flags": [
10
+ {
11
+ "short": "-t",
12
+ "long": "--title",
13
+ "value": "<title>",
14
+ "description": "New title (max 80 chars). Omit to leave unchanged."
15
+ },
16
+ {
17
+ "short": "-s",
18
+ "long": "--summary",
19
+ "value": "<summary>",
20
+ "description": "New summary (max 500 chars). Omit to leave unchanged."
21
+ },
22
+ {
23
+ "short": "-b",
24
+ "long": "--body",
25
+ "value": "<file>|-",
26
+ "description": "Body source — file path, or `-` for stdin. Omit to leave unchanged."
27
+ },
28
+ {
29
+ "long": "--tags",
30
+ "value": "<a,b,c>",
31
+ "description": "Replace the tag set with this comma-separated list (Plus+). Pass `--tags \"\"` to clear all tags (allowed on any tier). Omit to leave unchanged. Pattern D, issue #239."
32
+ }
33
+ ],
34
+ "constraints": ["At least one of -t/-s/-b/--tags is required."],
35
+ "annotations": { "destructive": false, "idempotent": false },
36
+ "examples": [
37
+ "workjournal entries update acme engineering 5 -t \"Verified\"",
38
+ "workjournal entries update acme engineering 5 -b verification.md",
39
+ "cat note.md | workjournal entries update acme engineering 5 -b -",
40
+ "workjournal entries update acme engineering 5 --tags decision,blocker",
41
+ "workjournal entries update acme engineering 5 --tags \"\""
42
+ ],
43
+ "when_to_use": "Annotating, verifying, or fixing typos on an existing entry without delete+recreate (which would lose the original `created_at` and disrupt the entry index)."
44
+ }
@@ -0,0 +1,39 @@
1
+ {
2
+ "command": "entries write",
3
+ "description": "Create a new entry in a journal. All three content fields are required. The title is capped at 80 characters; the summary at 500. Body is the full markdown content.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." }
7
+ ],
8
+ "flags": [
9
+ {
10
+ "short": "-t",
11
+ "long": "--title",
12
+ "value": "<title>",
13
+ "description": "Entry title (max 80 chars). Required."
14
+ },
15
+ {
16
+ "short": "-s",
17
+ "long": "--summary",
18
+ "value": "<summary>",
19
+ "description": "Paragraph summary used by AI retrieval (max 500 chars). Required."
20
+ },
21
+ {
22
+ "short": "-b",
23
+ "long": "--body",
24
+ "value": "<body>",
25
+ "description": "Markdown body. Required. Inline only — for file/stdin sources, use `entries update` after creation."
26
+ },
27
+ {
28
+ "long": "--tags",
29
+ "value": "<a,b,c>",
30
+ "description": "Optional comma-separated tag names (Plus+). All names must already exist in the workspace/journal — see `tags list`. Pattern D, issue #239."
31
+ }
32
+ ],
33
+ "annotations": { "destructive": false, "idempotent": false },
34
+ "examples": [
35
+ "workjournal entries write acme engineering -t \"Auth migration shipped\" -s \"...\" -b \"...\"",
36
+ "workjournal entries write acme engineering -t \"...\" -s \"...\" -b \"...\" --tags decision,blocker"
37
+ ],
38
+ "when_to_use": "Recording work that's been completed — decisions, fixes, trade-offs. Always run `journals get` first to read the journal's `prompt.body` so the entry matches the journal's voice."
39
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "command": "export",
3
+ "description": "Export a journal as JSON, Markdown, or CSV. Defaults to JSON to stdout; use `-p` to write to a file. Plus/Pro tier feature on FREE workspaces.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." }
7
+ ],
8
+ "flags": [
9
+ {
10
+ "short": "-f",
11
+ "long": "--format",
12
+ "value": "<json|md|csv>",
13
+ "description": "Output format. Defaults to `json`."
14
+ },
15
+ {
16
+ "short": "-p",
17
+ "long": "--path",
18
+ "value": "<path>",
19
+ "description": "Write output to this file instead of stdout."
20
+ }
21
+ ],
22
+ "annotations": { "destructive": false, "idempotent": true },
23
+ "examples": [
24
+ "workjournal export acme engineering",
25
+ "workjournal export acme engineering -f md -p ./engineering.md",
26
+ "workjournal export acme engineering -f csv > engineering.csv"
27
+ ],
28
+ "when_to_use": "Backing up a journal, archiving for long-term storage, or feeding the entries into another tool. Markdown is human-readable; JSON preserves every field; CSV is for spreadsheet import."
29
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "command": "invites delete",
3
+ "description": "Revoke a pending invitation by id. Already-accepted invitations cannot be revoked — use `shares delete` to remove an accepted contributor.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." },
7
+ {
8
+ "name": "invitationId",
9
+ "required": true,
10
+ "description": "Invitation UUID from `invites list`."
11
+ }
12
+ ],
13
+ "annotations": { "destructive": true, "idempotent": true },
14
+ "examples": ["workjournal invites delete acme engineering 7d8e9f12-a3b4-4c5d-9e10-1f2a3b4c5d6e"],
15
+ "when_to_use": "Cancelling an invitation that was sent to the wrong address or to someone who shouldn't have been invited."
16
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "command": "invites list",
3
+ "description": "List pending invitations for a journal — id, invited email, sent-at. Accepted and revoked invitations are not returned.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." }
7
+ ],
8
+ "annotations": { "destructive": false, "idempotent": true },
9
+ "examples": ["workjournal invites list acme engineering"],
10
+ "when_to_use": "Tracking outstanding invitations before resending or revoking. The invitation `id` shown here is what `invites delete` expects."
11
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "command": "invites new",
3
+ "description": "Create an email-based invitation to a journal. The invitee receives an email with an accept link. Subject to the workspace tier's `max_contributors_per_journal` limit.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." },
7
+ { "name": "email", "required": true, "description": "Invitee's email address." }
8
+ ],
9
+ "annotations": { "destructive": false, "idempotent": false },
10
+ "examples": ["workjournal invites new acme engineering alice@example.com"],
11
+ "when_to_use": "Adding a new contributor to a journal. The invitation can be revoked with `invites delete` until accepted."
12
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "command": "journal",
3
+ "description": "Shortcut: print details of the currently selected journal (workspace + journal pinned via `journals select`). Errors if no journal has been selected.",
4
+ "flags": [
5
+ {
6
+ "long": "--verbose",
7
+ "description": "Print the full prompt body alongside the summary line."
8
+ }
9
+ ],
10
+ "annotations": { "destructive": false, "idempotent": true },
11
+ "examples": ["workjournal journal", "workjournal journal --verbose"],
12
+ "when_to_use": "Quick recap of the active journal during interactive work. For programmatic access pass `--json`."
13
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "command": "journals assign-prompt",
3
+ "description": "Attach a workspace prompt to a journal. The prompt's `body` is what `journals get` returns as `prompt.body` and is the writing instruction agents follow when creating entries. Plus/Pro tier feature.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." },
7
+ { "name": "promptSlug", "required": true, "description": "Slug from `prompts list <ws>`." }
8
+ ],
9
+ "annotations": { "destructive": false, "idempotent": true },
10
+ "examples": ["workjournal journals assign-prompt acme engineering project-style"],
11
+ "when_to_use": "Customising the writing voice / structure for a specific journal. Without an assignment the journal uses the system-default prompt."
12
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "command": "journals delete",
3
+ "description": "Delete a journal and every entry it contains. Requires the workspace owner role. Irreversible — there is no recycle bin.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." }
7
+ ],
8
+ "annotations": { "destructive": true, "idempotent": true },
9
+ "examples": ["workjournal journals delete acme staging"],
10
+ "when_to_use": "Retiring a journal you own. To stop using a journal without deleting its entries, just stop writing to it — there is no archive flag today."
11
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "command": "journals get",
3
+ "description": "Print details of a single journal — name, slug, description, contributor count, and the assigned prompt (custom or system default). Pass `--verbose` to also print the full prompt body.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." }
7
+ ],
8
+ "flags": [
9
+ {
10
+ "long": "--verbose",
11
+ "description": "Print the full prompt body alongside the summary line."
12
+ }
13
+ ],
14
+ "annotations": { "destructive": false, "idempotent": true },
15
+ "examples": [
16
+ "workjournal journals get acme engineering",
17
+ "workjournal journals get acme engineering --verbose"
18
+ ],
19
+ "when_to_use": "Before writing an entry, fetch the journal first — `prompt.body` in the response tells you the structure and voice the journal expects. Skipping this is the most common cause of off-format entries."
20
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "command": "journals list",
3
+ "description": "List journals in a workspace. The workspace slug is optional if one has been pinned via `workspaces select`. Pass the special slug `shared-with-me` to list journals shared into you from workspaces you don't own.",
4
+ "args": [
5
+ {
6
+ "name": "workspaceSlug",
7
+ "required": false,
8
+ "description": "Slug from `workspaces list`, or `shared-with-me`. Falls back to the active workspace."
9
+ }
10
+ ],
11
+ "annotations": { "destructive": false, "idempotent": true },
12
+ "examples": ["workjournal journals list acme", "workjournal journals list shared-with-me --json"],
13
+ "when_to_use": "Discovering available journal slugs before any entry-scoped command. The `shared-with-me` form surfaces journals where you're a contributor in a workspace you don't own."
14
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "command": "journals new",
3
+ "description": "Create a new journal in a workspace. Auto-generates a slug from the name; override with `--slug`. Subject to the workspace tier's `max_journals` limit.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "name", "required": true, "description": "Display name (max 20 characters)." }
7
+ ],
8
+ "flags": [
9
+ {
10
+ "long": "--slug",
11
+ "value": "<slug>",
12
+ "description": "Override the auto-generated slug. Reserved names and route-collisions are rejected."
13
+ }
14
+ ],
15
+ "annotations": { "destructive": false, "idempotent": false },
16
+ "examples": [
17
+ "workjournal journals new acme \"Engineering Notes\"",
18
+ "workjournal journals new acme \"Ops Runbook\" --slug ops"
19
+ ],
20
+ "when_to_use": "Setting up a new journal for a project, team, or topic. Each journal has its own monotonic entry index and its own prompt assignment."
21
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "command": "journals rename",
3
+ "description": "Change the journal's display name. The slug stays the same so existing URLs and integrations keep working.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." },
7
+ { "name": "newName", "required": true, "description": "New display name (max 20 characters)." }
8
+ ],
9
+ "annotations": { "destructive": false, "idempotent": true },
10
+ "examples": ["workjournal journals rename acme staging \"Staging Notes\""],
11
+ "when_to_use": "Cosmetic rename — fixes typos or rebrands a journal without breaking links. Use `journals set-slug` if you need to change the URL."
12
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "command": "journals select",
3
+ "description": "Set the active journal in project-config and global-config. Subsequent shortcut forms (`workjournal` and `workjournal journal`) resolve to this selection.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." }
7
+ ],
8
+ "annotations": { "destructive": false, "idempotent": true },
9
+ "examples": ["workjournal journals select acme engineering"],
10
+ "when_to_use": "Pinning the journal once for the current project so subsequent commands don't need to repeat the slugs. Resource verbs like `entries`, `shares`, `invites` still take explicit slugs — `select` only enables shortcut forms."
11
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "command": "journals set-slug",
3
+ "description": "Change the journal's URL slug. WARNING: old URLs to `<workspaceSlug>/<journalSlug>` will return 404 immediately after the change. Use `journals rename` if you only want to change the human name.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Current slug." },
7
+ {
8
+ "name": "newSlug",
9
+ "required": true,
10
+ "description": "New URL slug. Reserved names and route-collisions are rejected."
11
+ }
12
+ ],
13
+ "annotations": { "destructive": true, "idempotent": true },
14
+ "examples": ["workjournal journals set-slug acme staging-notes staging"],
15
+ "when_to_use": "When the slug is genuinely wrong (typo, ambiguous, conflict). Coordinate with anyone who has bookmarks, scripts, or shared links — they all need updating."
16
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "command": "journals unassign-prompt",
3
+ "description": "Detach the journal's currently assigned prompt and fall back to the system default. No-op if the journal already uses the default.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." }
7
+ ],
8
+ "annotations": { "destructive": false, "idempotent": true },
9
+ "examples": ["workjournal journals unassign-prompt acme engineering"],
10
+ "when_to_use": "Reverting a custom prompt without deleting it (the prompt remains in the workspace and can be re-assigned later)."
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "command": "prompts delete",
3
+ "description": "Delete a workspace prompt. Cascades unassignment from any journals currently using it (those journals fall back to the system default). Plus/Pro tier feature.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "promptSlug", "required": true, "description": "Slug from `prompts list`." }
7
+ ],
8
+ "annotations": { "destructive": true, "idempotent": true },
9
+ "examples": ["workjournal prompts delete acme project-style"],
10
+ "when_to_use": "Retiring a prompt you no longer want available in the workspace. Use `journals unassign-prompt` first if you only want to detach it from one journal."
11
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "command": "prompts get",
3
+ "description": "Print a single prompt's full details, including the body. Plus/Pro tier feature.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "promptSlug", "required": true, "description": "Slug from `prompts list`." }
7
+ ],
8
+ "annotations": { "destructive": false, "idempotent": true },
9
+ "examples": ["workjournal prompts get acme project-style"],
10
+ "when_to_use": "Reading the body of a prompt before editing it, or auditing what's currently saved at a slug."
11
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "command": "prompts list",
3
+ "description": "List the workspace's saved prompts. Plus/Pro tier feature — Free tier surfaces a tier-rejection error from the API.",
4
+ "args": [
5
+ {
6
+ "name": "workspaceSlug",
7
+ "required": false,
8
+ "description": "Slug from `workspaces list`. Falls back to the active workspace."
9
+ }
10
+ ],
11
+ "annotations": { "destructive": false, "idempotent": true },
12
+ "examples": ["workjournal prompts list", "workjournal prompts list acme --json"],
13
+ "when_to_use": "Discovering available prompts before assigning one to a journal with `journals assign-prompt`."
14
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "command": "prompts new",
3
+ "description": "Create a new workspace prompt. Auto-generates a slug from the name; override with `--slug`. Plus/Pro tier feature.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "name", "required": true, "description": "Display name (max 80 characters)." }
7
+ ],
8
+ "flags": [
9
+ {
10
+ "short": "-b",
11
+ "long": "--body",
12
+ "value": "<body>",
13
+ "description": "Prompt body (max 10,000 characters). Defaults to empty if omitted."
14
+ },
15
+ { "long": "--slug", "value": "<slug>", "description": "Override the auto-generated slug." }
16
+ ],
17
+ "annotations": { "destructive": false, "idempotent": false },
18
+ "examples": [
19
+ "workjournal prompts new acme \"Project style\" -b \"Be concise. Use past tense.\"",
20
+ "workjournal prompts new acme \"Engineering voice\" --slug eng-voice -b \"...\""
21
+ ],
22
+ "when_to_use": "Authoring a custom writing style for a journal. Pair with `journals assign-prompt` to apply it."
23
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "command": "prompts update",
3
+ "description": "Update a prompt's name and/or body. The slug stays stable so existing journal assignments keep working. Plus/Pro tier feature.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "promptSlug", "required": true, "description": "Slug from `prompts list`." }
7
+ ],
8
+ "flags": [
9
+ {
10
+ "short": "-n",
11
+ "long": "--name",
12
+ "value": "<name>",
13
+ "description": "New display name (max 80 chars). Omit to leave unchanged."
14
+ },
15
+ {
16
+ "short": "-b",
17
+ "long": "--body",
18
+ "value": "<body>",
19
+ "description": "New body (max 10,000 chars). Omit to leave unchanged."
20
+ }
21
+ ],
22
+ "constraints": ["At least one of -n/-b is required."],
23
+ "annotations": { "destructive": false, "idempotent": false },
24
+ "examples": [
25
+ "workjournal prompts update acme project-style -n \"Renamed style\"",
26
+ "workjournal prompts update acme project-style -b \"Be concise. Use bullet points.\""
27
+ ],
28
+ "when_to_use": "Iterating on a prompt's wording without changing its slug. The change is picked up by every journal currently assigned this prompt on the next entry write."
29
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "command": "shares delete",
3
+ "description": "Remove a contributor's access to a journal. The CLI resolves the email to a user ID internally so callers don't need to know the UUID.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." },
7
+ {
8
+ "name": "email",
9
+ "required": true,
10
+ "description": "Contributor's email address (must match what's shown in `shares list`)."
11
+ }
12
+ ],
13
+ "annotations": { "destructive": true, "idempotent": true },
14
+ "examples": ["workjournal shares delete acme engineering alice@example.com"],
15
+ "when_to_use": "Revoking access for a former teammate or a contributor who joined by mistake. Owners cannot be removed via this command."
16
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "command": "shares list",
3
+ "description": "List the contributors of a journal — id, role, joined-at. Each row also includes the user's email when available.",
4
+ "args": [
5
+ { "name": "workspaceSlug", "required": true, "description": "Slug from `workspaces list`." },
6
+ { "name": "journalSlug", "required": true, "description": "Slug from `journals list`." }
7
+ ],
8
+ "annotations": { "destructive": false, "idempotent": true },
9
+ "examples": ["workjournal shares list acme engineering"],
10
+ "when_to_use": "Auditing who has access to a journal before sharing further or removing a stale contributor."
11
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "command": "tags delete",
3
+ "description": "Delete a tag. Cascades to remove the tag from every entry that referenced it (workspace-scope: every entry in the workspace; journal-scope: every entry in that journal). Not tier-gated.",
4
+ "args": [
5
+ {
6
+ "name": "workspaceSlug",
7
+ "required": true,
8
+ "description": "Slug from `workspaces list`."
9
+ },
10
+ {
11
+ "name": "tagName",
12
+ "required": true,
13
+ "description": "Tag name to delete."
14
+ }
15
+ ],
16
+ "flags": [
17
+ {
18
+ "long": "--journal",
19
+ "value": "<journalSlug>",
20
+ "description": "Target the journal-scope row of this name. Omit for workspace-scope."
21
+ }
22
+ ],
23
+ "annotations": { "destructive": true, "idempotent": true },
24
+ "examples": [
25
+ "workjournal tags delete acme deprecated-tag",
26
+ "workjournal tags delete acme planning --journal engineering"
27
+ ],
28
+ "when_to_use": "Retiring a tag that should no longer be used. Cascades cleanly — no orphan references on entries."
29
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "command": "tags get",
3
+ "description": "Show a single tag's metadata. With --journal, prefers the journal-scoped row when one exists; falls back to the workspace-scope row with the same name.",
4
+ "args": [
5
+ {
6
+ "name": "workspaceSlug",
7
+ "required": true,
8
+ "description": "Slug from `workspaces list`."
9
+ },
10
+ {
11
+ "name": "tagName",
12
+ "required": true,
13
+ "description": "Tag name (kebab-case)."
14
+ }
15
+ ],
16
+ "flags": [
17
+ {
18
+ "long": "--journal",
19
+ "value": "<journalSlug>",
20
+ "description": "Look up the journal-scope row preferentially; falls back to workspace-scope."
21
+ }
22
+ ],
23
+ "annotations": { "destructive": false, "idempotent": true },
24
+ "examples": [
25
+ "workjournal tags get acme decision",
26
+ "workjournal tags get acme planning --journal engineering --json"
27
+ ],
28
+ "when_to_use": "Inspecting a tag's description and scope before assigning or modifying it."
29
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "command": "tags list",
3
+ "description": "List tags in a workspace. Returns workspace-scoped tags by default; pass --journal <j> to include that journal's tags too. Plus+ tier feature — Free workspaces return an empty list.",
4
+ "args": [
5
+ {
6
+ "name": "workspaceSlug",
7
+ "required": false,
8
+ "description": "Slug from `workspaces list`. Falls back to the active workspace."
9
+ }
10
+ ],
11
+ "flags": [
12
+ {
13
+ "long": "--journal",
14
+ "value": "<journalSlug>",
15
+ "description": "Narrow to a specific journal. Returns workspace-scope tags plus that journal's tags."
16
+ }
17
+ ],
18
+ "annotations": { "destructive": false, "idempotent": true },
19
+ "examples": [
20
+ "workjournal tags list",
21
+ "workjournal tags list acme --json",
22
+ "workjournal tags list acme --journal engineering"
23
+ ],
24
+ "when_to_use": "Discovering which tags can be attached to a new entry before calling `entries write --tags …`."
25
+ }