Skip to content

feat: typed skills, auto-routing, zero-prompt capture, and private setup#2

Open
richardzhuang0412 wants to merge 1 commit intoryannli:mainfrom
richardzhuang0412:feat/skills-and-workflow
Open

feat: typed skills, auto-routing, zero-prompt capture, and private setup#2
richardzhuang0412 wants to merge 1 commit intoryannli:mainfrom
richardzhuang0412:feat/skills-and-workflow

Conversation

@richardzhuang0412
Copy link
Copy Markdown
Collaborator

Summary

A comprehensive workflow upgrade that reduces capture friction to zero prompts, adds typed skills for granular note-taking, and fixes the privacy problem with public forks.

Skills (.claude/skills/)

7 built-in skills that ship with the repo:

Skill Purpose
/dump Ultra-fast raw capture — no formatting, no questions
/idea Structured idea with Potential and Next Steps sections
/todo Task capture with native macOS desktop notification reminders
/reflect Periodic reflection that references recent notes and surfaces themes
/search Find notes by keyword, theme, type, or time range
/remove Delete outdated notes (with confirmation)
/dev Switch to development mode — work on the repo itself

All capture skills are optimized to batch everything into a single Bash call (write file + git add + commit + backgrounded push) to minimize latency.

Auto-Routing

Users don't need to type skill names. An intent detection table in CLAUDE.md routes content automatically:

  • "the best frameworks feel invisible" → dump
  • "what if we sold unused SaaS seats" → idea with next steps
  • "finish API docs by Friday" → todo
  • "what did I say about marketplaces?" → searches notes
  • "delete that note about flossing" → remove (with confirmation)

When ambiguous, defaults to dump — fast capture over over-categorization.

Zero Permission Prompts

.claude/settings.json grants repo-level permissions for standard capture operations (read, write notes, git, date, ls, WebFetch). No approval prompts during normal use.

Type Taxonomy

Added type field to frontmatter spec: note, idea, reflection, learning, meeting, link, observation, todo. Enables filtering in explorations and search.

Private Setup (no more public forks)

Forks of public repos can't be made private — a problem for a personal notes app. Changed the Quick Start from gh repo fork to:

git clone https://github.com/ryannli/opennote.git my-notes
cd my-notes
./setup.sh

setup.sh now auto-creates a private repo via gh repo create --private, switches origin to it, and keeps the template as upstream for pulling future updates.

Shell Aliases & Usage Guide

README updated with:

  • note alias (one-shot claude -p for quick capture)
  • notei alias (interactive claude for multi-turn workflows)
  • Full usage guide with examples

Todo Reminders

/todo supports scheduling reminders via native macOS notifications (osascript with heredoc). Includes terminal-mode warning when run via claude -p.

Files Changed

File Change
.gitignore Selectively track .claude/skills/ and .claude/settings.json
.claude/settings.json Repo-level permissions (new)
.claude/skills/*/SKILL.md 7 skill definitions (new)
CLAUDE.md Auto-routing table, type taxonomy, updated frontmatter specs
README.md Usage guide, skills table, shell aliases, private setup instructions
setup.sh Clone-based private repo creation, timezone replacement in skills

Test plan

  • Run ./setup.sh on a fresh clone — creates private repo, configures timezone
  • claude -p "test thought" — auto-routes to dump, captures with zero prompts
  • claude -p "/idea test idea" — includes Potential and Next Steps sections
  • claude -p "/todo test task in 1 minute" — captures and fires macOS notification
  • claude -p "/search test" — finds matching notes
  • claude then /remove test — interactive deletion with confirmation
  • claude then /dev — enters dev mode, stops auto-capturing
  • Fork fresh — confirm skills and settings.json ship with the repo

🤖 Generated with Claude Code

…etup

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@ryannli
Copy link
Copy Markdown
Owner

ryannli commented Mar 10, 2026

@codex review

@ryannli
Copy link
Copy Markdown
Owner

ryannli commented Mar 10, 2026

discussed in chat with two potential changes:

  1. remove "search" and "remove" -- we don't want to limit models capability for what they are already good at
  2. for TODO, figure out a path for mobile users (either do not disable TODO function for mobile users, or have an alternative way to make it work)

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5044b2c578

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

1. Search for matching notes in one Bash call:

```bash
grep -rl "<keyword>" notes/ && echo "---" && ls -1 notes/ | grep -i "<keyword>"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Search filenames even when content grep has no hits

This command chains content and filename search with &&, so if grep -rl "<keyword>" notes/ finds no content match (exit code 1), the filename search never runs. That causes false negatives for notes where the keyword is only in the filename, which is a common /remove lookup path, especially in one-shot mode.

Useful? React with 👍 / 👎.

echo "=== Content matches ===" && \
grep -rl "<keyword>" notes/ ; \
echo "=== Type matches ===" && \
grep -l "type: <type>" notes/
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make type search read note files, not the notes directory

The type-search example calls grep -l "type: <type>" notes/, but notes/ is a directory path, not a file glob or recursive target, so this emits a directory error and returns no matches. As written, type-filter queries like “my todos” cannot work from this command template.

Useful? React with 👍 / 👎.

Comment on lines +109 to +110
alias note='cd ~/opennote && claude -p' # one-shot: capture, search, quick actions
alias notei='cd ~/opennote && claude' # interactive: multi-turn conversations
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3 Badge Point shell aliases to the repository path used in quick start

Quick Start now tells users to clone into my-notes, but the suggested aliases hardcode cd ~/opennote. If someone follows the documented setup verbatim, note/notei fail immediately with a missing-directory error until they manually adjust the path.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants