@pencil-agent/nano-pencil 2.0.1 → 2.0.3
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 +267 -267
- package/dist/build-meta.json +3 -3
- package/dist/core/export-html/AGENT.md +11 -11
- package/dist/core/export-html/template.css +971 -971
- package/dist/core/export-html/template.html +54 -54
- package/dist/core/model/custom-providers.js +1 -1
- package/dist/core/model-registry.js +5 -5
- package/dist/extensions/builtin/AGENT.md +115 -115
- package/dist/extensions/builtin/browser/AGENT.md +17 -17
- package/dist/extensions/builtin/browser/agent-workspace/agent_helpers.py +12 -12
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/amazon/product-search.md +198 -198
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/archive-org/scraping.md +341 -341
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv/scraping.md +311 -311
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/arxiv-bulk/scraping.md +333 -333
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/atlas/overview.md +70 -70
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/booking-com/scraping.md +578 -578
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/capterra/scraping.md +440 -440
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/centilebrain/generate-estimates.md +110 -110
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coingecko/scraping.md +325 -325
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coinmarketcap/scraping.md +463 -463
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/coursera/scraping.md +360 -360
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/craigslist/scraping.md +390 -390
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/crossref/scraping.md +568 -568
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/dev-to/scraping.md +323 -323
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/duckduckgo/scraping.md +349 -349
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/ebay/scraping.md +435 -435
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/etsy/scraping.md +506 -506
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/eventbrite/scraping.md +363 -363
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/expedia/automation.md +168 -168
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/groups.md +236 -236
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/facebook/pages.md +295 -295
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/framer/editor.md +108 -108
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/fred/scraping.md +493 -493
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/g2/scraping.md +580 -580
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/genius/scraping.md +511 -511
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/repo-actions.md +65 -65
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/github/scraping.md +184 -184
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/glassdoor/scraping.md +543 -543
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gmail/compose.md +122 -122
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/goodreads/scraping.md +461 -461
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/gutenberg/scraping.md +383 -383
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/hackernews/scraping.md +243 -243
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/howlongtobeat/scraping.md +473 -473
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/imdb/scraping.md +271 -271
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/itch-io/scraping.md +436 -436
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/job-boards/indeed-glassdoor.md +1021 -1021
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/letterboxd/scraping.md +349 -349
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/linkedin/invitation-manager.md +109 -109
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/loom/folder-enumeration.md +170 -170
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/macrotrends/scraping.md +537 -537
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/article-hydration.md +120 -120
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/medium/scraping.md +414 -414
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/metacritic/scraping.md +477 -477
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/musicbrainz/scraping.md +478 -478
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/nasa/scraping.md +339 -339
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/news-aggregation/multi-source.md +205 -205
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/open-library/scraping.md +472 -472
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openalex/scraping.md +470 -470
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/openstreetmap/scraping.md +490 -490
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/package-registries/npm-pypi.md +478 -478
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/polymarket/scraping.md +234 -234
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/producthunt/scraping.md +307 -307
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/pubmed/scraping.md +421 -421
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/quora/scraping.md +364 -364
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rawg/scraping.md +352 -352
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/reddit/scraping.md +124 -124
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/rest-countries/scraping.md +233 -233
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/sec-edgar/scraping.md +361 -361
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/README.md +36 -36
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/embedded-apps.md +72 -72
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/knowledge-base.md +109 -109
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/shopify-admin/polaris-inputs.md +137 -137
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/soundcloud/scraping.md +362 -362
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/spotify/scraping.md +339 -339
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/stackoverflow/scraping.md +435 -435
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/steam/scraping.md +575 -575
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/substack/scraping.md +338 -338
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/thetechgeeks/pricing.md +52 -52
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tiktok/upload.md +107 -107
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/tradingview/scraping.md +309 -309
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trello/boards-and-lists.md +88 -88
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/trustpilot/scraping.md +375 -375
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/walmart/scraping.md +444 -444
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wayback-machine/scraping.md +306 -306
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/weather/scraping.md +398 -398
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/wellfound/scraping.md +596 -596
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/world-bank/scraping.md +356 -356
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/xiaohongshu/scraping.md +84 -84
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/youtube/scraping.md +418 -418
- package/dist/extensions/builtin/browser/agent-workspace/domain-skills/zillow/scraping.md +433 -433
- package/dist/extensions/builtin/browser/browser.md +73 -73
- package/dist/extensions/builtin/browser/install.md +142 -142
- package/dist/extensions/builtin/browser/interaction-skills/connection.md +48 -48
- package/dist/extensions/builtin/browser/interaction-skills/cookies.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/cross-origin-iframes.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/dialogs.md +64 -64
- package/dist/extensions/builtin/browser/interaction-skills/downloads.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/drag-and-drop.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/dropdowns.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/iframes.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/network-requests.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/print-as-pdf.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/profile-sync.md +90 -90
- package/dist/extensions/builtin/browser/interaction-skills/screenshots.md +17 -17
- package/dist/extensions/builtin/browser/interaction-skills/scrolling.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/shadow-dom.md +3 -3
- package/dist/extensions/builtin/browser/interaction-skills/tabs.md +69 -69
- package/dist/extensions/builtin/browser/interaction-skills/uploads.md +1 -1
- package/dist/extensions/builtin/browser/interaction-skills/viewport.md +3 -3
- package/dist/extensions/builtin/browser/src/browser_harness/AGENT.md +15 -15
- package/dist/extensions/builtin/browser/src/browser_harness/__init__.py +8 -8
- package/dist/extensions/builtin/browser/src/browser_harness/_ipc.py +90 -90
- package/dist/extensions/builtin/browser/src/browser_harness/admin.py +722 -722
- package/dist/extensions/builtin/browser/src/browser_harness/daemon.py +328 -328
- package/dist/extensions/builtin/browser/src/browser_harness/helpers.py +396 -396
- package/dist/extensions/builtin/browser/src/browser_harness/run.py +103 -103
- package/dist/extensions/builtin/debug/index.js +9 -9
- package/dist/extensions/builtin/discipline/skills/brainstorming/SKILL.md +33 -33
- package/dist/extensions/builtin/discipline/skills/executing-plans/SKILL.md +25 -25
- package/dist/extensions/builtin/discipline/skills/finishing-development-branch/SKILL.md +25 -25
- package/dist/extensions/builtin/discipline/skills/receiving-code-review/SKILL.md +22 -22
- package/dist/extensions/builtin/discipline/skills/requesting-code-review/SKILL.md +31 -31
- package/dist/extensions/builtin/discipline/skills/systematic-debugging/SKILL.md +28 -28
- package/dist/extensions/builtin/discipline/skills/test-driven-development/SKILL.md +32 -32
- package/dist/extensions/builtin/discipline/skills/using-git-worktrees/SKILL.md +25 -25
- package/dist/extensions/builtin/discipline/skills/verification-before-completion/SKILL.md +27 -27
- package/dist/extensions/builtin/discipline/skills/writing-plans/SKILL.md +26 -26
- package/dist/extensions/builtin/goal/README.md +67 -67
- package/dist/extensions/builtin/goal/index.js +6 -6
- package/dist/extensions/builtin/grub/README.md +112 -112
- package/dist/extensions/builtin/link-world/agent-workspace/README.md +16 -16
- package/dist/extensions/builtin/link-world/internet-search/internet-search.md +65 -65
- package/dist/extensions/builtin/link-world/link-world-agent.md +82 -82
- package/dist/extensions/builtin/link-world/linkworld.md +313 -313
- package/dist/extensions/builtin/link-world/network-routing/network-routing.md +67 -67
- package/dist/extensions/builtin/loop/README.md +92 -92
- package/dist/extensions/builtin/mcp/figma-design.md +68 -68
- package/dist/extensions/builtin/mcp/mcp-management.md +85 -85
- package/dist/extensions/builtin/recap/AGENT.md +15 -15
- package/dist/extensions/builtin/sal/README.md +72 -72
- package/dist/extensions/builtin/security-audit/README.md +289 -289
- package/dist/extensions/builtin/team/AGENT.md +112 -112
- package/dist/extensions/builtin/team/TESTING.md +299 -299
- package/dist/extensions/builtin/token-save/README.md +56 -56
- package/dist/extensions/optional/AGENT.md +10 -10
- package/dist/modes/interactive/controllers/input-submit-controller.js +2 -2
- package/dist/modes/interactive/controllers/stream-render-controller.js +2 -2
- package/dist/modes/interactive/interactive-mode.js +19 -19
- package/dist/modes/interactive/theme/dark.json +85 -85
- package/dist/modes/interactive/theme/light.json +84 -84
- package/dist/modes/interactive/theme/theme-schema.json +335 -335
- package/dist/modes/interactive/theme/warm.json +81 -81
- package/dist/node_modules/@pencil-agent/ai/dist/cli.js +0 -0
- package/dist/node_modules/@pencil-agent/ai/dist/models.generated.js +1 -1
- package/docs/ACP/345/215/217/350/256/256/351/233/206/346/210/220/345/274/200/345/217/221/346/226/207/346/241/243.md +851 -0
- package/docs/SDK-TESTING.md +364 -0
- package/docs/codex-goal-command-impl.md +1055 -1055
- package/docs/codex-goal-vs-grub.md +500 -500
- package/docs/custom-provider.md +27 -27
- package/docs/extensions.md +27 -27
- package/docs/keybindings.md +27 -27
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/200/273/347/273/223.md" +250 -250
- package/docs/loop /351/207/215/346/236/204/345/256/214/346/210/220/346/212/245/345/221/212.md" +122 -122
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210.md" +1222 -1222
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/256/236/347/216/260/346/212/245/345/221/212.md" +158 -158
- package/docs/loop /351/207/215/346/236/204/346/226/271/346/241/210/345/257/271/346/257/224/345/210/206/346/236/220.md" +128 -128
- package/docs/loop /351/207/215/346/236/204/350/256/241/345/210/222.md" +320 -320
- package/docs/loop-usage-examples.md +214 -214
- package/docs/mem-core/346/212/200/346/234/257/346/226/207/346/241/243.md +593 -0
- package/docs/models.md +27 -27
- package/docs/packages.md +27 -27
- package/docs/pi-design-philosophy.md +457 -457
- package/docs/planmode.md +1987 -1987
- package/docs/prompt-templates.md +27 -27
- package/docs/providers.md +27 -27
- package/docs/sdk.md +27 -27
- package/docs/skills.md +27 -27
- package/docs/startup-performance-optimization.md +301 -0
- package/docs/themes.md +27 -27
- package/docs/tui.md +27 -27
- package/docs//350/256/244/347/237/245/345/234/260/345/233/276.md +47 -0
- package/package.json +190 -190
- package/docs/cc-agent-design.md +0 -1297
- package/docs/cc-tui-design.md +0 -1333
- package/docs/nanoPencil-/345/255/246/344/271/240/350/256/241/345/210/222.md +0 -170
- package/docs/scan-report.md +0 -3820
- package/docs//345/257/271/346/240/207Claude-Code.md +0 -1775
- package/docs//351/230/277/351/207/214/345/267/264/345/267/264/350/264/242/346/212/245/345/210/206/346/236/220/344/271/246.md +0 -261
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: network-routing
|
|
3
|
-
description: Decide whether a task should use NanoPencil's web_search, link_world tools, or browser automation.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Network Routing
|
|
7
|
-
|
|
8
|
-
NanoPencil has two different network paths:
|
|
9
|
-
|
|
10
|
-
- `web_search` and `web_fetch` when those high-level tools are actually available in the current session
|
|
11
|
-
- `link_world_*` as the durable lower-level integration path
|
|
12
|
-
- `browser` and `browser_admin` for direct browser control and page interaction
|
|
13
|
-
|
|
14
|
-
Choose the path by task shape, not by habit.
|
|
15
|
-
|
|
16
|
-
## Use `web_search` First
|
|
17
|
-
|
|
18
|
-
Use `web_search` when it is available and the user needs:
|
|
19
|
-
|
|
20
|
-
- current facts
|
|
21
|
-
- recent news
|
|
22
|
-
- API/library documentation lookup
|
|
23
|
-
- general web research
|
|
24
|
-
- "what is", "find", "latest", "look up", "compare", or "summarize" style requests
|
|
25
|
-
|
|
26
|
-
If setup is uncertain, call `link_world_admin` with `status` or `doctor` first.
|
|
27
|
-
|
|
28
|
-
## Use `web_fetch` When The URL Is Known
|
|
29
|
-
|
|
30
|
-
Use `web_fetch` when it is available and:
|
|
31
|
-
|
|
32
|
-
- the user already gave a URL
|
|
33
|
-
- a prior search step found the exact page you need
|
|
34
|
-
- you need page content, not browser interaction
|
|
35
|
-
- the task is fetch-and-read rather than click-and-drive
|
|
36
|
-
|
|
37
|
-
## Use `browser` First
|
|
38
|
-
|
|
39
|
-
Use `browser` when the user needs:
|
|
40
|
-
|
|
41
|
-
- login-gated pages
|
|
42
|
-
- clicking, typing, uploads, downloads, tabs, screenshots
|
|
43
|
-
- form submission
|
|
44
|
-
- navigating a live web app
|
|
45
|
-
- inspecting visible UI state
|
|
46
|
-
- browser-based verification
|
|
47
|
-
|
|
48
|
-
If setup is uncertain, call `browser_admin` with `status` or `setup` first.
|
|
49
|
-
|
|
50
|
-
## Fallback Order
|
|
51
|
-
|
|
52
|
-
1. If `web_search` is available, use it for current knowledge discovery.
|
|
53
|
-
2. If `web_fetch` is available and the target URL is already known, use it.
|
|
54
|
-
3. If the answer requires interacting with a page, switch to `browser`.
|
|
55
|
-
4. If high-level link-world tools are unavailable but internet runtime is present, use `link_world_exec`.
|
|
56
|
-
5. Only fall back to `bash` for external CLIs when the dedicated tools are unavailable.
|
|
57
|
-
|
|
58
|
-
## Working Rule
|
|
59
|
-
|
|
60
|
-
Prefer NanoPencil's named tools over raw shell commands. The integration boundary should stay inside:
|
|
61
|
-
|
|
62
|
-
- `link_world_admin`
|
|
63
|
-
- `web_search`
|
|
64
|
-
- `web_fetch`
|
|
65
|
-
- `link_world_exec`
|
|
66
|
-
- `browser_admin`
|
|
67
|
-
- `browser`
|
|
1
|
+
---
|
|
2
|
+
name: network-routing
|
|
3
|
+
description: Decide whether a task should use NanoPencil's web_search, link_world tools, or browser automation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Network Routing
|
|
7
|
+
|
|
8
|
+
NanoPencil has two different network paths:
|
|
9
|
+
|
|
10
|
+
- `web_search` and `web_fetch` when those high-level tools are actually available in the current session
|
|
11
|
+
- `link_world_*` as the durable lower-level integration path
|
|
12
|
+
- `browser` and `browser_admin` for direct browser control and page interaction
|
|
13
|
+
|
|
14
|
+
Choose the path by task shape, not by habit.
|
|
15
|
+
|
|
16
|
+
## Use `web_search` First
|
|
17
|
+
|
|
18
|
+
Use `web_search` when it is available and the user needs:
|
|
19
|
+
|
|
20
|
+
- current facts
|
|
21
|
+
- recent news
|
|
22
|
+
- API/library documentation lookup
|
|
23
|
+
- general web research
|
|
24
|
+
- "what is", "find", "latest", "look up", "compare", or "summarize" style requests
|
|
25
|
+
|
|
26
|
+
If setup is uncertain, call `link_world_admin` with `status` or `doctor` first.
|
|
27
|
+
|
|
28
|
+
## Use `web_fetch` When The URL Is Known
|
|
29
|
+
|
|
30
|
+
Use `web_fetch` when it is available and:
|
|
31
|
+
|
|
32
|
+
- the user already gave a URL
|
|
33
|
+
- a prior search step found the exact page you need
|
|
34
|
+
- you need page content, not browser interaction
|
|
35
|
+
- the task is fetch-and-read rather than click-and-drive
|
|
36
|
+
|
|
37
|
+
## Use `browser` First
|
|
38
|
+
|
|
39
|
+
Use `browser` when the user needs:
|
|
40
|
+
|
|
41
|
+
- login-gated pages
|
|
42
|
+
- clicking, typing, uploads, downloads, tabs, screenshots
|
|
43
|
+
- form submission
|
|
44
|
+
- navigating a live web app
|
|
45
|
+
- inspecting visible UI state
|
|
46
|
+
- browser-based verification
|
|
47
|
+
|
|
48
|
+
If setup is uncertain, call `browser_admin` with `status` or `setup` first.
|
|
49
|
+
|
|
50
|
+
## Fallback Order
|
|
51
|
+
|
|
52
|
+
1. If `web_search` is available, use it for current knowledge discovery.
|
|
53
|
+
2. If `web_fetch` is available and the target URL is already known, use it.
|
|
54
|
+
3. If the answer requires interacting with a page, switch to `browser`.
|
|
55
|
+
4. If high-level link-world tools are unavailable but internet runtime is present, use `link_world_exec`.
|
|
56
|
+
5. Only fall back to `bash` for external CLIs when the dedicated tools are unavailable.
|
|
57
|
+
|
|
58
|
+
## Working Rule
|
|
59
|
+
|
|
60
|
+
Prefer NanoPencil's named tools over raw shell commands. The integration boundary should stay inside:
|
|
61
|
+
|
|
62
|
+
- `link_world_admin`
|
|
63
|
+
- `web_search`
|
|
64
|
+
- `web_fetch`
|
|
65
|
+
- `link_world_exec`
|
|
66
|
+
- `browser_admin`
|
|
67
|
+
- `browser`
|
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
# Loop Extension
|
|
2
|
-
|
|
3
|
-
`/loop` schedules a recurring prompt or slash command for the current session.
|
|
4
|
-
Uses the unified **cron scheduler** architecture per the refactoring plan.
|
|
5
|
-
|
|
6
|
-
For the autonomous "keep digging until done" runner, see the sibling
|
|
7
|
-
[`grub` extension](../grub/README.md).
|
|
8
|
-
|
|
9
|
-
## Architecture
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
/loop command ──→ addCronTask ──→ unified store ──→ cron scheduler ──→ onFire ──→ dispatch
|
|
13
|
-
│ │
|
|
14
|
-
CronCreate tool file watcher (3s reload)
|
|
15
|
-
CronDelete tool jitter + lock
|
|
16
|
-
CronList tool 7-day expiry
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
**Key design decisions**:
|
|
20
|
-
- Single scheduler (cron scheduler) for all tasks
|
|
21
|
-
- Single storage (`.nanopencil/cron-tasks.json` for durable, memory for session)
|
|
22
|
-
- `/loop` command and CronCreate tool both use `addCronTask`
|
|
23
|
-
- Enhanced features (--name, --max, --quiet, pause/resume) built on top
|
|
24
|
-
|
|
25
|
-
## Quick start
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
/loop check the build # every 10m (default)
|
|
29
|
-
/loop 5m /grub status # slash command every 5 minutes
|
|
30
|
-
/loop every 10m Review test failures
|
|
31
|
-
/loop Drink water every 30m --name hydrate --max 8 --quiet
|
|
32
|
-
/loop Check build every 5m --durable # persists across sessions
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Manage
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
/loop list # all scheduled loops
|
|
39
|
-
/loop status <ref> # detail one loop (ref = name or id)
|
|
40
|
-
/loop pause <ref>
|
|
41
|
-
/loop resume <ref>
|
|
42
|
-
/loop run <ref> # fire immediately
|
|
43
|
-
/loop cancel <ref> # remove one
|
|
44
|
-
/loop clear # remove all
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
`<ref>` can be either the auto-generated id or the `--name` slug.
|
|
48
|
-
|
|
49
|
-
## Flags
|
|
50
|
-
|
|
51
|
-
- `--name <slug>` — give the loop a friendly handle so you can `pause hydrate`
|
|
52
|
-
instead of memorising hex ids.
|
|
53
|
-
- `--max <n>` — auto-cancel after `n` runs.
|
|
54
|
-
- `--quiet` (or `-q`) — suppress per-tick UI messages. Errors and terminal
|
|
55
|
-
events still surface; routine ticks are still recorded via `appendEntry`.
|
|
56
|
-
- `--durable` (or `-d`) — persist the loop across sessions. Durable loops are
|
|
57
|
-
saved to `.nanopencil/cron-tasks.json` and will resume when you reopen the
|
|
58
|
-
project.
|
|
59
|
-
|
|
60
|
-
## Notes
|
|
61
|
-
|
|
62
|
-
- By default, loops are **session-scoped**: closing the session clears them.
|
|
63
|
-
- Use `--durable` to persist loops across sessions.
|
|
64
|
-
- Durable loops are stored in `.nanopencil/cron-tasks.json` in your project
|
|
65
|
-
directory.
|
|
66
|
-
- **Auto-expiry**: Durable loops automatically expire after 7 days to prevent
|
|
67
|
-
zombie tasks from accumulating.
|
|
68
|
-
- Due tasks wait for the agent to be idle; missed intervals collapse to one
|
|
69
|
-
pending run.
|
|
70
|
-
- Slash-command payloads are detected at parse time and dispatched through
|
|
71
|
-
`executeCommand`; everything else is delivered through `sendUserMessage` as
|
|
72
|
-
a follow-up turn.
|
|
73
|
-
- After each loop tick the last assistant message is captured (truncated to
|
|
74
|
-
120 chars) and shown in `/loop status <ref>` as `Last output`.
|
|
75
|
-
- Supports `s/m/h/d` durations and `hourly`/`daily` shortcuts.
|
|
76
|
-
- **Jitter**: Tasks have deterministic jitter (based on task ID) to avoid
|
|
77
|
-
traffic spikes at round times.
|
|
78
|
-
- **Scheduler lock**: Multiple sessions in the same project use proper-lockfile
|
|
79
|
-
to prevent duplicate task execution.
|
|
80
|
-
|
|
81
|
-
## Cron Tools
|
|
82
|
-
|
|
83
|
-
The extension also registers three tools for the model to use directly:
|
|
84
|
-
|
|
85
|
-
| Tool | Purpose |
|
|
86
|
-
|------|---------|
|
|
87
|
-
| `CronCreate` | Create a scheduled task with cron expression |
|
|
88
|
-
| `CronDelete` | Delete a scheduled task by ID |
|
|
89
|
-
| `CronList` | List all active scheduled tasks |
|
|
90
|
-
|
|
91
|
-
This allows the model to create and manage scheduled tasks through natural
|
|
92
|
-
language understanding, following the refactoring plan's architecture.
|
|
1
|
+
# Loop Extension
|
|
2
|
+
|
|
3
|
+
`/loop` schedules a recurring prompt or slash command for the current session.
|
|
4
|
+
Uses the unified **cron scheduler** architecture per the refactoring plan.
|
|
5
|
+
|
|
6
|
+
For the autonomous "keep digging until done" runner, see the sibling
|
|
7
|
+
[`grub` extension](../grub/README.md).
|
|
8
|
+
|
|
9
|
+
## Architecture
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/loop command ──→ addCronTask ──→ unified store ──→ cron scheduler ──→ onFire ──→ dispatch
|
|
13
|
+
│ │
|
|
14
|
+
CronCreate tool file watcher (3s reload)
|
|
15
|
+
CronDelete tool jitter + lock
|
|
16
|
+
CronList tool 7-day expiry
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Key design decisions**:
|
|
20
|
+
- Single scheduler (cron scheduler) for all tasks
|
|
21
|
+
- Single storage (`.nanopencil/cron-tasks.json` for durable, memory for session)
|
|
22
|
+
- `/loop` command and CronCreate tool both use `addCronTask`
|
|
23
|
+
- Enhanced features (--name, --max, --quiet, pause/resume) built on top
|
|
24
|
+
|
|
25
|
+
## Quick start
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
/loop check the build # every 10m (default)
|
|
29
|
+
/loop 5m /grub status # slash command every 5 minutes
|
|
30
|
+
/loop every 10m Review test failures
|
|
31
|
+
/loop Drink water every 30m --name hydrate --max 8 --quiet
|
|
32
|
+
/loop Check build every 5m --durable # persists across sessions
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Manage
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
/loop list # all scheduled loops
|
|
39
|
+
/loop status <ref> # detail one loop (ref = name or id)
|
|
40
|
+
/loop pause <ref>
|
|
41
|
+
/loop resume <ref>
|
|
42
|
+
/loop run <ref> # fire immediately
|
|
43
|
+
/loop cancel <ref> # remove one
|
|
44
|
+
/loop clear # remove all
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`<ref>` can be either the auto-generated id or the `--name` slug.
|
|
48
|
+
|
|
49
|
+
## Flags
|
|
50
|
+
|
|
51
|
+
- `--name <slug>` — give the loop a friendly handle so you can `pause hydrate`
|
|
52
|
+
instead of memorising hex ids.
|
|
53
|
+
- `--max <n>` — auto-cancel after `n` runs.
|
|
54
|
+
- `--quiet` (or `-q`) — suppress per-tick UI messages. Errors and terminal
|
|
55
|
+
events still surface; routine ticks are still recorded via `appendEntry`.
|
|
56
|
+
- `--durable` (or `-d`) — persist the loop across sessions. Durable loops are
|
|
57
|
+
saved to `.nanopencil/cron-tasks.json` and will resume when you reopen the
|
|
58
|
+
project.
|
|
59
|
+
|
|
60
|
+
## Notes
|
|
61
|
+
|
|
62
|
+
- By default, loops are **session-scoped**: closing the session clears them.
|
|
63
|
+
- Use `--durable` to persist loops across sessions.
|
|
64
|
+
- Durable loops are stored in `.nanopencil/cron-tasks.json` in your project
|
|
65
|
+
directory.
|
|
66
|
+
- **Auto-expiry**: Durable loops automatically expire after 7 days to prevent
|
|
67
|
+
zombie tasks from accumulating.
|
|
68
|
+
- Due tasks wait for the agent to be idle; missed intervals collapse to one
|
|
69
|
+
pending run.
|
|
70
|
+
- Slash-command payloads are detected at parse time and dispatched through
|
|
71
|
+
`executeCommand`; everything else is delivered through `sendUserMessage` as
|
|
72
|
+
a follow-up turn.
|
|
73
|
+
- After each loop tick the last assistant message is captured (truncated to
|
|
74
|
+
120 chars) and shown in `/loop status <ref>` as `Last output`.
|
|
75
|
+
- Supports `s/m/h/d` durations and `hourly`/`daily` shortcuts.
|
|
76
|
+
- **Jitter**: Tasks have deterministic jitter (based on task ID) to avoid
|
|
77
|
+
traffic spikes at round times.
|
|
78
|
+
- **Scheduler lock**: Multiple sessions in the same project use proper-lockfile
|
|
79
|
+
to prevent duplicate task execution.
|
|
80
|
+
|
|
81
|
+
## Cron Tools
|
|
82
|
+
|
|
83
|
+
The extension also registers three tools for the model to use directly:
|
|
84
|
+
|
|
85
|
+
| Tool | Purpose |
|
|
86
|
+
|------|---------|
|
|
87
|
+
| `CronCreate` | Create a scheduled task with cron expression |
|
|
88
|
+
| `CronDelete` | Delete a scheduled task by ID |
|
|
89
|
+
| `CronList` | List all active scheduled tasks |
|
|
90
|
+
|
|
91
|
+
This allows the model to create and manage scheduled tasks through natural
|
|
92
|
+
language understanding, following the refactoring plan's architecture.
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: figma-design
|
|
3
|
-
description: Use this skill when the user wants NanoPencil to inspect, create, or edit designs in Figma through MCP.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Figma Design
|
|
7
|
-
|
|
8
|
-
Use this skill when the user asks NanoPencil to:
|
|
9
|
-
|
|
10
|
-
- Generate a design in Figma
|
|
11
|
-
- Edit an existing Figma file
|
|
12
|
-
- Turn requirements into Figma frames, components, or styles
|
|
13
|
-
- Read design context from Figma before implementing UI
|
|
14
|
-
|
|
15
|
-
## Preferred integration path
|
|
16
|
-
|
|
17
|
-
Prefer the official Figma Remote MCP server first. Use the desktop server as a fallback or as an additional local-context path.
|
|
18
|
-
|
|
19
|
-
NanoPencil includes two built-in disabled MCP presets:
|
|
20
|
-
|
|
21
|
-
- Server ID: `figma-remote`
|
|
22
|
-
- URL: `https://mcp.figma.com/mcp`
|
|
23
|
-
- Auth: `/figma auth` tries a standalone browser OAuth flow first. If Figma blocks first-time client registration on this machine, NanoPencil can fall back to importing an existing official local session.
|
|
24
|
-
|
|
25
|
-
- Server ID: `figma-desktop`
|
|
26
|
-
- URL: `http://127.0.0.1:3845/mcp`
|
|
27
|
-
|
|
28
|
-
## First-time setup flow
|
|
29
|
-
|
|
30
|
-
If the Figma MCP tools are not available yet:
|
|
31
|
-
|
|
32
|
-
1. Prefer the remote setup first:
|
|
33
|
-
|
|
34
|
-
```text
|
|
35
|
-
/figma auth
|
|
36
|
-
/figma remote
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
If the user already has dedicated Figma OAuth credentials for NanoPencil, they can also set:
|
|
40
|
-
|
|
41
|
-
```text
|
|
42
|
-
NANOPENCIL_FIGMA_CLIENT_ID
|
|
43
|
-
NANOPENCIL_FIGMA_CLIENT_SECRET
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
2. If the user wants the local desktop route instead, ask them to open the Figma desktop app and enable the desktop MCP server in Figma Dev Mode.
|
|
47
|
-
3. Then tell them to run:
|
|
48
|
-
|
|
49
|
-
```text
|
|
50
|
-
/figma setup
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
4. After reload, check whether MCP tools from a Figma server are available.
|
|
54
|
-
|
|
55
|
-
## How to work once Figma tools are available
|
|
56
|
-
|
|
57
|
-
- First inspect the available Figma MCP tools in the current session.
|
|
58
|
-
- Prefer reading the current file or selection context before writing.
|
|
59
|
-
- Then create or update frames, components, text, styles, or variables as needed.
|
|
60
|
-
- When the user wants generated UI, write the result into Figma instead of only describing it in chat.
|
|
61
|
-
|
|
62
|
-
## Important guidance
|
|
63
|
-
|
|
64
|
-
- Prefer the remote path when possible because it is closer to the Codex/Claude-style setup.
|
|
65
|
-
- If the remote path is not authenticated yet, guide the user through `/figma auth` before falling back to desktop.
|
|
66
|
-
- The official write-capable path is MCP, not the read-heavy REST API.
|
|
67
|
-
- If tools are missing after enabling either server, remind the user to run `/reload`.
|
|
68
|
-
- If the remote path fails but the user already has a valid local desktop MCP server, use the desktop route so the design task can still move forward.
|
|
1
|
+
---
|
|
2
|
+
name: figma-design
|
|
3
|
+
description: Use this skill when the user wants NanoPencil to inspect, create, or edit designs in Figma through MCP.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Figma Design
|
|
7
|
+
|
|
8
|
+
Use this skill when the user asks NanoPencil to:
|
|
9
|
+
|
|
10
|
+
- Generate a design in Figma
|
|
11
|
+
- Edit an existing Figma file
|
|
12
|
+
- Turn requirements into Figma frames, components, or styles
|
|
13
|
+
- Read design context from Figma before implementing UI
|
|
14
|
+
|
|
15
|
+
## Preferred integration path
|
|
16
|
+
|
|
17
|
+
Prefer the official Figma Remote MCP server first. Use the desktop server as a fallback or as an additional local-context path.
|
|
18
|
+
|
|
19
|
+
NanoPencil includes two built-in disabled MCP presets:
|
|
20
|
+
|
|
21
|
+
- Server ID: `figma-remote`
|
|
22
|
+
- URL: `https://mcp.figma.com/mcp`
|
|
23
|
+
- Auth: `/figma auth` tries a standalone browser OAuth flow first. If Figma blocks first-time client registration on this machine, NanoPencil can fall back to importing an existing official local session.
|
|
24
|
+
|
|
25
|
+
- Server ID: `figma-desktop`
|
|
26
|
+
- URL: `http://127.0.0.1:3845/mcp`
|
|
27
|
+
|
|
28
|
+
## First-time setup flow
|
|
29
|
+
|
|
30
|
+
If the Figma MCP tools are not available yet:
|
|
31
|
+
|
|
32
|
+
1. Prefer the remote setup first:
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
/figma auth
|
|
36
|
+
/figma remote
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If the user already has dedicated Figma OAuth credentials for NanoPencil, they can also set:
|
|
40
|
+
|
|
41
|
+
```text
|
|
42
|
+
NANOPENCIL_FIGMA_CLIENT_ID
|
|
43
|
+
NANOPENCIL_FIGMA_CLIENT_SECRET
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
2. If the user wants the local desktop route instead, ask them to open the Figma desktop app and enable the desktop MCP server in Figma Dev Mode.
|
|
47
|
+
3. Then tell them to run:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
/figma setup
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
4. After reload, check whether MCP tools from a Figma server are available.
|
|
54
|
+
|
|
55
|
+
## How to work once Figma tools are available
|
|
56
|
+
|
|
57
|
+
- First inspect the available Figma MCP tools in the current session.
|
|
58
|
+
- Prefer reading the current file or selection context before writing.
|
|
59
|
+
- Then create or update frames, components, text, styles, or variables as needed.
|
|
60
|
+
- When the user wants generated UI, write the result into Figma instead of only describing it in chat.
|
|
61
|
+
|
|
62
|
+
## Important guidance
|
|
63
|
+
|
|
64
|
+
- Prefer the remote path when possible because it is closer to the Codex/Claude-style setup.
|
|
65
|
+
- If the remote path is not authenticated yet, guide the user through `/figma auth` before falling back to desktop.
|
|
66
|
+
- The official write-capable path is MCP, not the read-heavy REST API.
|
|
67
|
+
- If tools are missing after enabling either server, remind the user to run `/reload`.
|
|
68
|
+
- If the remote path fails but the user already has a valid local desktop MCP server, use the desktop route so the design task can still move forward.
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mcp-management
|
|
3
|
-
description: Use this skill when the user asks to install, configure, debug, enable, or disable MCP servers or MCP tools in NanoPencil.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# MCP Management
|
|
7
|
-
|
|
8
|
-
Use this skill when the user asks for any of the following:
|
|
9
|
-
|
|
10
|
-
- Install a new MCP server
|
|
11
|
-
- Configure an existing MCP server
|
|
12
|
-
- Enable or disable MCP servers in NanoPencil
|
|
13
|
-
- Debug why MCP tools are missing
|
|
14
|
-
- Add API keys or environment variables for an MCP server
|
|
15
|
-
|
|
16
|
-
## What NanoPencil already does
|
|
17
|
-
|
|
18
|
-
- MCP is enabled by default in NanoPencil unless the user launched it with `--no-mcp` or in offline mode.
|
|
19
|
-
- NanoPencil reads MCP server definitions from `~/.nanopencil/agent/mcp.json`.
|
|
20
|
-
- MCP tools are loaded into the current session at startup and on `/reload`.
|
|
21
|
-
|
|
22
|
-
Important:
|
|
23
|
-
|
|
24
|
-
- Editing `mcp.json` alone does not make new MCP tools appear immediately in the current session.
|
|
25
|
-
- After changing MCP config, tell the user to run `/reload`, or explain that a restart/reload is needed before the new tools can be used.
|
|
26
|
-
|
|
27
|
-
## How to inspect the current MCP setup
|
|
28
|
-
|
|
29
|
-
1. Read `~/.nanopencil/agent/mcp.json` if it exists.
|
|
30
|
-
2. Check whether the target server already exists in `mcpServers`.
|
|
31
|
-
3. Check whether it is enabled.
|
|
32
|
-
4. Check whether required environment variables are present.
|
|
33
|
-
|
|
34
|
-
If the file does not exist, NanoPencil will create a default one when MCP config is first loaded.
|
|
35
|
-
|
|
36
|
-
## How to add a new MCP server
|
|
37
|
-
|
|
38
|
-
1. Find the official install/start command from the server's documentation.
|
|
39
|
-
2. Prefer stable commands such as:
|
|
40
|
-
- `npx -y <package>`
|
|
41
|
-
- `uvx <package>`
|
|
42
|
-
- `python -m <module>`
|
|
43
|
-
- `node /absolute/path/to/server.js`
|
|
44
|
-
3. Add a server entry to `~/.nanopencil/agent/mcp.json`.
|
|
45
|
-
4. Set `enabled: true` only if the command and required credentials are ready.
|
|
46
|
-
5. Tell the user that `/reload` is required to apply the change.
|
|
47
|
-
|
|
48
|
-
## Config shape reminder
|
|
49
|
-
|
|
50
|
-
Use this structure:
|
|
51
|
-
|
|
52
|
-
```json
|
|
53
|
-
{
|
|
54
|
-
"mcpServers": [
|
|
55
|
-
{
|
|
56
|
-
"id": "example",
|
|
57
|
-
"name": "Example",
|
|
58
|
-
"command": "npx",
|
|
59
|
-
"args": ["-y", "@example/server"],
|
|
60
|
-
"enabled": true,
|
|
61
|
-
"transport": "stdio",
|
|
62
|
-
"toolTimeout": 30000
|
|
63
|
-
}
|
|
64
|
-
]
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
For remote HTTP/SSE MCP servers, use the server's documented transport and URL fields supported by NanoPencil's MCP config.
|
|
69
|
-
|
|
70
|
-
## Safe operating rules
|
|
71
|
-
|
|
72
|
-
- Do not invent MCP package names. Check the server's official docs first.
|
|
73
|
-
- Do not claim the new MCP tools are ready until the config is written and the user has reloaded.
|
|
74
|
-
- If credentials are required, ask the user for the missing values instead of guessing.
|
|
75
|
-
- If an install command modifies global system state, tell the user what will be installed.
|
|
76
|
-
|
|
77
|
-
## Good response pattern
|
|
78
|
-
|
|
79
|
-
When the user asks you to install an MCP server:
|
|
80
|
-
|
|
81
|
-
1. Inspect `mcp.json`
|
|
82
|
-
2. Install or configure the server
|
|
83
|
-
3. Update `mcp.json`
|
|
84
|
-
4. Tell the user exactly what changed
|
|
85
|
-
5. Ask them to run `/reload` if the current session needs to pick up the new tools
|
|
1
|
+
---
|
|
2
|
+
name: mcp-management
|
|
3
|
+
description: Use this skill when the user asks to install, configure, debug, enable, or disable MCP servers or MCP tools in NanoPencil.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# MCP Management
|
|
7
|
+
|
|
8
|
+
Use this skill when the user asks for any of the following:
|
|
9
|
+
|
|
10
|
+
- Install a new MCP server
|
|
11
|
+
- Configure an existing MCP server
|
|
12
|
+
- Enable or disable MCP servers in NanoPencil
|
|
13
|
+
- Debug why MCP tools are missing
|
|
14
|
+
- Add API keys or environment variables for an MCP server
|
|
15
|
+
|
|
16
|
+
## What NanoPencil already does
|
|
17
|
+
|
|
18
|
+
- MCP is enabled by default in NanoPencil unless the user launched it with `--no-mcp` or in offline mode.
|
|
19
|
+
- NanoPencil reads MCP server definitions from `~/.nanopencil/agent/mcp.json`.
|
|
20
|
+
- MCP tools are loaded into the current session at startup and on `/reload`.
|
|
21
|
+
|
|
22
|
+
Important:
|
|
23
|
+
|
|
24
|
+
- Editing `mcp.json` alone does not make new MCP tools appear immediately in the current session.
|
|
25
|
+
- After changing MCP config, tell the user to run `/reload`, or explain that a restart/reload is needed before the new tools can be used.
|
|
26
|
+
|
|
27
|
+
## How to inspect the current MCP setup
|
|
28
|
+
|
|
29
|
+
1. Read `~/.nanopencil/agent/mcp.json` if it exists.
|
|
30
|
+
2. Check whether the target server already exists in `mcpServers`.
|
|
31
|
+
3. Check whether it is enabled.
|
|
32
|
+
4. Check whether required environment variables are present.
|
|
33
|
+
|
|
34
|
+
If the file does not exist, NanoPencil will create a default one when MCP config is first loaded.
|
|
35
|
+
|
|
36
|
+
## How to add a new MCP server
|
|
37
|
+
|
|
38
|
+
1. Find the official install/start command from the server's documentation.
|
|
39
|
+
2. Prefer stable commands such as:
|
|
40
|
+
- `npx -y <package>`
|
|
41
|
+
- `uvx <package>`
|
|
42
|
+
- `python -m <module>`
|
|
43
|
+
- `node /absolute/path/to/server.js`
|
|
44
|
+
3. Add a server entry to `~/.nanopencil/agent/mcp.json`.
|
|
45
|
+
4. Set `enabled: true` only if the command and required credentials are ready.
|
|
46
|
+
5. Tell the user that `/reload` is required to apply the change.
|
|
47
|
+
|
|
48
|
+
## Config shape reminder
|
|
49
|
+
|
|
50
|
+
Use this structure:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"mcpServers": [
|
|
55
|
+
{
|
|
56
|
+
"id": "example",
|
|
57
|
+
"name": "Example",
|
|
58
|
+
"command": "npx",
|
|
59
|
+
"args": ["-y", "@example/server"],
|
|
60
|
+
"enabled": true,
|
|
61
|
+
"transport": "stdio",
|
|
62
|
+
"toolTimeout": 30000
|
|
63
|
+
}
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
For remote HTTP/SSE MCP servers, use the server's documented transport and URL fields supported by NanoPencil's MCP config.
|
|
69
|
+
|
|
70
|
+
## Safe operating rules
|
|
71
|
+
|
|
72
|
+
- Do not invent MCP package names. Check the server's official docs first.
|
|
73
|
+
- Do not claim the new MCP tools are ready until the config is written and the user has reloaded.
|
|
74
|
+
- If credentials are required, ask the user for the missing values instead of guessing.
|
|
75
|
+
- If an install command modifies global system state, tell the user what will be installed.
|
|
76
|
+
|
|
77
|
+
## Good response pattern
|
|
78
|
+
|
|
79
|
+
When the user asks you to install an MCP server:
|
|
80
|
+
|
|
81
|
+
1. Inspect `mcp.json`
|
|
82
|
+
2. Install or configure the server
|
|
83
|
+
3. Update `mcp.json`
|
|
84
|
+
4. Tell the user exactly what changed
|
|
85
|
+
5. Ask them to run `/reload` if the current session needs to pick up the new tools
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
# extensions/builtin/recap/
|
|
2
|
-
|
|
3
|
-
> P2 | Parent: ../AGENT.md
|
|
4
|
-
|
|
5
|
-
Member List
|
|
6
|
-
index.ts: recapExtension entry — registers /recap command (Free deterministic by default; --smart opts into LLM-polished synthesis) and ※ recap message renderer; on-demand only, no auto trigger
|
|
7
|
-
recap-types.ts: RECAP_MESSAGE_TYPE constant, RecapEntry / RecapSource / RecapTriggerReason / RecapSettings types, RECAP_DEFAULTS conservative settings
|
|
8
|
-
recap-budget.ts: estimateInputTokens() char-count pre-flight estimate, checkPerCallBudget() pre-call hard-cap enforcement
|
|
9
|
-
recap-extractor.ts: extractFreeRecap() + formatFreeRecap() + walkSessionActivity() — zero-LLM deterministic Free path; goal=longest substantive user message, facts=tool/file frequency top-3, next=question-mark detection
|
|
10
|
-
recap-synthesizer.ts: buildRecapContext() returns prompt + activity counts (userTurns/assistantTurns/toolCalls) via shared walkSessionActivity walker, hasMeaningfulActivity() pre-check used by handler before "Synthesizing…" notify, synthesizeSmartRecap() runs completeSimpleWithUsage with three-clause system prompt, surfaces real provider usage, returns empty_session as a defensive fallback
|
|
11
|
-
recap-renderer.ts: createRecapRenderer() — italic dim ※ recap with `{in} in / {out} out · ~${cost}` badge, no background block (low-weight in-conversation hint), Text-only (no Markdown coupling)
|
|
12
|
-
|
|
13
|
-
Rule: Members complete, one item per line, parent links valid, precise terms first
|
|
14
|
-
|
|
15
|
-
[COVENANT]: Update this file header on changes and verify against parent AGENT.md
|
|
1
|
+
# extensions/builtin/recap/
|
|
2
|
+
|
|
3
|
+
> P2 | Parent: ../AGENT.md
|
|
4
|
+
|
|
5
|
+
Member List
|
|
6
|
+
index.ts: recapExtension entry — registers /recap command (Free deterministic by default; --smart opts into LLM-polished synthesis) and ※ recap message renderer; on-demand only, no auto trigger
|
|
7
|
+
recap-types.ts: RECAP_MESSAGE_TYPE constant, RecapEntry / RecapSource / RecapTriggerReason / RecapSettings types, RECAP_DEFAULTS conservative settings
|
|
8
|
+
recap-budget.ts: estimateInputTokens() char-count pre-flight estimate, checkPerCallBudget() pre-call hard-cap enforcement
|
|
9
|
+
recap-extractor.ts: extractFreeRecap() + formatFreeRecap() + walkSessionActivity() — zero-LLM deterministic Free path; goal=longest substantive user message, facts=tool/file frequency top-3, next=question-mark detection
|
|
10
|
+
recap-synthesizer.ts: buildRecapContext() returns prompt + activity counts (userTurns/assistantTurns/toolCalls) via shared walkSessionActivity walker, hasMeaningfulActivity() pre-check used by handler before "Synthesizing…" notify, synthesizeSmartRecap() runs completeSimpleWithUsage with three-clause system prompt, surfaces real provider usage, returns empty_session as a defensive fallback
|
|
11
|
+
recap-renderer.ts: createRecapRenderer() — italic dim ※ recap with `{in} in / {out} out · ~${cost}` badge, no background block (low-weight in-conversation hint), Text-only (no Markdown coupling)
|
|
12
|
+
|
|
13
|
+
Rule: Members complete, one item per line, parent links valid, precise terms first
|
|
14
|
+
|
|
15
|
+
[COVENANT]: Update this file header on changes and verify against parent AGENT.md
|