@gmickel/gno 1.0.3 → 1.0.5
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/README.md +4 -0
- package/assets/skill/README.md +130 -0
- package/assets/skill/cli-reference.md +35 -8
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -964,3 +964,7 @@ Interpretation:
|
|
|
964
964
|
<p align="center">
|
|
965
965
|
made with ❤️ by <a href="https://twitter.com/gmickel">@gmickel</a>
|
|
966
966
|
</p>
|
|
967
|
+
|
|
968
|
+
## Download history
|
|
969
|
+
|
|
970
|
+
[](https://skill-history.com/gmickel/gno)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# GNO — Agent Skill
|
|
2
|
+
|
|
3
|
+
Local-first semantic search for documents, notes, and knowledge bases,
|
|
4
|
+
packaged as a Claude Code / Codex / OpenCode / OpenClaw skill.
|
|
5
|
+
|
|
6
|
+
> **TL;DR** — this folder is a runnable agent skill. Drop it into any
|
|
7
|
+
> Claude Code, Codex, OpenCode, or OpenClaw workspace and the agent can
|
|
8
|
+
> index and search your local files through the `gno` CLI.
|
|
9
|
+
|
|
10
|
+
## Prerequisites
|
|
11
|
+
|
|
12
|
+
You need the `gno` CLI installed locally. The skill drives it; it does
|
|
13
|
+
not ship the binary itself.
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# macOS / Linux
|
|
17
|
+
curl -fsSL https://gno.sh/install | bash
|
|
18
|
+
|
|
19
|
+
# npm / Bun
|
|
20
|
+
bun add -g @gmickel/gno # or: npm install -g @gmickel/gno
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Verify: `gno --version` should print `1.0.3` or later.
|
|
24
|
+
|
|
25
|
+
## Install the skill
|
|
26
|
+
|
|
27
|
+
There are two ways to install, and which one you pick depends on where
|
|
28
|
+
you're starting from.
|
|
29
|
+
|
|
30
|
+
### Option A — install from your local `gno` (recommended if you already have GNO)
|
|
31
|
+
|
|
32
|
+
If you already installed GNO, it ships this skill in-tree. One command
|
|
33
|
+
drops it into the right place for every supported agent, always in sync
|
|
34
|
+
with your installed GNO version:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
gno skill install --target claude # Claude Code (default)
|
|
38
|
+
gno skill install --target codex # OpenAI Codex CLI
|
|
39
|
+
gno skill install --target opencode # OpenCode
|
|
40
|
+
gno skill install --target openclaw # OpenClaw
|
|
41
|
+
gno skill install --target all # All four
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Scope is configurable:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
gno skill install --scope project # ./.claude/skills/gno (default)
|
|
48
|
+
gno skill install --scope user # ~/.claude/skills/gno
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Inspect or uninstall:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
gno skill show # preview what would be installed
|
|
55
|
+
gno skill paths # resolved installation paths
|
|
56
|
+
gno skill uninstall --target all # remove from all agents
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
This path always gives you the skill that matches your GNO CLI — no
|
|
60
|
+
version drift.
|
|
61
|
+
|
|
62
|
+
### Option B — install from ClawHub (recommended if you use OpenClaw)
|
|
63
|
+
|
|
64
|
+
ClawHub is the OpenClaw skill registry. Use this when you manage
|
|
65
|
+
skills centrally across multiple workspaces or when you don't have GNO
|
|
66
|
+
installed yet.
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
openclaw skills install gno # installs @gmickel/gno
|
|
70
|
+
openclaw skills update gno # pull a newer version later
|
|
71
|
+
openclaw skills info gno # inspect what's installed
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
You can also browse the skill at
|
|
75
|
+
<https://clawhub.ai/gmickel/gno> and download the folder manually.
|
|
76
|
+
|
|
77
|
+
## What the skill teaches the agent
|
|
78
|
+
|
|
79
|
+
Once installed, the agent gains a single callable capability: run `gno`
|
|
80
|
+
commands from the workspace. The skill docs (see [SKILL.md](SKILL.md))
|
|
81
|
+
walk the model through:
|
|
82
|
+
|
|
83
|
+
- initialising a new index and adding collections
|
|
84
|
+
- keyword (`search`), vector (`vsearch`), hybrid (`query`) and
|
|
85
|
+
AI-answer (`ask`) search modes
|
|
86
|
+
- document retrieval (`get`, `multi-get`) including line ranges
|
|
87
|
+
- link graph traversal (`links`, `backlinks`, `similar`, `graph`)
|
|
88
|
+
- tagging, contexts, and per-collection embedding models
|
|
89
|
+
- publishing notes as gno.sh reader snapshots (`publish export`)
|
|
90
|
+
- MCP server setup for persistent agent access
|
|
91
|
+
|
|
92
|
+
The reference docs in this folder are discoverable by the agent via
|
|
93
|
+
progressive disclosure — the model only pulls them when it needs them:
|
|
94
|
+
|
|
95
|
+
- [SKILL.md](SKILL.md) — core instructions + frontmatter
|
|
96
|
+
- [cli-reference.md](cli-reference.md) — every CLI command, option and flag
|
|
97
|
+
- [mcp-reference.md](mcp-reference.md) — MCP tool and resource contract
|
|
98
|
+
- [examples.md](examples.md) — end-to-end usage patterns
|
|
99
|
+
|
|
100
|
+
## Agent tooling contract
|
|
101
|
+
|
|
102
|
+
The skill requests two tools:
|
|
103
|
+
|
|
104
|
+
```yaml
|
|
105
|
+
allowed-tools: Bash(gno:*) Read
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
- **`Bash(gno:*)`** — the agent can invoke `gno <anything>` on the
|
|
109
|
+
host. All writes are explicit CLI calls; nothing runs implicitly.
|
|
110
|
+
- **`Read`** — the agent can open files the user has pointed at. No
|
|
111
|
+
filesystem writes come through the skill itself.
|
|
112
|
+
|
|
113
|
+
## Versioning
|
|
114
|
+
|
|
115
|
+
The skill version is tracked separately from the GNO CLI version. When
|
|
116
|
+
the CLI ships a new feature worth teaching the model (new flag, new
|
|
117
|
+
subcommand, new sanitizer behaviour), the skill gets a point bump. See
|
|
118
|
+
the CHANGELOG entry on ClawHub or the `gno` repo's CHANGELOG for what
|
|
119
|
+
landed in each bump.
|
|
120
|
+
|
|
121
|
+
## License
|
|
122
|
+
|
|
123
|
+
MIT-0 — use it freely, with or without attribution.
|
|
124
|
+
|
|
125
|
+
## Links
|
|
126
|
+
|
|
127
|
+
- Source: <https://github.com/gmickel/gno>
|
|
128
|
+
- Hosted publishing: <https://gno.sh>
|
|
129
|
+
- OpenClaw docs: <https://docs.openclaw.ai>
|
|
130
|
+
- ClawHub listing: <https://clawhub.ai/gmickel/gno>
|
|
@@ -504,24 +504,51 @@ Export a note or collection as a gno.sh publish artifact JSON.
|
|
|
504
504
|
gno publish export <target> [--out <path.json>] [options]
|
|
505
505
|
```
|
|
506
506
|
|
|
507
|
-
| Option | Default | Description
|
|
508
|
-
| -------------- | ------- |
|
|
509
|
-
| `--out` | auto | Output path, defaults to `~/Downloads/<slug>-<YYYYMMDD>.json`
|
|
510
|
-
| `--visibility` | public | One of `public`, `secret-link`, `invite-only`, `encrypted`
|
|
511
|
-
| `--slug` | auto | Override the published route slug
|
|
512
|
-
| `--title` | auto | Override the exported title
|
|
513
|
-
| `--summary` | auto | Override the exported summary
|
|
514
|
-
| `--
|
|
507
|
+
| Option | Default | Description |
|
|
508
|
+
| -------------- | ------- | -------------------------------------------------------------------------- |
|
|
509
|
+
| `--out` | auto | Output path, defaults to `~/Downloads/<slug>-<YYYYMMDD>.json` |
|
|
510
|
+
| `--visibility` | public | One of `public`, `secret-link`, `invite-only`, `encrypted` |
|
|
511
|
+
| `--slug` | auto | Override the published route slug |
|
|
512
|
+
| `--title` | auto | Override the exported title |
|
|
513
|
+
| `--summary` | auto | Override the exported summary |
|
|
514
|
+
| `--passphrase` | none | Required for `--visibility encrypted`; encrypts locally before upload |
|
|
515
|
+
| `--preview` | false | Print sanitized markdown + preprocessor report instead of writing artifact |
|
|
516
|
+
| `--json` | false | Structured result output |
|
|
515
517
|
|
|
516
518
|
Examples:
|
|
517
519
|
|
|
518
520
|
```bash
|
|
519
521
|
gno publish export work-docs --out ~/Downloads/work-docs.json
|
|
520
522
|
gno publish export "gno://work-docs/runbooks/deploy.md" --out ~/Downloads/deploy.json
|
|
523
|
+
|
|
524
|
+
# Encrypted share — ciphertext produced locally before upload
|
|
525
|
+
gno publish export "gno://work-docs/offer-letter.md" \
|
|
526
|
+
--visibility encrypted --passphrase "correct horse battery staple"
|
|
527
|
+
|
|
528
|
+
# Inspect what the sanitizer strips before writing anything
|
|
529
|
+
gno publish export "gno://vault/my-note.md" --preview
|
|
521
530
|
```
|
|
522
531
|
|
|
523
532
|
On success, upload the JSON file at `https://gno.sh/studio`.
|
|
524
533
|
|
|
534
|
+
**Obsidian pre-processor (v1.0.2+)**: before the artifact is written, the
|
|
535
|
+
export pipeline runs a sanitizer over each note's markdown. It:
|
|
536
|
+
|
|
537
|
+
- drops the navigation-sidebar idiom (`[[Hub]] | [[Related]]` immediately
|
|
538
|
+
under the frontmatter)
|
|
539
|
+
- strips any `[[_internal/...]]` references (privacy guard — the
|
|
540
|
+
`_internal/` convention is treated as never-publish)
|
|
541
|
+
- converts `[[Target|Alias]]` to the alias text, and `[[Target]]` to the
|
|
542
|
+
tail segment of the target
|
|
543
|
+
- drops `![[image.png]]` embeds (attachments are not bundled yet) with a
|
|
544
|
+
warning so the author can migrate to `` or wait for bundling
|
|
545
|
+
- refuses to export a note whose frontmatter contains `publish: false`
|
|
546
|
+
(single-note export errors; collection export silently skips)
|
|
547
|
+
|
|
548
|
+
Every sanitizer decision surfaces in the CLI output as a "Preprocessor
|
|
549
|
+
notes" section, on the `--json` response under `warnings`, and on
|
|
550
|
+
`--preview` as a structured report — so nothing is silently lost.
|
|
551
|
+
|
|
525
552
|
## Skill Management
|
|
526
553
|
|
|
527
554
|
### gno skill install
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gmickel/gno",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Local semantic search for your documents. Index Markdown, PDF, and Office files with hybrid BM25 + vector search.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"embeddings",
|
|
@@ -155,7 +155,7 @@
|
|
|
155
155
|
"commander": "^14.0.2",
|
|
156
156
|
"embla-carousel-react": "^8.6.0",
|
|
157
157
|
"franc": "^6.2.0",
|
|
158
|
-
"lucide-react": "^
|
|
158
|
+
"lucide-react": "^1.8.0",
|
|
159
159
|
"markitdown-ts": "^0.0.9",
|
|
160
160
|
"minimatch": "^10.1.1",
|
|
161
161
|
"nanoid": "^5.1.6",
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
"react-markdown": "^10.1.0",
|
|
169
169
|
"rehype-sanitize": "^6.0.0",
|
|
170
170
|
"remark-gfm": "^4.0.1",
|
|
171
|
-
"shiki": "^
|
|
171
|
+
"shiki": "^4.0.2",
|
|
172
172
|
"sqlite-vec": "^0.1.7-alpha.2",
|
|
173
173
|
"streamdown": "^2.0.1",
|
|
174
174
|
"tailwind-merge": "^3.4.0",
|