Skills now ship with the app under /apps/skills/ (sibling of /apps/x).
Forge bundles the directory into Resources/skills/; main resolves it via
process.resourcesPath in production and a workspace-relative path in dev,
then registers it in the DI container. The runtime reads SKILL.md files
directly from the bundle — no copy to ~/.rowboat/skills/, no GitHub
tarball sync.
Drop the override layer (FSSkillsRepo, SkillOverride, edit/diff UI,
skill-update notification) since skills are now read-only and only ship
with app updates. Resolver simplifies to a single source.
Add a placeholder substitution layer so skills that need live data
(currently `tracks`, with {{TRACK_BLOCK_SCHEMA}}) keep dynamic content
without depending on TS-module evaluation.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
| name | description | license | compatibility | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| app-navigation | Navigate the app UI - open notes, switch views, filter and search the knowledge base, and manage saved views. Use when the user wants to open notes or change the UI view. | MIT | Designed for Rowboat desktop app |
|
App Navigation Skill
You have access to the app-navigation tool which lets you control the Rowboat UI directly — opening notes, switching views, filtering the knowledge base, and creating saved views.
Actions
open-note
Open a specific knowledge file in the editor pane.
When to use: When the user asks to see, open, or view a specific note (e.g., "open John's note", "show me the Acme project page").
Parameters:
path: Full workspace-relative path (e.g.,knowledge/People/John Smith.md)
Tips:
- Use
workspace-grepfirst to find the exact path if you're unsure of the filename. - Always pass the full
knowledge/...path, not just the filename.
open-view
Switch the UI to the graph or bases view.
When to use: When the user asks to see the knowledge graph, view all notes, or open the bases/table view.
Parameters:
view:\"graph\"or\"bases\"
update-base-view
Change filters, columns, sort order, or search in the bases (table) view.
When to use: When the user asks to find, filter, sort, or search notes. Examples: "show me all active customers", "filter by topic=hiring", "sort by name", "search for pricing".
Parameters:
filters: Object withset,add,remove, orclear— each takes an array of{ category, value }pairs.set: Replace ALL current filters with these.add: Append filters without removing existing ones.remove: Remove specific filters.clear: true: Remove all filters.
columns: Object withset,add, orremove— each takes an array of column names (frontmatter keys).sort:{ field, dir }where dir is\"asc\"or\"desc\".search: Free-text search string.
Tips:
- If unsure what categories/values are available, call
get-base-statefirst. - For "show me X", prefer
filters.setto start fresh rather thanfilters.add. - Categories come from frontmatter keys (e.g., relationship, status, topic, type).
- CRITICAL: Do NOT pass
columnsunless the user explicitly asks to show/hide specific columns. Omit thecolumnsparameter entirely when only filtering, sorting, or searching. Passingcolumnswill override the user's current column layout and can make the view appear empty.
get-base-state
Retrieve information about what's in the knowledge base — available filter categories, values, and note count.
When to use: When you need to know what properties exist before filtering, or when the user asks "what can I filter by?", "how many notes are there?", etc.
Parameters:
base_name(optional): Name of a saved base to inspect.
create-base
Save the current view configuration as a named base.
When to use: When the user asks to save a filtered view, create a saved search, or says "save this as [name]".
Parameters:
name: Human-readable name for the base.
Workflow Example
- User: "Show me all people who are customers"
- First, check what properties are available:
app-navigation({ action: \"get-base-state\" }) - Apply filters based on the available properties:
app-navigation({ action: \"update-base-view\", filters: { set: [{ category: \"relationship\", value: \"customer\" }] } }) - If the user wants to save it:
app-navigation({ action: \"create-base\", name: \"Customers\" })
Important Notes
- The
update-base-viewaction will automatically navigate to the bases view if the user isn't already there. open-notevalidates that the file exists before navigating.- Filter categories and values come from frontmatter in knowledge files.
- Never send
columnsorsortwithupdate-base-viewunless the user specifically asks to change them. Only pass the parameters you intend to change — omitted parameters are left untouched.