@gobi-ai/cli 1.3.7 → 2.0.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 (37) hide show
  1. package/.claude-plugin/marketplace.json +6 -7
  2. package/.claude-plugin/plugin.json +4 -5
  3. package/README.md +78 -89
  4. package/commands/space-explore.md +10 -10
  5. package/commands/space-share.md +13 -7
  6. package/dist/commands/draft.js +213 -0
  7. package/dist/commands/global.js +205 -70
  8. package/dist/commands/init.js +5 -5
  9. package/dist/commands/{notes.js → saved.js} +112 -19
  10. package/dist/commands/space.js +92 -97
  11. package/dist/commands/sync.js +2 -56
  12. package/dist/commands/vault.js +113 -0
  13. package/dist/main.js +6 -10
  14. package/package.json +2 -2
  15. package/skills/gobi-core/SKILL.md +5 -7
  16. package/skills/gobi-core/references/space.md +18 -19
  17. package/skills/gobi-draft/SKILL.md +74 -0
  18. package/skills/gobi-draft/references/draft.md +109 -0
  19. package/skills/gobi-homepage/SKILL.md +16 -16
  20. package/skills/gobi-saved/SKILL.md +59 -0
  21. package/skills/gobi-saved/references/saved.md +52 -0
  22. package/skills/gobi-space/SKILL.md +34 -31
  23. package/skills/gobi-space/references/global.md +84 -24
  24. package/skills/gobi-space/references/space.md +45 -57
  25. package/skills/gobi-vault/SKILL.md +92 -0
  26. package/skills/{gobi-core/references/sync.md → gobi-vault/references/vault.md} +41 -2
  27. package/dist/commands/brain.js +0 -141
  28. package/dist/commands/feed.js +0 -148
  29. package/dist/commands/proposal.js +0 -185
  30. package/skills/gobi-brain/SKILL.md +0 -100
  31. package/skills/gobi-brain/references/brain.md +0 -66
  32. package/skills/gobi-feed/SKILL.md +0 -43
  33. package/skills/gobi-feed/references/feed.md +0 -80
  34. package/skills/gobi-notes/SKILL.md +0 -52
  35. package/skills/gobi-notes/references/notes.md +0 -82
  36. package/skills/gobi-proposal/SKILL.md +0 -66
  37. package/skills/gobi-proposal/references/proposal.md +0 -116
@@ -1,148 +0,0 @@
1
- import { readFileSync } from "fs";
2
- import { apiGet, apiPost, apiPatch, apiDelete } from "../client.js";
3
- import { isJsonMode, jsonOut, unwrapResp } from "./utils.js";
4
- export function registerFeedCommand(program) {
5
- const feed = program
6
- .command("feed")
7
- .description("Feed of brain updates from people across the platform.");
8
- // ── List ──
9
- feed
10
- .command("list")
11
- .description("List recent brain updates from the global public feed.")
12
- .option("--limit <number>", "Items per page", "20")
13
- .option("--cursor <string>", "Pagination cursor from previous response")
14
- .action(async (opts) => {
15
- const params = {
16
- limit: parseInt(opts.limit, 10),
17
- };
18
- if (opts.cursor)
19
- params.cursor = opts.cursor;
20
- const resp = (await apiGet(`/feed`, params));
21
- if (isJsonMode(feed)) {
22
- jsonOut({
23
- items: resp.data || [],
24
- pagination: resp.pagination || {},
25
- mentions: resp.mentions || {},
26
- });
27
- return;
28
- }
29
- const items = (resp.data || []);
30
- const pagination = (resp.pagination || {});
31
- if (!items.length) {
32
- console.log("No feed items found.");
33
- return;
34
- }
35
- const lines = [];
36
- for (const u of items) {
37
- const author = u.author?.name ||
38
- `User ${u.authorId}`;
39
- const vaultSlug = u.vault?.vaultSlug ||
40
- u.authorVault?.vaultSlug ||
41
- "?";
42
- const replyCount = u.replyCount ?? 0;
43
- const replies = replyCount ? `, ${replyCount} ${replyCount === 1 ? "reply" : "replies"}` : "";
44
- lines.push(`- [${u.id}] "${u.title}" by ${author} (vault: ${vaultSlug}, ${u.createdAt}${replies})`);
45
- }
46
- const footer = pagination.hasMore
47
- ? `\n Next cursor: ${pagination.nextCursor}`
48
- : "";
49
- console.log(`Feed (${items.length} items):\n` + lines.join("\n") + footer);
50
- });
51
- // ── Get ──
52
- feed
53
- .command("get <updateId>")
54
- .description("Get a feed brain update and its replies (paginated).")
55
- .option("--limit <number>", "Replies per page", "20")
56
- .option("--cursor <string>", "Pagination cursor from previous response")
57
- .option("--full", "Show full reply content without truncation")
58
- .action(async (updateId, opts) => {
59
- const params = {
60
- limit: parseInt(opts.limit, 10),
61
- };
62
- if (opts.cursor)
63
- params.cursor = opts.cursor;
64
- const resp = (await apiGet(`/feed/${updateId}`, params));
65
- const data = unwrapResp(resp);
66
- const pagination = (resp.pagination || {});
67
- const mentions = (resp.mentions || {});
68
- if (isJsonMode(feed)) {
69
- jsonOut({ ...data, pagination, mentions });
70
- return;
71
- }
72
- const update = (data.update || data);
73
- const replies = (data.replies || []);
74
- const author = update.author?.name ||
75
- `User ${update.authorId}`;
76
- const vault = update.vault?.vaultSlug ||
77
- update.authorVault?.vaultSlug ||
78
- "?";
79
- const replyLines = [];
80
- for (const r of replies) {
81
- const rAuthor = r.author?.name ||
82
- `User ${r.authorId}`;
83
- const text = r.content || "";
84
- const truncated = opts.full || text.length <= 200 ? text : text.slice(0, 200) + "…";
85
- replyLines.push(` - ${rAuthor}: ${truncated} (${r.createdAt})`);
86
- }
87
- const output = [
88
- `Feed Update: ${update.title || "(no title)"}`,
89
- `By: ${author} (vault: ${vault}) on ${update.createdAt}`,
90
- "",
91
- update.content || "",
92
- "",
93
- `Replies (${replies.length} items):`,
94
- ...replyLines,
95
- ...(pagination.hasMore
96
- ? [` Next cursor: ${pagination.nextCursor}`]
97
- : []),
98
- ].join("\n");
99
- console.log(output);
100
- });
101
- // ── Reply ──
102
- feed
103
- .command("post-reply <updateId>")
104
- .description("Post a reply to a brain update in the feed.")
105
- .requiredOption("--content <content>", 'Reply content (markdown supported, use "-" for stdin)')
106
- .action(async (updateId, opts) => {
107
- const content = opts.content === "-" ? readFileSync("/dev/stdin", "utf8") : opts.content;
108
- const resp = (await apiPost(`/feed/${updateId}/replies`, {
109
- content,
110
- }));
111
- const reply = unwrapResp(resp);
112
- const mentions = (resp.mentions || {});
113
- if (isJsonMode(feed)) {
114
- jsonOut({ ...reply, mentions });
115
- return;
116
- }
117
- console.log(`Reply created!\n ID: ${reply.id}\n Created: ${reply.createdAt}`);
118
- });
119
- // ── Edit reply ──
120
- feed
121
- .command("edit-reply <replyId>")
122
- .description("Edit a reply you authored in the feed.")
123
- .requiredOption("--content <content>", 'New reply content (markdown supported, use "-" for stdin)')
124
- .action(async (replyId, opts) => {
125
- const content = opts.content === "-" ? readFileSync("/dev/stdin", "utf8") : opts.content;
126
- const resp = (await apiPatch(`/brain-updates/replies/${replyId}`, {
127
- content,
128
- }));
129
- const reply = unwrapResp(resp);
130
- if (isJsonMode(feed)) {
131
- jsonOut(reply);
132
- return;
133
- }
134
- console.log(`Reply edited!\n ID: ${reply.id}\n Edited: ${reply.editedAt}`);
135
- });
136
- // ── Delete reply ──
137
- feed
138
- .command("delete-reply <replyId>")
139
- .description("Delete a reply you authored in the feed.")
140
- .action(async (replyId) => {
141
- await apiDelete(`/brain-updates/replies/${replyId}`);
142
- if (isJsonMode(feed)) {
143
- jsonOut({ replyId });
144
- return;
145
- }
146
- console.log(`Reply ${replyId} deleted.`);
147
- });
148
- }
@@ -1,185 +0,0 @@
1
- import { readFileSync } from "fs";
2
- import { apiDelete, apiGet, apiPatch, apiPost } from "../client.js";
3
- import { isJsonMode, jsonOut, unwrapResp } from "./utils.js";
4
- function readContent(value) {
5
- if (value === "-")
6
- return readFileSync("/dev/stdin", "utf8");
7
- return value;
8
- }
9
- function snippet(content, max = 80) {
10
- const single = content.replace(/\s+/g, " ");
11
- return single.length > max ? `${single.slice(0, max)}…` : single;
12
- }
13
- function formatProposalLine(p) {
14
- const status = p.status === "pending" ? "·" : p.status === "accepted" ? "✓" : "✗";
15
- return `- [${status}] p${p.priority} rev${p.revision} ${p.proposalId.slice(0, 8)} ${snippet(p.title)}`;
16
- }
17
- export function registerProposalCommand(program) {
18
- const proposal = program
19
- .command("proposal")
20
- .description("Proposals authored by your agent during chat. Top-5 feed the system prompt; accept/reject/revise update state and the client posts the synthesized message into the session.");
21
- // ── List ──
22
- proposal
23
- .command("list")
24
- .description("List proposals (priority ASC, then newest first).")
25
- .option("--limit <number>", "Max proposals to return (1-200)", "50")
26
- .action(async (opts) => {
27
- const params = { limit: parseInt(opts.limit, 10) };
28
- const resp = (await apiGet("/app/proposals", params));
29
- const items = (resp.data || []);
30
- if (isJsonMode(proposal)) {
31
- jsonOut(items);
32
- return;
33
- }
34
- if (!items.length) {
35
- console.log("No proposals.");
36
- return;
37
- }
38
- console.log(`Proposals (${items.length}):`);
39
- for (const p of items)
40
- console.log(formatProposalLine(p));
41
- });
42
- // ── Get ──
43
- proposal
44
- .command("get <proposalId>")
45
- .description("Show one proposal with its history.")
46
- .action(async (proposalId) => {
47
- const resp = (await apiGet(`/app/proposals/${proposalId}`));
48
- const p = unwrapResp(resp);
49
- if (isJsonMode(proposal)) {
50
- jsonOut(p);
51
- return;
52
- }
53
- console.log(`Proposal ${p.proposalId}`);
54
- console.log(` title: ${p.title}`);
55
- console.log(` status: ${p.status}`);
56
- console.log(` priority: ${p.priority}`);
57
- console.log(` revision: ${p.revision}`);
58
- console.log(` session: ${p.sessionId}`);
59
- console.log(` created: ${p.createdAt}`);
60
- console.log("");
61
- console.log("Content:");
62
- console.log(p.content);
63
- if (p.history.length) {
64
- console.log("");
65
- console.log("History:");
66
- for (const h of p.history) {
67
- console.log(` ${h.createdAt} rev${h.revision} ${h.type}`);
68
- if (h.type === "created" || h.type === "revised") {
69
- if (h.title !== undefined)
70
- console.log(` title: ${h.title}`);
71
- if (h.content !== undefined) {
72
- console.log(` content: ${snippet(h.content, 200)}`);
73
- }
74
- if (h.comment !== undefined)
75
- console.log(` comment: ${h.comment}`);
76
- }
77
- else if (h.type === "prioritized" && h.priority !== undefined) {
78
- console.log(` priority=${h.priority}`);
79
- }
80
- }
81
- }
82
- });
83
- // ── Add ──
84
- proposal
85
- .command("add <title> <content>")
86
- .description("Add a proposal. Pass '-' for content to read from stdin. Requires a chat session — the agent runtime exports GOBI_SESSION_ID automatically; outside that, pass --session.")
87
- .option("--session <sessionId>", "Originating chat session UUID. Falls back to $GOBI_SESSION_ID when set.")
88
- .option("--priority <number>", "Priority (lower = higher), default 100")
89
- .action(async (title, content, opts) => {
90
- const sessionId = opts.session || process.env.GOBI_SESSION_ID || "";
91
- if (!sessionId) {
92
- console.error("Error: missing session id. Pass --session <uuid> or set GOBI_SESSION_ID in the environment.");
93
- process.exit(1);
94
- }
95
- const body = {
96
- title,
97
- content: readContent(content),
98
- sessionId,
99
- };
100
- if (opts.priority)
101
- body.priority = parseInt(opts.priority, 10);
102
- const resp = (await apiPost("/app/proposals", body));
103
- const p = unwrapResp(resp);
104
- if (isJsonMode(proposal)) {
105
- jsonOut(p);
106
- return;
107
- }
108
- console.log(`Created ${p.proposalId} (priority ${p.priority}).`);
109
- });
110
- // ── Delete ──
111
- proposal
112
- .command("delete <proposalId>")
113
- .description("Delete a proposal.")
114
- .action(async (proposalId) => {
115
- await apiDelete(`/app/proposals/${proposalId}`);
116
- if (isJsonMode(proposal)) {
117
- jsonOut({ deleted: proposalId });
118
- return;
119
- }
120
- console.log(`Deleted ${proposalId}.`);
121
- });
122
- // ── Prioritize ──
123
- proposal
124
- .command("prioritize <proposalId> <priority>")
125
- .description("Set priority (lower = higher). Top 5 feed the system prompt.")
126
- .action(async (proposalId, priority) => {
127
- const resp = (await apiPatch(`/app/proposals/${proposalId}/priority`, {
128
- priority: parseInt(priority, 10),
129
- }));
130
- const p = unwrapResp(resp);
131
- if (isJsonMode(proposal)) {
132
- jsonOut(p);
133
- return;
134
- }
135
- console.log(`Set ${p.proposalId} priority to ${p.priority}.`);
136
- });
137
- // ── Accept ──
138
- proposal
139
- .command("accept <proposalId>")
140
- .description("Mark the proposal accepted. The client posts the synthesized message into the session.")
141
- .action(async (proposalId) => {
142
- const resp = (await apiPost(`/app/proposals/${proposalId}/accept`));
143
- const p = unwrapResp(resp);
144
- if (isJsonMode(proposal)) {
145
- jsonOut(p);
146
- return;
147
- }
148
- console.log(`Accepted ${p.proposalId}.`);
149
- });
150
- // ── Reject ──
151
- proposal
152
- .command("reject <proposalId>")
153
- .description("Mark the proposal rejected. The client posts the synthesized message into the session.")
154
- .action(async (proposalId) => {
155
- const resp = (await apiPost(`/app/proposals/${proposalId}/reject`));
156
- const p = unwrapResp(resp);
157
- if (isJsonMode(proposal)) {
158
- jsonOut(p);
159
- return;
160
- }
161
- console.log(`Rejected ${p.proposalId}.`);
162
- });
163
- // ── Revise ──
164
- proposal
165
- .command("revise <proposalId> <comment>")
166
- .description("Bump the proposal to a new revision. Comment is required; pass --title and/or --content to update the proposal in the same call. Pass '-' for any of comment/title/content to read from stdin.")
167
- .option("--title <title>", "Replacement title")
168
- .option("--content <content>", "Replacement content; pass '-' to read from stdin")
169
- .action(async (proposalId, comment, opts) => {
170
- const body = {
171
- comment: readContent(comment),
172
- };
173
- if (opts.title !== undefined)
174
- body.title = opts.title;
175
- if (opts.content !== undefined)
176
- body.content = readContent(opts.content);
177
- const resp = (await apiPost(`/app/proposals/${proposalId}/revise`, body));
178
- const p = unwrapResp(resp);
179
- if (isJsonMode(proposal)) {
180
- jsonOut(p);
181
- return;
182
- }
183
- console.log(`Revised ${p.proposalId} → rev${p.revision}.`);
184
- });
185
- }
@@ -1,100 +0,0 @@
1
- ---
2
- name: gobi-brain
3
- description: >-
4
- Gobi brain commands for knowledge management: search public brains by text
5
- and semantic similarity, ask brains questions, and publish/unpublish
6
- BRAIN.md. Use when the user wants to search knowledge, ask a brain, or
7
- publish their brain document.
8
- allowed-tools: Bash(gobi:*)
9
- metadata:
10
- author: gobi-ai
11
- version: "0.9.13"
12
- ---
13
-
14
- # gobi-brain
15
-
16
- Gobi brain commands for knowledge management (v0.9.13).
17
-
18
- Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
19
-
20
- ## Gobi Brain — Knowledge Management
21
-
22
- `gobi brain` commands manage your vault's brain: search across all spaces, ask brains questions, and publish/unpublish your BRAIN.md. Public brains are accessible at `https://gobispace.com/@{vaultSlug}`.
23
-
24
- > **Brain updates have moved to threads.** To post user-level content, use `gobi global create-thread` (global space) or `gobi space create-thread` (a specific space). See the **gobi-space** skill.
25
-
26
- ## Important: JSON Mode
27
-
28
- For programmatic/agent usage, always pass `--json` as a **global** option (before the subcommand):
29
-
30
- ```bash
31
- gobi --json brain search --query "machine learning"
32
- ```
33
-
34
- ## Available Commands
35
-
36
- - `gobi brain search` — Search public brains by text and semantic similarity.
37
- - `gobi brain ask` — Ask a brain a question. Creates a targeted session (1:1 conversation).
38
- - `gobi brain publish` — Upload BRAIN.md to the vault root on webdrive. Triggers post-processing (brain sync, metadata update, Discord notification).
39
- - `gobi brain unpublish` — Delete BRAIN.md from the vault on webdrive.
40
-
41
- ## BRAIN.md Frontmatter Reference
42
-
43
- `BRAIN.md` is the metadata file at the root of every vault. Its YAML frontmatter controls the vault's public profile, homepage, and AI agent behavior. Example:
44
-
45
- ```yaml
46
- ---
47
- title: My Brain
48
- tags:
49
- - topic1
50
- - topic2
51
- description: A short description of what this brain is about.
52
- thumbnail: "[[BRAIN.png]]"
53
- homepage: "[[app/home.html?nav=false]]"
54
- prompt: "[[system-prompt.md]]"
55
- ---
56
- ```
57
-
58
- ### Fields
59
-
60
- - **`title`** (required) — Display name of the brain/vault.
61
- - **`description`** (required for public listing) — Short description shown on the brain card and public profile. Without both `title` and `description`, the brain won't appear in the public catalog.
62
- - **`tags`** — Tags for categorization and discovery. Supports YAML block list or inline array format:
63
- ```yaml
64
- # Block list
65
- tags:
66
- - ambient ai
67
- - wearables
68
-
69
- # Inline array
70
- tags: [ambient ai, wearables]
71
- ```
72
- - **`thumbnail`** — Profile image for the brain card. Uses wiki-link syntax pointing to an image file in the vault (e.g. `"[[BRAIN.png]]"`).
73
- - **`homepage`** — Custom HTML page to serve as the vault's public homepage at `gobispace.com/@{vaultSlug}`. Uses wiki-link syntax pointing to an HTML file in the vault. Supports a `nav` query parameter to control Gobi's sidebar navigation:
74
- - `"[[app/home.html]]"` — Shows the Gobi sidebar alongside the homepage (default)
75
- - `"[[app/home.html?nav=false]]"` — Full-screen, no Gobi sidebar/chrome
76
- - **`prompt`** — Wiki-link to a custom system prompt file for the brain's AI agent (e.g. `"[[system-prompt.md]]"`).
77
-
78
- > For details on building custom HTML homepages and using the `window.gobi` API, see the **gobi-homepage** skill.
79
-
80
- ## Publishing Workflow
81
-
82
- After editing `BRAIN.md` frontmatter, follow these steps to make your changes live:
83
-
84
- 1. **Edit `BRAIN.md`** in the vault root with the desired frontmatter fields.
85
- 2. **Sync referenced files** — if the homepage HTML, thumbnail image, or prompt file is new or updated, upload them first:
86
- ```bash
87
- gobi sync
88
- ```
89
- 3. **Publish the brain**:
90
- ```bash
91
- gobi brain publish
92
- ```
93
- This uploads `BRAIN.md` to webdrive, triggers post-processing that extracts metadata (title, description, tags, thumbnail, homepage path), updates the vault's public profile, and sends a Discord notification.
94
- 4. The vault is now live at `https://gobispace.com/@{vaultSlug}`.
95
-
96
- > **Important:** Any time you change `BRAIN.md` frontmatter (e.g. adding or updating `homepage`), you must re-run `gobi brain publish` for the changes to take effect.
97
-
98
- ## Reference Documentation
99
-
100
- - [gobi brain](references/brain.md)
@@ -1,66 +0,0 @@
1
- # gobi brain
2
-
3
- ```
4
- Usage: gobi brain [options] [command]
5
-
6
- Brain commands (search, ask, publish, unpublish).
7
-
8
- Options:
9
- -h, --help display help for command
10
-
11
- Commands:
12
- search [options] Search public brains by text and semantic similarity.
13
- ask [options] Ask a brain a question. Creates a targeted session (1:1 conversation).
14
- publish Upload BRAIN.md to the vault root on webdrive. Triggers post-processing (brain sync, metadata update, Discord notification).
15
- unpublish Delete BRAIN.md from the vault on webdrive.
16
- help [command] display help for command
17
- ```
18
-
19
- ## search
20
-
21
- ```
22
- Usage: gobi brain search [options]
23
-
24
- Search public brains by text and semantic similarity.
25
-
26
- Options:
27
- --query <query> Search query
28
- -h, --help display help for command
29
- ```
30
-
31
- ## ask
32
-
33
- ```
34
- Usage: gobi brain ask [options]
35
-
36
- Ask a brain a question. Creates a targeted session (1:1 conversation).
37
-
38
- Options:
39
- --vault-slug <vaultSlug> Slug of the brain/vault to ask
40
- --question <question> The question to ask (markdown supported)
41
- --rich-text <richText> Rich-text JSON array (e.g. [{"type":"text","text":"hello"}])
42
- --mode <mode> Session mode: "auto" or "manual"
43
- -h, --help display help for command
44
- ```
45
-
46
- ## publish
47
-
48
- ```
49
- Usage: gobi brain publish [options]
50
-
51
- Upload BRAIN.md to the vault root on webdrive. Triggers post-processing (brain sync, metadata update, Discord notification).
52
-
53
- Options:
54
- -h, --help display help for command
55
- ```
56
-
57
- ## unpublish
58
-
59
- ```
60
- Usage: gobi brain unpublish [options]
61
-
62
- Delete BRAIN.md from the vault on webdrive.
63
-
64
- Options:
65
- -h, --help display help for command
66
- ```
@@ -1,43 +0,0 @@
1
- ---
2
- name: gobi-feed
3
- description: >-
4
- Gobi feed commands for the global brain-update feed: list recent brain
5
- updates from people across the platform, read a single update with its
6
- replies, and post replies. Use when the user wants to browse what others
7
- are sharing, follow public discussions, or join a thread.
8
- allowed-tools: Bash(gobi:*)
9
- metadata:
10
- author: gobi-ai
11
- version: "1.3.1"
12
- ---
13
-
14
- # gobi-feed
15
-
16
- Gobi feed commands for the global brain-update feed (v1.3.1).
17
-
18
- Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
19
-
20
- ## What is the feed?
21
-
22
- The feed is the platform-wide stream of brain updates from public vaults — short posts, learnings, and announcements people share publicly. Use `gobi feed` to read what others are posting and to reply to a discussion.
23
-
24
- To post your own brain update, use `gobi brain post-update` (the feed is read-mostly; posts are scoped to your vault).
25
-
26
- ## Important: JSON Mode
27
-
28
- For programmatic/agent usage, always pass `--json` as a **global** option (before the subcommand):
29
-
30
- ```bash
31
- gobi --json feed list
32
- ```
33
-
34
- ## Available Commands
35
-
36
- - `gobi feed` — Feed of brain updates from people across the platform.
37
- - `gobi feed list` — List recent brain updates from the global public feed.
38
- - `gobi feed get` — Get a feed brain update and its replies (paginated).
39
- - `gobi feed reply` — Reply to a brain update in the feed.
40
-
41
- ## Reference Documentation
42
-
43
- - [gobi feed](references/feed.md)
@@ -1,80 +0,0 @@
1
- # gobi feed
2
-
3
- ```
4
- Usage: gobi feed [options] [command]
5
-
6
- Feed of brain updates from people across the platform.
7
-
8
- Options:
9
- -h, --help display help for command
10
-
11
- Commands:
12
- list [options] List recent brain updates from the global public feed.
13
- get [options] <updateId> Get a feed brain update and its replies (paginated).
14
- post-reply [options] <updateId> Post a reply to a brain update in the feed.
15
- edit-reply [options] <replyId> Edit a reply you authored in the feed.
16
- delete-reply <replyId> Delete a reply you authored in the feed.
17
- help [command] display help for command
18
- ```
19
-
20
- ## list
21
-
22
- ```
23
- Usage: gobi feed list [options]
24
-
25
- List recent brain updates from the global public feed.
26
-
27
- Options:
28
- --limit <number> Items per page (default: "20")
29
- --cursor <string> Pagination cursor from previous response
30
- -h, --help display help for command
31
- ```
32
-
33
- ## get
34
-
35
- ```
36
- Usage: gobi feed get [options] <updateId>
37
-
38
- Get a feed brain update and its replies (paginated).
39
-
40
- Options:
41
- --limit <number> Replies per page (default: "20")
42
- --cursor <string> Pagination cursor from previous response
43
- --full Show full reply content without truncation
44
- -h, --help display help for command
45
- ```
46
-
47
- ## post-reply
48
-
49
- ```
50
- Usage: gobi feed post-reply [options] <updateId>
51
-
52
- Post a reply to a brain update in the feed.
53
-
54
- Options:
55
- --content <content> Reply content (markdown supported, use "-" for stdin)
56
- -h, --help display help for command
57
- ```
58
-
59
- ## edit-reply
60
-
61
- ```
62
- Usage: gobi feed edit-reply [options] <replyId>
63
-
64
- Edit a reply you authored in the feed.
65
-
66
- Options:
67
- --content <content> New reply content (markdown supported, use "-" for stdin)
68
- -h, --help display help for command
69
- ```
70
-
71
- ## delete-reply
72
-
73
- ```
74
- Usage: gobi feed delete-reply [options] <replyId>
75
-
76
- Delete a reply you authored in the feed.
77
-
78
- Options:
79
- -h, --help display help for command
80
- ```
@@ -1,52 +0,0 @@
1
- ---
2
- name: gobi-notes
3
- description: >-
4
- Gobi notes commands for personal note-taking: create, list (by day or
5
- cursor), get, edit, and delete notes. Notes are private, dated entries
6
- optionally tied to an agent. Use when the user wants to capture, review,
7
- or modify their own notes.
8
- allowed-tools: Bash(gobi:*)
9
- metadata:
10
- author: gobi-ai
11
- version: "1.3.2"
12
- ---
13
-
14
- # gobi-notes
15
-
16
- Gobi notes commands for personal note-taking (v1.3.2).
17
-
18
- Requires gobi-cli installed and authenticated. See gobi-core skill for setup.
19
-
20
- ## What is a note?
21
-
22
- A note is a private, dated entry you keep for yourself. Each note has:
23
- - **content** — markdown text (optional if attachments are present, but the CLI requires `--content` since it doesn't yet upload attachments)
24
- - **eventDate** — derived from your timezone at create time, used to group notes by day
25
- - **agentId** — optional association with a Gobi agent
26
-
27
- Notes are user-private — only you can see, edit, or delete your own notes.
28
-
29
- ## Timezone
30
-
31
- `gobi notes list` and `gobi notes create` need a timezone to compute the calendar day. The CLI auto-detects your system timezone via `Intl.DateTimeFormat().resolvedOptions().timeZone`. Override with `--timezone <iana-name>` (e.g. `America/Los_Angeles`).
32
-
33
- ## Important: JSON Mode
34
-
35
- For programmatic/agent usage, always pass `--json` as a **global** option (before the subcommand):
36
-
37
- ```bash
38
- gobi --json notes list --date 2026-04-27
39
- ```
40
-
41
- ## Available Commands
42
-
43
- - `gobi notes` — Personal notes (create, list, get, edit, delete).
44
- - `gobi notes list` — List your notes. Without --date, returns recent notes via cursor pagination. With --date, returns all notes for that day.
45
- - `gobi notes get` — Get a single note by id.
46
- - `gobi notes create` — Create a note. Provide --content (use '-' for stdin) and/or attachments.
47
- - `gobi notes edit` — Edit a note. Provide --content and/or --agent-id.
48
- - `gobi notes delete` — Delete a note you authored.
49
-
50
- ## Reference Documentation
51
-
52
- - [gobi notes](references/notes.md)