grounder 0.0.1 → 0.1.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.
- package/LICENSE +21 -0
- package/README.md +204 -2
- package/dist/agents/claude.d.ts +8 -0
- package/dist/agents/claude.d.ts.map +1 -0
- package/dist/agents/claude.js +50 -0
- package/dist/agents/claude.js.map +1 -0
- package/dist/agents/cursor.d.ts +8 -0
- package/dist/agents/cursor.d.ts.map +1 -0
- package/dist/agents/cursor.js +50 -0
- package/dist/agents/cursor.js.map +1 -0
- package/dist/agents/index.d.ts +11 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +23 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/types.d.ts +22 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +108 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/check.d.ts +13 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +21 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +204 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/handoff/list.d.ts +23 -0
- package/dist/commands/handoff/list.d.ts.map +1 -0
- package/dist/commands/handoff/list.js +64 -0
- package/dist/commands/handoff/list.js.map +1 -0
- package/dist/commands/handoff.d.ts +25 -0
- package/dist/commands/handoff.d.ts.map +1 -0
- package/dist/commands/handoff.js +47 -0
- package/dist/commands/handoff.js.map +1 -0
- package/dist/commands/note.d.ts +10 -0
- package/dist/commands/note.d.ts.map +1 -0
- package/dist/commands/note.js +33 -0
- package/dist/commands/note.js.map +1 -0
- package/dist/commands/path/logs.d.ts +7 -0
- package/dist/commands/path/logs.d.ts.map +1 -0
- package/dist/commands/path/logs.js +17 -0
- package/dist/commands/path/logs.js.map +1 -0
- package/dist/commands/path/notes.d.ts +7 -0
- package/dist/commands/path/notes.d.ts.map +1 -0
- package/dist/commands/path/notes.js +17 -0
- package/dist/commands/path/notes.js.map +1 -0
- package/dist/commands/repo/init.d.ts +11 -0
- package/dist/commands/repo/init.d.ts.map +1 -0
- package/dist/commands/repo/init.js +78 -0
- package/dist/commands/repo/init.js.map +1 -0
- package/dist/commands/require-linked.d.ts +7 -0
- package/dist/commands/require-linked.d.ts.map +1 -0
- package/dist/commands/require-linked.js +19 -0
- package/dist/commands/require-linked.js.map +1 -0
- package/dist/commands/status.d.ts +7 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +101 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/vault/init.d.ts +11 -0
- package/dist/commands/vault/init.d.ts.map +1 -0
- package/dist/commands/vault/init.js +73 -0
- package/dist/commands/vault/init.js.map +1 -0
- package/dist/connector/git.d.ts +12 -0
- package/dist/connector/git.d.ts.map +1 -0
- package/dist/connector/git.js +53 -0
- package/dist/connector/git.js.map +1 -0
- package/dist/connector/home.d.ts +13 -0
- package/dist/connector/home.d.ts.map +1 -0
- package/dist/connector/home.js +52 -0
- package/dist/connector/home.js.map +1 -0
- package/dist/connector/linked.d.ts +25 -0
- package/dist/connector/linked.d.ts.map +1 -0
- package/dist/connector/linked.js +24 -0
- package/dist/connector/linked.js.map +1 -0
- package/dist/connector/project-id.d.ts +17 -0
- package/dist/connector/project-id.d.ts.map +1 -0
- package/dist/connector/project-id.js +102 -0
- package/dist/connector/project-id.js.map +1 -0
- package/dist/connector/repo.d.ts +9 -0
- package/dist/connector/repo.d.ts.map +1 -0
- package/dist/connector/repo.js +41 -0
- package/dist/connector/repo.js.map +1 -0
- package/dist/connector/vault.d.ts +12 -0
- package/dist/connector/vault.d.ts.map +1 -0
- package/dist/connector/vault.js +27 -0
- package/dist/connector/vault.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/util/fs.d.ts +8 -0
- package/dist/util/fs.d.ts.map +1 -0
- package/dist/util/fs.js +36 -0
- package/dist/util/fs.js.map +1 -0
- package/dist/util/parse-args.d.ts +12 -0
- package/dist/util/parse-args.d.ts.map +1 -0
- package/dist/util/parse-args.js +49 -0
- package/dist/util/parse-args.js.map +1 -0
- package/dist/util/path.d.ts +10 -0
- package/dist/util/path.d.ts.map +1 -0
- package/dist/util/path.js +22 -0
- package/dist/util/path.js.map +1 -0
- package/dist/util/project-id.d.ts +2 -0
- package/dist/util/project-id.d.ts.map +1 -0
- package/dist/util/project-id.js +8 -0
- package/dist/util/project-id.js.map +1 -0
- package/dist/util/prompt.d.ts +2 -0
- package/dist/util/prompt.d.ts.map +1 -0
- package/dist/util/prompt.js +19 -0
- package/dist/util/prompt.js.map +1 -0
- package/dist/util/timestamp-slug.d.ts +38 -0
- package/dist/util/timestamp-slug.d.ts.map +1 -0
- package/dist/util/timestamp-slug.js +66 -0
- package/dist/util/timestamp-slug.js.map +1 -0
- package/dist/util/yaml.d.ts +6 -0
- package/dist/util/yaml.d.ts.map +1 -0
- package/dist/util/yaml.js +13 -0
- package/dist/util/yaml.js.map +1 -0
- package/dist/vault/layout.d.ts +13 -0
- package/dist/vault/layout.d.ts.map +1 -0
- package/dist/vault/layout.js +22 -0
- package/dist/vault/layout.js.map +1 -0
- package/dist/vault/list-handoffs.d.ts +10 -0
- package/dist/vault/list-handoffs.d.ts.map +1 -0
- package/dist/vault/list-handoffs.js +30 -0
- package/dist/vault/list-handoffs.js.map +1 -0
- package/dist/vault/write-handoff.d.ts +21 -0
- package/dist/vault/write-handoff.d.ts.map +1 -0
- package/dist/vault/write-handoff.js +40 -0
- package/dist/vault/write-handoff.js.map +1 -0
- package/dist/vault/write-note.d.ts +11 -0
- package/dist/vault/write-note.d.ts.map +1 -0
- package/dist/vault/write-note.js +15 -0
- package/dist/vault/write-note.js.map +1 -0
- package/package.json +45 -10
- package/templates/agents/claude/commands/grounder-note.md +11 -0
- package/templates/agents/claude/commands/grounder-task-handoff.md +54 -0
- package/templates/agents/claude/commands/grounder-task.md +20 -0
- package/templates/agents/cursor/commands/grounder-note.md +11 -0
- package/templates/agents/cursor/commands/grounder-task-handoff.md +54 -0
- package/templates/agents/cursor/commands/grounder-task.md +20 -0
- package/templates/vault/session-handoff.md +19 -0
- package/index.js +0 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { mkdir } from "node:fs/promises";
|
|
2
|
+
import { writeUniqueMarkdown } from "../util/fs.js";
|
|
3
|
+
import { timestampedBasename } from "../util/timestamp-slug.js";
|
|
4
|
+
import { yamlDoubleQuoted } from "../util/yaml.js";
|
|
5
|
+
function buildFrontmatter(options) {
|
|
6
|
+
const lines = ["---", `project: ${yamlDoubleQuoted(options.projectId)}`];
|
|
7
|
+
if (options.branch) {
|
|
8
|
+
lines.push(`branch: ${yamlDoubleQuoted(options.branch)}`);
|
|
9
|
+
}
|
|
10
|
+
lines.push(`created: ${yamlDoubleQuoted(options.created)}`);
|
|
11
|
+
if (options.title) {
|
|
12
|
+
lines.push(`title: ${yamlDoubleQuoted(options.title)}`);
|
|
13
|
+
}
|
|
14
|
+
lines.push("---");
|
|
15
|
+
return `${lines.join("\n")}\n\n`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Writes a new handoff markdown file under `logsDir` (created if missing).
|
|
19
|
+
* Prepends YAML frontmatter (`project`, optional `branch`/`title`, `created`)
|
|
20
|
+
* ahead of `body`. Never overwrites — exclusive create with `_NN` on collision.
|
|
21
|
+
* @param logsDir - Absolute project logs directory.
|
|
22
|
+
* @param body - Agent-supplied markdown (sections such as Done / Next); not validated here.
|
|
23
|
+
* @returns Absolute path of the written file.
|
|
24
|
+
*/
|
|
25
|
+
export async function writeHandoff(logsDir, body, options) {
|
|
26
|
+
const now = options.now ?? new Date();
|
|
27
|
+
await mkdir(logsDir, { recursive: true });
|
|
28
|
+
const basename = timestampedBasename(body, {
|
|
29
|
+
title: options.title,
|
|
30
|
+
now,
|
|
31
|
+
});
|
|
32
|
+
const content = buildFrontmatter({
|
|
33
|
+
projectId: options.projectId,
|
|
34
|
+
branch: options.branch,
|
|
35
|
+
created: now.toISOString(),
|
|
36
|
+
title: options.title,
|
|
37
|
+
}) + body;
|
|
38
|
+
return writeUniqueMarkdown(logsDir, basename, content);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=write-handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-handoff.js","sourceRoot":"","sources":["../../src/vault/write-handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAcnD,SAAS,gBAAgB,CAAC,OAKzB;IACC,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,YAAY,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACzE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,WAAW,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,YAAY,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,UAAU,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,IAAY,EACZ,OAA4B;IAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE;QACzC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,GAAG;KACJ,CAAC,CAAC;IACH,MAAM,OAAO,GACX,gBAAgB,CAAC;QACf,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,GAAG,IAAI,CAAC;IAEZ,OAAO,mBAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface WriteNoteOptions {
|
|
2
|
+
title?: string;
|
|
3
|
+
now?: Date;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Writes a new note markdown file under `notesDir` (created if missing).
|
|
7
|
+
* Never overwrites — exclusive create with `_NN` on collision.
|
|
8
|
+
* @returns Absolute path of the written file.
|
|
9
|
+
*/
|
|
10
|
+
export declare function writeNote(notesDir: string, text: string, options?: WriteNoteOptions): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=write-note.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-note.d.ts","sourceRoot":"","sources":["../../src/vault/write-note.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { mkdir } from "node:fs/promises";
|
|
2
|
+
import { writeUniqueMarkdown } from "../util/fs.js";
|
|
3
|
+
import { timestampedBasename } from "../util/timestamp-slug.js";
|
|
4
|
+
/**
|
|
5
|
+
* Writes a new note markdown file under `notesDir` (created if missing).
|
|
6
|
+
* Never overwrites — exclusive create with `_NN` on collision.
|
|
7
|
+
* @returns Absolute path of the written file.
|
|
8
|
+
*/
|
|
9
|
+
export async function writeNote(notesDir, text, options = {}) {
|
|
10
|
+
const now = options.now ?? new Date();
|
|
11
|
+
await mkdir(notesDir, { recursive: true });
|
|
12
|
+
const basename = timestampedBasename(text, { title: options.title, now });
|
|
13
|
+
return writeUniqueMarkdown(notesDir, basename, text);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=write-note.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-note.js","sourceRoot":"","sources":["../../src/vault/write-note.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAOhE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,IAAY,EACZ,UAA4B,EAAE;IAE9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1E,OAAO,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,48 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "grounder",
|
|
3
|
-
"version": "0.0
|
|
4
|
-
"description": "",
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Connect git projects to Obsidian dev vaults for AI agent memory",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"grounder": "./dist/cli.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"templates"
|
|
12
|
+
],
|
|
13
|
+
"engines": {
|
|
14
|
+
"node": ">=18"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"obsidian",
|
|
18
|
+
"cursor",
|
|
19
|
+
"mcp",
|
|
20
|
+
"ai",
|
|
21
|
+
"cli"
|
|
22
|
+
],
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/andrej-kolic/grounder.git",
|
|
27
|
+
"directory": "packages/grounder"
|
|
28
|
+
},
|
|
29
|
+
"bugs": {
|
|
30
|
+
"url": "https://github.com/andrej-kolic/grounder/issues"
|
|
8
31
|
},
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
32
|
+
"homepage": "https://github.com/andrej-kolic/grounder/tree/main/packages/grounder#readme",
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public",
|
|
35
|
+
"provenance": true
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^26.0.1",
|
|
39
|
+
"typescript": "^6.0.3",
|
|
40
|
+
"vitest": "^4.1.9"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsc -p tsconfig.build.json",
|
|
44
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
45
|
+
"pretest": "pnpm run build",
|
|
46
|
+
"test": "vitest run"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Save a note to the Obsidian vault for this project.
|
|
2
|
+
|
|
3
|
+
Run from the linked project folder or any subdirectory beneath it:
|
|
4
|
+
|
|
5
|
+
npx grounder note "<user text>"
|
|
6
|
+
|
|
7
|
+
The vault is outside the workspace — grant shell permissions if Claude Code prompts you.
|
|
8
|
+
|
|
9
|
+
Use the text after `/grounder-note` as the note body.
|
|
10
|
+
Do not compute vault paths or write files yourself — the CLI handles it.
|
|
11
|
+
Report the CLI output path from stdout to the user.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
Write a session handoff checkpoint to the Obsidian vault for this project.
|
|
2
|
+
|
|
3
|
+
Summarize the session into a structured handoff — not a chat transcript.
|
|
4
|
+
Do not dump tool traces, full conversation, or false starts.
|
|
5
|
+
|
|
6
|
+
Build a markdown body with these sections (lean; roughly half a screen to one screen):
|
|
7
|
+
|
|
8
|
+
```markdown
|
|
9
|
+
# Handoff: <short label>
|
|
10
|
+
|
|
11
|
+
## Done
|
|
12
|
+
- …
|
|
13
|
+
|
|
14
|
+
## Next
|
|
15
|
+
1. … # ordered; most important section for resume — required
|
|
16
|
+
2. …
|
|
17
|
+
|
|
18
|
+
## Blockers
|
|
19
|
+
- None | …
|
|
20
|
+
|
|
21
|
+
## Decisions
|
|
22
|
+
- … # include rejected alternatives / pitfalls when useful
|
|
23
|
+
|
|
24
|
+
## Files
|
|
25
|
+
- path/to/relevant.ts
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Rules:
|
|
29
|
+
- **Next is mandatory and ordered** — if only one section is read, this is it
|
|
30
|
+
- Empty sections are OK (`Blockers: None` beats omission)
|
|
31
|
+
- Few concrete file paths, not an exhaustive diff
|
|
32
|
+
|
|
33
|
+
Then run from the linked project folder or any subdirectory beneath it:
|
|
34
|
+
|
|
35
|
+
npx grounder handoff "<body>"
|
|
36
|
+
|
|
37
|
+
Optional short title slug (filename + frontmatter):
|
|
38
|
+
|
|
39
|
+
npx grounder handoff --title <slug> "<body>"
|
|
40
|
+
|
|
41
|
+
For multi-line bodies, prefer a shell heredoc so quoting does not break:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx grounder handoff "$(cat <<'EOF'
|
|
45
|
+
# Handoff: …
|
|
46
|
+
…
|
|
47
|
+
EOF
|
|
48
|
+
)"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The vault is outside the workspace — grant shell permissions if Claude Code prompts you.
|
|
52
|
+
|
|
53
|
+
Do not compute vault paths or write files yourself — the CLI handles it.
|
|
54
|
+
Report the CLI output path from stdout to the user.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Hydrate this session from the latest vault handoff and repo truth.
|
|
2
|
+
|
|
3
|
+
Read-only — do not write to the vault. Do not invent vault paths.
|
|
4
|
+
|
|
5
|
+
From the linked project folder or any subdirectory beneath it:
|
|
6
|
+
|
|
7
|
+
1. List recent handoffs (newest first):
|
|
8
|
+
|
|
9
|
+
npx grounder handoff list --limit 5
|
|
10
|
+
|
|
11
|
+
2. If the list is empty: tell the user there are no handoffs yet, then read repo `AGENTS.md` only and proceed.
|
|
12
|
+
|
|
13
|
+
3. If handoffs exist: read the newest file (first path). Optionally skim other listed paths if the user names a session or the newest is clearly wrong.
|
|
14
|
+
|
|
15
|
+
4. Read repo `AGENTS.md` (project conventions and constraints).
|
|
16
|
+
|
|
17
|
+
5. Summarize briefly what is next (from the handoff `## Next` section when present), then start work.
|
|
18
|
+
|
|
19
|
+
The vault is outside the workspace — grant shell permissions if Claude Code prompts you.
|
|
20
|
+
Use free-text after `/grounder-task` as optional focus (session name, index, or task hint).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
Save a note to the Obsidian vault for this project.
|
|
2
|
+
|
|
3
|
+
Run from the linked project folder or any subdirectory beneath it:
|
|
4
|
+
|
|
5
|
+
npx grounder note "<user text>"
|
|
6
|
+
|
|
7
|
+
The vault is outside the workspace — approve shell permissions if Cursor prompts you.
|
|
8
|
+
|
|
9
|
+
Use the text after `/grounder-note` as the note body.
|
|
10
|
+
Do not compute vault paths or write files yourself — the CLI handles it.
|
|
11
|
+
Report the CLI output path from stdout to the user.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
Write a session handoff checkpoint to the Obsidian vault for this project.
|
|
2
|
+
|
|
3
|
+
Summarize the session into a structured handoff — not a chat transcript.
|
|
4
|
+
Do not dump tool traces, full conversation, or false starts.
|
|
5
|
+
|
|
6
|
+
Build a markdown body with these sections (lean; roughly half a screen to one screen):
|
|
7
|
+
|
|
8
|
+
```markdown
|
|
9
|
+
# Handoff: <short label>
|
|
10
|
+
|
|
11
|
+
## Done
|
|
12
|
+
- …
|
|
13
|
+
|
|
14
|
+
## Next
|
|
15
|
+
1. … # ordered; most important section for resume — required
|
|
16
|
+
2. …
|
|
17
|
+
|
|
18
|
+
## Blockers
|
|
19
|
+
- None | …
|
|
20
|
+
|
|
21
|
+
## Decisions
|
|
22
|
+
- … # include rejected alternatives / pitfalls when useful
|
|
23
|
+
|
|
24
|
+
## Files
|
|
25
|
+
- path/to/relevant.ts
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Rules:
|
|
29
|
+
- **Next is mandatory and ordered** — if only one section is read, this is it
|
|
30
|
+
- Empty sections are OK (`Blockers: None` beats omission)
|
|
31
|
+
- Few concrete file paths, not an exhaustive diff
|
|
32
|
+
|
|
33
|
+
Then run from the linked project folder or any subdirectory beneath it:
|
|
34
|
+
|
|
35
|
+
npx grounder handoff "<body>"
|
|
36
|
+
|
|
37
|
+
Optional short title slug (filename + frontmatter):
|
|
38
|
+
|
|
39
|
+
npx grounder handoff --title <slug> "<body>"
|
|
40
|
+
|
|
41
|
+
For multi-line bodies, prefer a shell heredoc so quoting does not break:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
npx grounder handoff "$(cat <<'EOF'
|
|
45
|
+
# Handoff: …
|
|
46
|
+
…
|
|
47
|
+
EOF
|
|
48
|
+
)"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
The vault is outside the workspace — approve shell permissions if Cursor prompts you.
|
|
52
|
+
|
|
53
|
+
Do not compute vault paths or write files yourself — the CLI handles it.
|
|
54
|
+
Report the CLI output path from stdout to the user.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Hydrate this session from the latest vault handoff and repo truth.
|
|
2
|
+
|
|
3
|
+
Read-only — do not write to the vault. Do not invent vault paths.
|
|
4
|
+
|
|
5
|
+
From the linked project folder or any subdirectory beneath it:
|
|
6
|
+
|
|
7
|
+
1. List recent handoffs (newest first):
|
|
8
|
+
|
|
9
|
+
npx grounder handoff list --limit 5
|
|
10
|
+
|
|
11
|
+
2. If the list is empty: tell the user there are no handoffs yet, then read repo `AGENTS.md` only and proceed.
|
|
12
|
+
|
|
13
|
+
3. If handoffs exist: read the newest file (first path). Optionally skim other listed paths if the user names a session or the newest is clearly wrong.
|
|
14
|
+
|
|
15
|
+
4. Read repo `AGENTS.md` (project conventions and constraints).
|
|
16
|
+
|
|
17
|
+
5. Summarize briefly what is next (from the handoff `## Next` section when present), then start work.
|
|
18
|
+
|
|
19
|
+
The vault is outside the workspace — approve shell permissions if Cursor prompts you.
|
|
20
|
+
Use free-text after `/grounder-task` as optional focus (session name, index, or task hint).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- Reference shape for /grounder-task-handoff. Not installed or filled by the CLI — slash commands embed this structure. -->
|
|
2
|
+
|
|
3
|
+
# Handoff: <title or short label>
|
|
4
|
+
|
|
5
|
+
## Done
|
|
6
|
+
- …
|
|
7
|
+
|
|
8
|
+
## Next
|
|
9
|
+
1. …
|
|
10
|
+
2. …
|
|
11
|
+
|
|
12
|
+
## Blockers
|
|
13
|
+
- None
|
|
14
|
+
|
|
15
|
+
## Decisions
|
|
16
|
+
- …
|
|
17
|
+
|
|
18
|
+
## Files
|
|
19
|
+
- path/to/relevant.ts
|
package/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = {};
|