@gobi-ai/cli 2.0.26 → 2.0.28

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.
@@ -4,12 +4,12 @@
4
4
  "name": "gobi-ai"
5
5
  },
6
6
  "description": "Claude Code plugin for the Gobi collaborative knowledge platform CLI",
7
- "version": "2.0.26",
7
+ "version": "2.0.28",
8
8
  "plugins": [
9
9
  {
10
10
  "name": "gobi",
11
11
  "description": "Manage the Gobi collaborative knowledge platform from the command line. Publish vault profiles, create posts and replies, generate images and videos.",
12
- "version": "2.0.26",
12
+ "version": "2.0.28",
13
13
  "author": {
14
14
  "name": "gobi-ai"
15
15
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gobi",
3
3
  "description": "Manage the Gobi collaborative knowledge platform from the command line",
4
- "version": "2.0.26",
4
+ "version": "2.0.28",
5
5
  "author": {
6
6
  "name": "gobi-ai"
7
7
  },
package/README.md CHANGED
@@ -138,10 +138,9 @@ If `.gobi/settings.yaml` is missing, `gobi vault init` and `gobi space warp` are
138
138
 
139
139
  | Command | Description |
140
140
  |---------|-------------|
141
- | `gobi vault create <slug> --name <n>` | Create a new vault. Does not change the configured vault — run `gobi vault init` or `gobi vault set-primary` afterwards if you want to anchor to it. |
141
+ | `gobi vault create <slug> --name <n>` | Create a new vault. Does not change the configured vault — run `gobi vault init` afterwards if you want to anchor to it. |
142
142
  | `gobi vault rename <newName> [--vault-slug <slug>]` | Rename a vault. Defaults to the configured vault. Local display name only — does not affect `PUBLISH.md` frontmatter. |
143
143
  | `gobi vault delete <slug>` | Delete a vault. Irreversible. The API rejects if the vault still owns content; clean up posts, members, and files first. |
144
- | `gobi vault set-primary <slug>` | Mark a vault as your primary. Unsets primary on the others. |
145
144
  | `gobi vault publish` | Upload `PUBLISH.md` to your vault. Triggers profile/metadata refresh. |
146
145
  | `gobi vault unpublish` | Remove `PUBLISH.md` from your vault. |
147
146
  | `gobi vault status [--vault-slug <slug>]` | Show the configured vault's publish state (`isPublished`), profile fields, file count, and public profile URL. Useful as a pre-flight check before authoring a markdown artifact with `--auto-attachments`. |
@@ -178,31 +177,29 @@ A *Space* is a community knowledge area. A *Space Post* lives in one space. The
178
177
  | `gobi space list-topic-posts <topicSlug>` | List posts tagged with a topic |
179
178
  | `gobi space list-posts` | List posts in the space |
180
179
  | `gobi space get-post <postId> [--full]` | Get a post with its ancestors and replies. `--full` shows reply content without truncation. |
181
- | `gobi space create-post [--title <t>] (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--repost-post-id <id>] [--attach <file>]…` | Create a space post. Must provide content via `--content` or `--rich-text`. `--vault-slug` attributes it to a vault you own. `--repost-post-id` reposts an existing post (sets `repostPostId` on the new post). `--attach` uploads local media to render inline in-feed (repeatable; X-style mix rule — up to 4 photos OR 1 GIF OR 1 video). |
182
- | `gobi space edit-post <postId> [--title <t>] [--content <c>] [--vault-slug <slug>]` | Edit a space post. `--vault-slug ""` detaches the vault. |
180
+ | `gobi space create-post [--title <t>] (--content <c> \| --rich-text <json>) [--artifact <artifactId>] [--repost-post-id <id>] [--attach <file>]…` | Create a space post. Must provide content via `--content` or `--rich-text`. `--artifact` attaches an existing artifact to the post (repeatable). `--repost-post-id` reposts an existing post (sets `repostPostId` on the new post). `--attach` uploads local media to render inline in-feed (repeatable; X-style mix rule — up to 4 photos OR 1 GIF OR 1 video). |
181
+ | `gobi space edit-post <postId> [--title <t>] [--content <c>]` | Edit a space post. |
183
182
  | `gobi space delete-post <postId>` | Delete a space post |
184
- | `gobi space create-reply <postId> (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--attach <file>]…` | Create a reply to a space post. `--attach` works the same as on `create-post`. |
185
- | `gobi space edit-reply <replyId> [--content <c>] [--rich-text <json>] [--vault-slug <slug>]` | Edit a reply you authored. `--vault-slug ""` detaches attribution. |
183
+ | `gobi space create-reply <postId> (--content <c> \| --rich-text <json>) [--attach <file>]…` | Create a reply to a space post. `--attach` works the same as on `create-post`. |
184
+ | `gobi space edit-reply <replyId> [--content <c>] [--rich-text <json>]` | Edit a reply you authored. |
186
185
  | `gobi space delete-reply <replyId>` | Delete a reply you authored |
187
186
 
188
187
  ### Global feed (personal posts)
189
188
 
190
- A *Personal Post* surfaces in the public global feed. Pass `--vault-slug` to attribute it to a vault you own (it'll then surface on that vault's profile too); with no `--vault-slug` the post has no `authorVaultSlug` and lives only on the global feed. Same `Post` model as a Space Post, scoped to the user instead of a space.
189
+ A *Personal Post* surfaces in the public global feed. Same `Post` model as a Space Post, scoped to the user instead of a space.
191
190
 
192
191
  | Command | Description |
193
192
  |---------|-------------|
194
193
  | `gobi global feed [--following]` | List the global public feed (posts + replies, newest first). `--following` limits to authors you follow. |
195
- | `gobi global list-posts [--mine] [--vault-slug <slug>]` | List personal posts; filter to your own or by author vault |
194
+ | `gobi global list-posts [--mine]` | List personal posts; filter to your own |
196
195
  | `gobi global get-post <postId> [--full]` | Get a personal post with its ancestors and replies. `--full` shows reply content without truncation. |
197
- | `gobi global create-post [--title <t>] (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--repost-post-id <id>] [--attach <file>]…` | Create a personal post. `--repost-post-id` reposts an existing post. `--attach` uploads local media for inline rendering (see `gobi space create-post` above for the mix rule). |
198
- | `gobi global edit-post <postId> [--title <t>] [--content <c>] [--vault-slug <slug>]` | Edit a personal post you authored. `--vault-slug ""` detaches the vault. |
196
+ | `gobi global create-post [--title <t>] (--content <c> \| --rich-text <json>) [--artifact <artifactId>] [--repost-post-id <id>] [--attach <file>]…` | Create a personal post. `--artifact` attaches an existing artifact to the post (repeatable). `--repost-post-id` reposts an existing post. `--attach` uploads local media for inline rendering (see `gobi space create-post` above for the mix rule). |
197
+ | `gobi global edit-post <postId> [--title <t>] [--content <c>]` | Edit a personal post you authored. |
199
198
  | `gobi global delete-post <postId>` | Delete a personal post you authored |
200
- | `gobi global create-reply <postId> (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--attach <file>]…` | Create a reply to a personal post |
201
- | `gobi global edit-reply <replyId> [--content <c>] [--rich-text <json>] [--vault-slug <slug>]` | Edit a reply you authored. `--vault-slug ""` detaches attribution. |
199
+ | `gobi global create-reply <postId> (--content <c> \| --rich-text <json>) [--attach <file>]…` | Create a reply to a personal post |
200
+ | `gobi global edit-reply <replyId> [--content <c>] [--rich-text <json>]` | Edit a reply you authored. |
202
201
  | `gobi global delete-reply <replyId>` | Delete a reply you authored |
203
202
 
204
- `--vault-slug` requires that the caller hold `role: 'owner'` on the target vault. When set, it becomes the post's `authorVaultSlug`.
205
-
206
203
  ### Personal space (private posts)
207
204
 
208
205
  > Naming note: a **Personal Post** (under `gobi global`, above) is the public-feed kind — it lives on your vault profile and surfaces on the global feed. A **personal-space post** (this section, under `gobi personal`) is the private kind — same `Post` data model, but scoped via `personalSpaceUserId` so only you can see it.
@@ -214,11 +211,11 @@ Private posts and replies visible only to you. Same `Post` data model and subcom
214
211
  | `gobi personal feed` | Your personal-space feed (posts + replies, newest first) |
215
212
  | `gobi personal list-posts` | List personal-space posts |
216
213
  | `gobi personal get-post <postId> [--full]` | Get a personal-space post with its ancestors and replies |
217
- | `gobi personal create-post [--title <t>] (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--repost-post-id <id>] [--attach <file>]…` | Create a private post in your personal space. `--vault-slug` attributes it to a vault you own. `--attach` works the same as on `gobi global create-post`. |
218
- | `gobi personal edit-post <postId> [--title <t>] [--content <c>] [--vault-slug <slug>]` | Edit a personal-space post you authored |
214
+ | `gobi personal create-post [--title <t>] (--content <c> \| --rich-text <json>) [--artifact <artifactId>] [--repost-post-id <id>] [--attach <file>]…` | Create a private post in your personal space. `--artifact` attaches an existing artifact to the post (repeatable). `--attach` works the same as on `gobi global create-post`. |
215
+ | `gobi personal edit-post <postId> [--title <t>] [--content <c>]` | Edit a personal-space post you authored |
219
216
  | `gobi personal delete-post <postId>` | Delete a personal-space post you authored |
220
- | `gobi personal create-reply <postId> (--content <c> \| --rich-text <json>) [--vault-slug <slug>] [--attach <file>]…` | Reply to a personal-space post (inherits the parent's private scope) |
221
- | `gobi personal edit-reply <replyId> [--content <c>] [--rich-text <json>] [--vault-slug <slug>]` | Edit a reply you authored |
217
+ | `gobi personal create-reply <postId> (--content <c> \| --rich-text <json>) [--attach <file>]…` | Reply to a personal-space post (inherits the parent's private scope) |
218
+ | `gobi personal edit-reply <replyId> [--content <c>] [--rich-text <json>]` | Edit a reply you authored |
222
219
  | `gobi personal delete-reply <replyId>` | Delete a reply you authored |
223
220
 
224
221
  ### Sense
@@ -14,7 +14,7 @@ First, verify the user is set up:
14
14
  gobi --json auth status
15
15
  ```
16
16
 
17
- Check that `.gobi/settings.yaml` exists. If you plan to publish to a Space (`gobi space create-post`), it must contain `selectedSpaceSlug` — otherwise stop and ask the user to run `gobi space warp` first. `vaultSlug` is optional for `gobi global create-post`; if missing the post is created without an `authorVaultSlug` (vault-less). Run `gobi vault init` if the user wants the post attributed to a vault they own.
17
+ Check that `.gobi/settings.yaml` exists. If you plan to publish to a Space (`gobi space create-post`), it must contain `selectedSpaceSlug` — otherwise stop and ask the user to run `gobi space warp` first.
18
18
 
19
19
  ## Draft a personal post
20
20
 
@@ -8,14 +8,7 @@ function readContent(value) {
8
8
  return value;
9
9
  }
10
10
  function buildPersonalPostUrl(post) {
11
- const id = post.id;
12
- const vaultSlug = post.vault?.vaultSlug ||
13
- post.authorVault?.vaultSlug ||
14
- post.authorVaultSlug ||
15
- undefined;
16
- return vaultSlug
17
- ? `${WEB_BASE_URL}/@${vaultSlug}?postId=${id}`
18
- : `${WEB_BASE_URL}/posts/${id}`;
11
+ return `${WEB_BASE_URL}/posts/${post.id}`;
19
12
  }
20
13
  function formatFeedLine(m) {
21
14
  const isReply = m.parentPostId != null ||
@@ -79,7 +72,6 @@ export function registerGlobalCommand(program) {
79
72
  .option("--limit <number>", "Items per page", "20")
80
73
  .option("--cursor <string>", "Pagination cursor from previous response")
81
74
  .option("--mine", "Only include posts authored by you")
82
- .option("--vault-slug <vaultSlug>", "Filter by author vault slug")
83
75
  .action(async (opts) => {
84
76
  const params = {
85
77
  limit: parseInt(opts.limit, 10),
@@ -88,8 +80,6 @@ export function registerGlobalCommand(program) {
88
80
  params.cursor = opts.cursor;
89
81
  if (opts.mine)
90
82
  params.mine = "true";
91
- if (opts.vaultSlug)
92
- params.vaultSlug = opts.vaultSlug;
93
83
  const resp = (await apiGet(`/posts`, params));
94
84
  if (isJsonMode(global)) {
95
85
  jsonOut({
@@ -108,10 +98,7 @@ export function registerGlobalCommand(program) {
108
98
  for (const t of items) {
109
99
  const author = t.author?.name ||
110
100
  `User ${t.authorId}`;
111
- const vaultSlug = t.vault?.vaultSlug ||
112
- t.authorVault?.vaultSlug ||
113
- "?";
114
- lines.push(`- [${t.id}] "${t.title}" by ${author} (vault: ${vaultSlug}, ${t.replyCount ?? 0} replies, ${t.createdAt})`);
101
+ lines.push(`- [${t.id}] "${t.title}" by ${author} (${t.replyCount ?? 0} replies, ${t.createdAt})`);
115
102
  }
116
103
  const footer = pagination.hasMore ? `\n Next cursor: ${pagination.nextCursor}` : "";
117
104
  console.log(`Posts (${items.length} items):\n` + lines.join("\n") + footer);
@@ -146,9 +133,6 @@ export function registerGlobalCommand(program) {
146
133
  const replies = (data.replies || []);
147
134
  const author = post.author?.name ||
148
135
  `User ${post.authorId}`;
149
- const vault = post.vault?.vaultSlug ||
150
- post.authorVault?.vaultSlug ||
151
- "?";
152
136
  const ancestorLines = [];
153
137
  if (ancestors.length) {
154
138
  ancestors.forEach((a, i) => {
@@ -169,7 +153,7 @@ export function registerGlobalCommand(program) {
169
153
  : `Post: ${post.title || "(no title)"}`;
170
154
  const output = [
171
155
  heading,
172
- `By: ${author} (vault: ${vault}) on ${post.createdAt}`,
156
+ `By: ${author} on ${post.createdAt}`,
173
157
  ...(ancestorLines.length
174
158
  ? ["", `Ancestors (${ancestors.length} items, root first):`, ...ancestorLines]
175
159
  : []),
@@ -93,10 +93,7 @@ export function registerPersonalCommand(program) {
93
93
  }
94
94
  const lines = [];
95
95
  for (const t of items) {
96
- const vaultSlug = t.vault?.vaultSlug ||
97
- t.authorVault?.vaultSlug ||
98
- "—";
99
- lines.push(`- [${t.id}] "${t.title ?? "(no title)"}" (vault: ${vaultSlug}, ${t.replyCount ?? 0} replies, ${t.createdAt})`);
96
+ lines.push(`- [${t.id}] "${t.title ?? "(no title)"}" (${t.replyCount ?? 0} replies, ${t.createdAt})`);
100
97
  }
101
98
  const footer = pagination.hasMore ? `\n Next cursor: ${pagination.nextCursor}` : "";
102
99
  console.log(`Personal-space posts (${items.length} of ${allItems.length} feed items):\n` +
@@ -138,9 +135,6 @@ export function registerPersonalCommand(program) {
138
135
  const replies = (data.replies || []);
139
136
  const author = post.author?.name ||
140
137
  `User ${post.authorId}`;
141
- const vault = post.vault?.vaultSlug ||
142
- post.authorVault?.vaultSlug ||
143
- "—";
144
138
  const ancestorLines = [];
145
139
  if (ancestors.length) {
146
140
  ancestors.forEach((a, i) => {
@@ -161,7 +155,7 @@ export function registerPersonalCommand(program) {
161
155
  : `Post: ${post.title || "(no title)"} (private)`;
162
156
  const output = [
163
157
  heading,
164
- `By: ${author} (vault: ${vault}) on ${post.createdAt}`,
158
+ `By: ${author} on ${post.createdAt}`,
165
159
  ...(ancestorLines.length
166
160
  ? ["", `Ancestors (${ancestors.length} items, root first):`, ...ancestorLines]
167
161
  : []),
@@ -20,7 +20,7 @@ export function registerVaultCommand(program) {
20
20
  });
21
21
  vault
22
22
  .command("create <slug>")
23
- .description("Create a new vault. <slug> must be unique (use 'gobi vault list' to see existing slugs); --name sets the display name. Does not change the configured vault — run 'gobi vault init' or 'gobi vault set-primary' afterwards if you want to anchor to it.")
23
+ .description("Create a new vault. <slug> must be unique (use 'gobi vault list' to see existing slugs); --name sets the display name. Does not change the configured vault — run 'gobi vault init' afterwards if you want to anchor to it.")
24
24
  .requiredOption("--name <name>", "Display name for the new vault")
25
25
  .action(async (slug, opts) => {
26
26
  const resp = (await apiPost("/vault", {
@@ -61,20 +61,6 @@ export function registerVaultCommand(program) {
61
61
  }
62
62
  console.log(`Deleted vault [${slug}].`);
63
63
  });
64
- vault
65
- .command("set-primary <slug>")
66
- .description("Mark a vault as your primary. Unsets primary on the other vaults you own. Slug must be passed explicitly.")
67
- .action(async (slug) => {
68
- const resp = (await apiPatch(`/vault/${slug}`, {
69
- isPrimary: true,
70
- }));
71
- const v = unwrapResp(resp);
72
- if (isJsonMode(vault)) {
73
- jsonOut(v);
74
- return;
75
- }
76
- console.log(`Set [${slug}] as primary vault.`);
77
- });
78
64
  vault
79
65
  .command("list")
80
66
  .description("List vaults you own.")
@@ -96,8 +82,7 @@ export function registerVaultCommand(program) {
96
82
  const lines = [];
97
83
  for (const v of items) {
98
84
  const slug = (v.vaultId || v.slug);
99
- const isPrimary = v.isPrimary ? " (primary)" : "";
100
- lines.push(`- [${slug}] ${v.name}${isPrimary}`);
85
+ lines.push(`- [${slug}] ${v.name}`);
101
86
  }
102
87
  console.log(`Vaults (${items.length}):\n` + lines.join("\n"));
103
88
  });
@@ -122,7 +107,6 @@ export function registerVaultCommand(program) {
122
107
  const status = {
123
108
  vaultSlug: slug,
124
109
  name: v.name,
125
- isPrimary: !!v.isPrimary,
126
110
  isPublished,
127
111
  title: v.title ?? null,
128
112
  description: v.description ?? null,
@@ -140,7 +124,7 @@ export function registerVaultCommand(program) {
140
124
  return;
141
125
  }
142
126
  const lines = [
143
- `Vault: [${slug}] ${v.name}${v.isPrimary ? " (primary)" : ""}`,
127
+ `Vault: [${slug}] ${v.name}`,
144
128
  ` Published: ${isPublished ? "yes" : "no"}`,
145
129
  ];
146
130
  if (!isPublished) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gobi-ai/cli",
3
- "version": "2.0.26",
3
+ "version": "2.0.28",
4
4
  "description": "CLI client for the Gobi collaborative knowledge platform",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -9,12 +9,12 @@ description: >-
9
9
  allowed-tools: Bash(gobi:*)
10
10
  metadata:
11
11
  author: gobi-ai
12
- version: "2.0.26"
12
+ version: "2.0.28"
13
13
  ---
14
14
 
15
15
  # gobi-artifact
16
16
 
17
- Gobi artifact commands for versioned, post-attachable creations (v2.0.26).
17
+ Gobi artifact commands for versioned, post-attachable creations (v2.0.28).
18
18
 
19
19
  Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
20
20
 
@@ -8,12 +8,12 @@ description: >-
8
8
  allowed-tools: Bash(gobi:*)
9
9
  metadata:
10
10
  author: gobi-ai
11
- version: "2.0.26"
11
+ version: "2.0.28"
12
12
  ---
13
13
 
14
14
  # gobi-core
15
15
 
16
- Core CLI commands for the Gobi collaborative knowledge platform (v2.0.26).
16
+ Core CLI commands for the Gobi collaborative knowledge platform (v2.0.28).
17
17
 
18
18
  ## Prerequisites
19
19
 
@@ -77,16 +77,8 @@ gobi auth status
77
77
  | `vault init` | no (it sets it up) | no | – |
78
78
  | `space list` / `warp [slug]` / `get [slug]` | no | no | – |
79
79
  | `space list-topics` / `feed` / `list-posts` / `get-post` / `create-post` / `edit-post` / `delete-post` / `create-reply` / `edit-reply` / `delete-reply` / `list-topic-posts` | no | **yes** | parent `--space-slug <slug>` |
80
- | `global feed` / `list-posts` / `get-post` / `delete-post` / `create-reply` / `edit-reply` / `delete-reply` | no | no | – |
81
- | `global create-post` | optional¹ | no | command-level `--vault-slug <slug>` |
82
- | `global edit-post` | optional² | no | command-level `--vault-slug <slug>` |
83
- | `personal feed` / `list-posts` / `get-post` / `delete-post` / `create-reply` / `edit-reply` / `delete-reply` | no | no | – |
84
- | `personal create-post` | optional¹ | no | command-level `--vault-slug <slug>` |
85
- | `personal edit-post` | optional² | no | command-level `--vault-slug <slug>` |
86
-
87
- ¹ `global create-post` accepts `--vault-slug`, optional. With no flag and no `vaultSlug` in `.gobi`, the post is created with no `authorVaultSlug` (vault-less personal post) — same as a Space post that isn't attributed to any vault. Set `--vault-slug` to attribute it.
88
-
89
- ² `global edit-post` only consults `--vault-slug` when you pass it explicitly. Use `--vault-slug ""` to detach an existing attribution; non-empty re-attaches.
80
+ | `global feed` / `list-posts` / `get-post` / `create-post` / `edit-post` / `delete-post` / `create-reply` / `edit-reply` / `delete-reply` | no | no | – |
81
+ | `personal feed` / `list-posts` / `get-post` / `create-post` / `edit-post` / `delete-post` / `create-reply` / `edit-reply` / `delete-reply` | no | no | |
90
82
 
91
83
  When a command needs vault or space and neither `.gobi` nor an override flag provides it, the CLI prints a one-line warning before the command runs (e.g. `Vault not set. Run 'gobi vault init' first, or pass --vault-slug.`). The warning is suppressed under `--json`.
92
84
 
@@ -7,7 +7,7 @@ description: >-
7
7
  allowed-tools: Bash(gobi:*)
8
8
  metadata:
9
9
  author: gobi-ai
10
- version: "2.0.26"
10
+ version: "2.0.28"
11
11
  ---
12
12
 
13
13
  # Gobi Homepage Developer Guide
@@ -10,12 +10,12 @@ description: >-
10
10
  allowed-tools: Bash(gobi:*)
11
11
  metadata:
12
12
  author: gobi-ai
13
- version: "2.0.26"
13
+ version: "2.0.28"
14
14
  ---
15
15
 
16
16
  # gobi-media
17
17
 
18
- Gobi media generation commands (v2.0.26).
18
+ Gobi media generation commands (v2.0.28).
19
19
 
20
20
  Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
21
21
 
@@ -7,12 +7,12 @@ description: >-
7
7
  allowed-tools: Bash(gobi:*)
8
8
  metadata:
9
9
  author: gobi-ai
10
- version: "2.0.26"
10
+ version: "2.0.28"
11
11
  ---
12
12
 
13
13
  # gobi-sense
14
14
 
15
- Gobi sense commands for activity and transcription data (v2.0.26).
15
+ Gobi sense commands for activity and transcription data (v2.0.28).
16
16
 
17
17
  Requires gobi-cli installed and authenticated. See the **gobi-core** skill for setup.
18
18
 
@@ -11,12 +11,12 @@ description: >-
11
11
  allowed-tools: Bash(gobi:*)
12
12
  metadata:
13
13
  author: gobi-ai
14
- version: "2.0.26"
14
+ version: "2.0.28"
15
15
  ---
16
16
 
17
17
  # gobi-space
18
18
 
19
- Gobi space, global, and personal-space posts (v2.0.26).
19
+ Gobi space, global, and personal-space posts (v2.0.28).
20
20
 
21
21
  Requires gobi-cli installed and authenticated. See the **gobi-core** skill for setup.
22
22
 
@@ -25,10 +25,10 @@ Requires gobi-cli installed and authenticated. See the **gobi-core** skill for s
25
25
  The same `Post` data type drives all three surfaces — the difference is **scope**:
26
26
 
27
27
  - **Space Post** — `gobi space …` — lives in a community space's feed.
28
- - **Personal Post** — `gobi global …` — surfaces in the public global feed. When attributed via `--vault-slug` it also surfaces on that vault's profile; with no vault attribution it lives only on the global feed.
28
+ - **Personal Post** — `gobi global …` — lives on the public global feed.
29
29
  - **Personal-space Post** — `gobi personal …` — private posts and replies visible only to the author. Same shape as `gobi global`, scoped via `personalSpaceUserId` so they never surface on the public feed.
30
30
 
31
- Anything you can do to a Space Post (reply, edit, delete, attribute to a vault) you can do to a Personal Post or a Personal-space Post.
31
+ Anything you can do to a Space Post (reply, edit, delete) you can do to a Personal Post or a Personal-space Post.
32
32
 
33
33
  - When the user wants to explore or catch up on what's happening in their space, invoke `/gobi:space-explore`.
34
34
  - When the user wants to share or post learnings from the current session, invoke `/gobi:space-share`.
@@ -45,9 +45,9 @@ Anything you can do to a Space Post (reply, edit, delete, attribute to a vault)
45
45
 
46
46
  The same applies to replies: a reply has only `--content` (no title), so do not synthesize a title-like heading at the top of a reply either.
47
47
 
48
- ## Author vault attribution (`--vault-slug`)
48
+ ## Attaching artifacts (`--artifact`)
49
49
 
50
- `create-post` / `edit-post` across all three scopes (`gobi space`, `gobi global`, `gobi personal`) accept `--vault-slug <slug>`. When set, the slug becomes the post's `authorVaultSlug` the vault the user is posting on behalf of. The caller must hold `role: 'owner'` on that vault. Pass `--vault-slug ""` on edit to detach.
50
+ Posts have no vault attribution. `create-post` across all three scopes (`gobi space`, `gobi global`, `gobi personal`) accepts `--artifact <artifactId>` (repeatable) to attach existing artifacts to the post. To author a vault-anchored document, create a markdown artifact (`gobi artifact create --kind markdown --vault-slug <slug>`) and attach it via `--artifact`. See the **gobi-artifact** skill.
51
51
 
52
52
  > **Wiki-link uploads moved to artifacts.** The `--auto-attachments` flag that used to upload `[[wiki-linked files]]` from a post body now lives on `gobi artifact create` / `gobi artifact revise` (markdown kinds). To publish a markdown creation with resolvable wikilinks, create a markdown artifact with `--vault-slug` + `--auto-attachments` and attach it to the post (`--post-id`). See the **gobi-artifact** skill. Before relying on wikilink resolution, confirm the anchor vault is published: `gobi --json vault status --vault-slug <slug>` should report `isPublished: true`.
53
53
 
@@ -63,13 +63,12 @@ Use `--attach` for media you want shown in the post itself; use a markdown **art
63
63
 
64
64
  Once a post is created, you can build a shareable URL from the response:
65
65
 
66
- - **Personal post on a vault** — `https://gobispace.com/@{authorVaultSlug}?postId={id}` (e.g. `https://gobispace.com/@jyk?postId=144869`). This is the canonical share link for `gobi global` posts attributed to a vault.
67
- - **Personal post without a vault** (created with no `--vault-slug`) — use `https://gobispace.com/posts/{id}` as a direct fallback.
66
+ - **Personal post** — `https://gobispace.com/posts/{id}` (e.g. `https://gobispace.com/posts/144869`). This is the canonical share link for `gobi global` posts.
68
67
  - **Space post** — `https://gobispace.com/spaces/{spaceSlug}?postId={id}` (overlay on the space feed) or `https://gobispace.com/spaces/{spaceSlug}/posts/{id}` (dedicated page).
69
68
  - **Vault profile** — `https://gobispace.com/@{vaultSlug}`.
70
69
  - **Vault file** — `https://gobispace.com/file/{vaultSlug}?path={path}` (e.g. `https://gobispace.com/file/jyk?path=notes/intro.md`). First-class URL for linking to a single file from a published vault — renders in the main feed chrome (not the vault homepage). Use this when a post body or reply needs to point readers at a specific vault file. URL-encode each path segment. See **gobi-vault** skill for full semantics.
71
70
 
72
- When you echo a "Post created!" line (or the JSON response is consumed by another agent), include the assembled URL using the fields actually returned (`id`, `authorVaultSlug`, `spaceSlug`) don't fabricate slugs.
71
+ When you echo a "Post created!" line (or the JSON response is consumed by another agent), include the assembled URL using the fields actually returned `id` for global posts, `spaceSlug` + `id` for space posts. Don't fabricate slugs.
73
72
 
74
73
  ## Prerequisites & space slug
75
74
 
@@ -84,7 +83,7 @@ When you echo a "Post created!" line (or the JSON response is consumed by anothe
84
83
 
85
84
  If `.gobi/settings.yaml` has no `selectedSpaceSlug` and `--space-slug` isn't passed, the command will error.
86
85
 
87
- `gobi global` commands target the public global feed and have no space requirement and no `.gobi` requirement. `gobi global create-post` is symmetric with `gobi space create-post`: a vault is **optional** — pass `--vault-slug <slug>` to attribute the post; with no flag the post is created without an `authorVaultSlug`.
86
+ `gobi global` commands target the public global feed and have no space requirement and no `.gobi` requirement. `gobi global create-post` is symmetric with `gobi space create-post`: attach existing artifacts with `--artifact <artifactId>` (repeatable).
88
87
 
89
88
  ## Important: JSON Mode
90
89
 
@@ -112,8 +111,8 @@ gobi --json space list-posts
112
111
  ### Space posts
113
112
  - `gobi space list-posts` — List posts in a space (paginated).
114
113
  - `gobi space get-post <postId>` — Get a post with its ancestors and replies (paginated). Ancestors and replies are returned together; there is no separate `ancestors` or `list-replies` command.
115
- - `gobi space create-post` — Create a space post. `--vault-slug` attributes it to a vault you own.
116
- - `gobi space edit-post <postId>` — Edit a space post. You must be the author. `--vault-slug ""` detaches the vault.
114
+ - `gobi space create-post` — Create a space post. `--artifact <artifactId>` (repeatable) attaches existing artifacts.
115
+ - `gobi space edit-post <postId>` — Edit a space post. You must be the author.
117
116
  - `gobi space delete-post <postId>` — Delete a space post. You must be the author.
118
117
 
119
118
  ### Space replies
@@ -126,25 +125,25 @@ gobi --json space list-posts
126
125
  `gobi global` is the same surface for Personal Posts — posts that live on the author's profile and surface in the public global feed.
127
126
 
128
127
  - `gobi global feed` — List the public global feed (posts and replies, newest first).
129
- - `gobi global list-posts` — List personal posts. `--mine` for your own; `--vault-slug <slug>` to filter by author vault.
128
+ - `gobi global list-posts` — List personal posts. `--mine` for your own.
130
129
  - `gobi global get-post <postId>` — Get a personal post with its ancestors and replies.
131
- - `gobi global create-post` — Create a personal post. `--vault-slug` works the same as on `space create-post`. It is optional: with no flag, the post is created without an `authorVaultSlug` (vault-less personal post).
132
- - `gobi global edit-post <postId>` — Edit a personal post you authored. `--vault-slug ""` detaches the vault.
130
+ - `gobi global create-post` — Create a personal post. `--artifact <artifactId>` (repeatable) attaches existing artifacts.
131
+ - `gobi global edit-post <postId>` — Edit a personal post you authored.
133
132
  - `gobi global delete-post <postId>` — Delete a personal post you authored.
134
133
  - `gobi global create-reply <postId>` — Reply to a personal post.
135
- - `gobi global edit-reply <replyId>` — Edit a reply you authored. Accepts `--vault-slug` for author attribution (mirrors `space edit-reply`).
134
+ - `gobi global edit-reply <replyId>` — Edit a reply you authored.
136
135
  - `gobi global delete-reply <replyId>` — Delete a reply you authored.
137
136
 
138
137
  ### Personal-space posts (private)
139
138
 
140
139
  `gobi personal` mirrors `gobi global`'s subcommand and write-flag shape, but every row is scoped to a private personal space (`personalSpaceUserId`). Nothing here surfaces on the public global feed — these posts are visible only to you. Use for private notes-as-posts, scratch drafts, or any post you want to author against your vault without making it public.
141
140
 
142
- A couple of read-side flags don't mirror — `personal feed` has no `--following` (there's no follow graph in a private space), and `personal list-posts` has no `--mine` / `--vault-slug` (everything in the personal space is already yours).
141
+ A couple of read-side flags don't mirror — `personal feed` has no `--following` (there's no follow graph in a private space), and `personal list-posts` has no `--mine` (everything in the personal space is already yours).
143
142
 
144
143
  - `gobi personal feed` — Your personal-space feed (posts and replies, newest first).
145
144
  - `gobi personal list-posts` — List your personal-space posts.
146
145
  - `gobi personal get-post <postId>` — Get a personal-space post with its ancestors and replies.
147
- - `gobi personal create-post` — Create a private personal-space post. Same flags as `gobi global create-post` (`--vault-slug`, `--repost-post-id`, `--attach`).
146
+ - `gobi personal create-post` — Create a private personal-space post. Same flags as `gobi global create-post` (`--artifact`, `--repost-post-id`, `--attach`).
148
147
  - `gobi personal edit-post <postId>` — Edit a personal-space post you authored.
149
148
  - `gobi personal delete-post <postId>` — Delete a personal-space post you authored.
150
149
  - `gobi personal create-reply <postId>` — Reply to a personal-space post (inherits the parent's private scope).
@@ -153,7 +152,7 @@ A couple of read-side flags don't mirror — `personal feed` has no `--following
153
152
 
154
153
  ## Confirm before mutating
155
154
 
156
- Most posts and replies are publicly visible — in a community space (`gobi space …`) or in the global feed (`gobi global …`). `gobi personal …` is the exception: those rows are private to the author. Either way, before running any write, confirm with the user — show the exact command and the resolved title, content (or a short preview), and `authorVaultSlug` if `--vault-slug` is set. This applies even when running autonomously.
155
+ Most posts and replies are publicly visible — in a community space (`gobi space …`) or in the global feed (`gobi global …`). `gobi personal …` is the exception: those rows are private to the author. Either way, before running any write, confirm with the user — show the exact command and the resolved title, content (or a short preview), and any attached artifact ids. This applies even when running autonomously.
157
156
 
158
157
  - `create-post` / `create-reply` — content goes live on submission.
159
158
  - `edit-post` / `edit-reply` — confirm the *new* content; people who already saw the original may re-see it.
@@ -43,11 +43,10 @@ Usage: gobi global list-posts [options]
43
43
  List posts in the global feed (paginated). Pass --mine to limit to your own posts.
44
44
 
45
45
  Options:
46
- --limit <number> Items per page (default: "20")
47
- --cursor <string> Pagination cursor from previous response
48
- --mine Only include posts authored by you
49
- --vault-slug <vaultSlug> Filter by author vault slug
50
- -h, --help display help for command
46
+ --limit <number> Items per page (default: "20")
47
+ --cursor <string> Pagination cursor from previous response
48
+ --mine Only include posts authored by you
49
+ -h, --help display help for command
51
50
  ```
52
51
 
53
52
  ## get-post
@@ -8,12 +8,12 @@ description: >-
8
8
  allowed-tools: Bash(gobi:*)
9
9
  metadata:
10
10
  author: gobi-ai
11
- version: "2.0.26"
11
+ version: "2.0.28"
12
12
  ---
13
13
 
14
14
  # gobi-vault
15
15
 
16
- Gobi vault commands for publishing your vault profile and syncing files (v2.0.26).
16
+ Gobi vault commands for publishing your vault profile and syncing files (v2.0.28).
17
17
 
18
18
  Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
19
19
 
@@ -23,7 +23,7 @@ Most `gobi vault …` commands resolve the target vault from the current directo
23
23
 
24
24
  Exceptions:
25
25
  - `vault init`, `vault list`, `vault create <slug>` — no `.gobi` required.
26
- - `vault delete <slug>`, `vault set-primary <slug>` — slug is a positional, no `.gobi` fallback.
26
+ - `vault delete <slug>` — slug is a positional, no `.gobi` fallback.
27
27
  - `vault rename <newName>`, `vault status` — accept an optional `--vault-slug <slug>` to target a vault other than the one in `.gobi`.
28
28
 
29
29
  ## Gobi Vault
@@ -41,11 +41,10 @@ gobi --json vault publish
41
41
  ## Available Commands
42
42
 
43
43
  - `gobi vault init` — Interactive: select an existing vault or create a new one. Writes `vaultSlug` to `.gobi/settings.yaml` in the current directory and seeds `PUBLISH.md`. Requires the user to be logged in (`gobi auth login`).
44
- - `gobi vault list` — List vaults you own. The primary vault is marked.
44
+ - `gobi vault list` — List vaults you own.
45
45
  - `gobi vault status` — Show the configured vault's publish state (`isPublished`), profile fields (`title`, `description`, `tags`), referenced files (`thumbnailPath`, `homepagePath`, `promptPath`), file count, and the public profile URL. Use this as a diagnostic before authoring a markdown artifact with `--auto-attachments` (see gobi-artifact skill) to confirm the vault is public — files uploaded to a non-public vault are stored on webdrive but are not visible at `gobispace.com/@{vaultSlug}` until you run `gobi vault publish`.
46
- - `gobi vault create <slug> --name <name>` — Create a new vault with the given slug and display name. Slug must be unique (use `vault list` to see what's taken). Does not change the configured vault — run `vault init` here or `vault set-primary <slug>` afterwards if you want to anchor to it.
46
+ - `gobi vault create <slug> --name <name>` — Create a new vault with the given slug and display name. Slug must be unique (use `vault list` to see what's taken). Does not change the configured vault — run `vault init` here afterwards if you want to anchor to it.
47
47
  - `gobi vault rename <newName>` — Rename the configured vault's display name. Pass `--vault-slug <slug>` to target another vault. Local handle only — the public profile title comes from `PUBLISH.md` frontmatter and is unaffected.
48
- - `gobi vault set-primary <slug>` — Mark a vault as your primary. Unsets primary on the others. Required arg, no `.gobi` fallback (avoids accidental promotion).
49
48
  - `gobi vault delete <slug>` — Delete a vault. Irreversible. Required arg, no `.gobi` fallback. The API will reject if the vault still owns content; clean up posts, members, and files first.
50
49
  - `gobi vault publish` — Upload `PUBLISH.md` to the vault root on webdrive. Triggers post-processing (vault profile sync, metadata update).
51
50
  - `gobi vault unpublish` — Delete `PUBLISH.md` from the vault on webdrive.
@@ -56,11 +55,10 @@ gobi --json vault publish
56
55
  Once a vault is published (i.e. `gobi vault status` reports `isPublished: yes`), it is reachable at predictable URLs:
57
56
 
58
57
  - **Vault profile** — `https://gobispace.com/@{vaultSlug}` (e.g. `https://gobispace.com/@jyk`).
59
- - **Direct link to a personal post on the vault** — `https://gobispace.com/@{vaultSlug}?postId={postId}` (e.g. `https://gobispace.com/@jyk?postId=144869`). Open in the vault profile with that post focused.
60
58
  - **Direct link to a vault file** — `https://gobispace.com/file/{vaultSlug}?path={path}` (e.g. `https://gobispace.com/file/jyk?path=notes/intro.md`). This is the first-class URL for sharing a single file from a vault — use it whenever you want a reader to land on one specific file. The page renders inside the main feed chrome (sidebar + header), so readers stay in `gobispace.com` instead of pivoting to the vault homepage. Paths without an extension are treated as markdown (the same wikilink-stem resolution webdrive uses), so `?path=intro` and `?path=intro.md` both resolve. URL-encode each path segment when assembling.
61
59
  - **Custom homepage** — when `homepage` is set in `PUBLISH.md` frontmatter, the vault profile URL renders that HTML file. See **gobi-homepage** skill.
62
60
 
63
- When linking back to your own posts or files, assemble the URL from concrete fields (the post's `authorVaultSlug` + `id`, or the vault's `vaultSlug` + the file's path) rather than guessing.
61
+ When linking to a vault file, assemble the URL from concrete fields (the vault's `vaultSlug` + the file's path) rather than guessing.
64
62
 
65
63
  ## Confirm before mutating
66
64
 
@@ -70,7 +68,6 @@ Every command in this skill writes external state — webdrive files and the pub
70
68
  - `vault unpublish` — removes the live profile. Always confirm.
71
69
  - `vault sync` — can overwrite remote or local files. Run `--dry-run` first and show the user the plan before re-running without `--dry-run`. With `--conflict server` or `--conflict client`, name which side is going to be overwritten.
72
70
  - `vault delete <slug>` — irreversible; cannot undo. Confirm the slug and that the user actually means to delete *that* vault before running.
73
- - `vault set-primary <slug>` — flips which vault is treated as primary across the user's account. Confirm the target.
74
71
  - `vault create` / `vault rename` — creating spends a slug permanently; renaming is reversible but visible. Show the user the resolved slug + name before running.
75
72
 
76
73
  ## PUBLISH.md Frontmatter Reference
@@ -11,12 +11,11 @@ Options:
11
11
  Commands:
12
12
  init Select or create the vault for the current directory. Writes .gobi/settings.yaml and seeds PUBLISH.md.
13
13
  create [options] <slug> Create a new vault. <slug> must be unique (use 'gobi vault list' to see existing slugs); --name sets the display name. Does not change the configured vault — run 'gobi
14
- vault init' or 'gobi vault set-primary' afterwards if you want to anchor to it.
14
+ vault init' afterwards if you want to anchor to it.
15
15
  rename [options] <newName> Rename a vault. Defaults to the configured vault (.gobi/settings.yaml); pass --vault-slug to target another. Does not affect PUBLISH.md frontmatter (which controls the
16
16
  public profile title) — this is the local display name only.
17
17
  delete <slug> Delete a vault. Irreversible. Slug must be passed explicitly (no .gobi fallback). The API will reject if the vault still owns content; clean up posts, members, and files
18
18
  first.
19
- set-primary <slug> Mark a vault as your primary. Unsets primary on the other vaults you own. Slug must be passed explicitly.
20
19
  list List vaults you own.
21
20
  status [options] Show the configured vault's publish state and metadata (use before authoring a markdown artifact with --auto-attachments to confirm the vault is public).
22
21
  publish Upload PUBLISH.md to the vault root on webdrive. Triggers post-processing (vault sync, metadata update).
@@ -41,8 +40,8 @@ Options:
41
40
  ```
42
41
  Usage: gobi vault create [options] <slug>
43
42
 
44
- Create a new vault. <slug> must be unique (use 'gobi vault list' to see existing slugs); --name sets the display name. Does not change the configured vault — run 'gobi vault init' or 'gobi vault
45
- set-primary' afterwards if you want to anchor to it.
43
+ Create a new vault. <slug> must be unique (use 'gobi vault list' to see existing slugs); --name sets the display name. Does not change the configured vault — run 'gobi vault init' afterwards if you
44
+ want to anchor to it.
46
45
 
47
46
  Options:
48
47
  --name <name> Display name for the new vault
@@ -73,17 +72,6 @@ Options:
73
72
  -h, --help display help for command
74
73
  ```
75
74
 
76
- ## set-primary
77
-
78
- ```
79
- Usage: gobi vault set-primary [options] <slug>
80
-
81
- Mark a vault as your primary. Unsets primary on the other vaults you own. Slug must be passed explicitly.
82
-
83
- Options:
84
- -h, --help display help for command
85
- ```
86
-
87
75
  ## list
88
76
 
89
77
  ```