Context-aware developer note-taking CLI tool
shellp encourages better documentation by intelligently detecting significant development commands and prompting you to add contextual notes. It understands git state, file changes, and command patterns to suggest when documentation would be valuable. Notes are automatically categorized, tagged, and searchable.
shellp is available for Fedora/RHEL as an RPM package and can be built from source using Go.
After installation, enable shell integration to have shellp automatically detect commands and prompt for notes:
Configuration is stored in ~/.shellp/config.json:
| Option | Type | Default | Description |
|---|---|---|---|
prefer_editor | boolean | false | Use $EDITOR for longer notes instead of inline prompt |
editor_timeout_seconds | integer | 300 | Max time (seconds) to wait for editor |
enabled_triggers | array | ["git", "build", ...] | Categories that trigger prompts |
disabled_commands | array | [] | Specific commands to skip |
min_priority | integer | 3 | Minimum priority for suggestions (1-10) |
show_context | boolean | true | Show git branch, file counts in prompts |
show_file_count | boolean | true | Show modified/staged file counts |
max_suggestions | integer | 1 | Limit suggestions per prompt |
date_format | string | 2006-01-02 15:04 | Go time format for display |
default_category | string | general | Default category for notes |
auto_tags | boolean | true | Auto-generate tags from content |
quiet_mode | boolean | false | Disable all prompting |
debug_mode | boolean | false | Enable verbose output |
~/.shellp/
├── config.json # Configuration
├── notes/ # All saved notes (JSON files)
│ ├── <note-id>.json
│ └── ...
└── hook.sh # Shell integration script $EDITOR - Preferred text editor for note editing$SHELL - Determines shell integration (bash/zsh)$HOME - Root for .shellp directoryshellp is a developer note-taking CLI that encourages documentation by intelligently prompting for notes when you run significant commands. It analyzes command context, git state, and file changes to determine when documentation would be valuable.
shellp analyzes command context and provides intelligent suggestions:
shellp is implemented in approximately 5,860 lines of Go code, using the Cobra CLI framework for command structure. The architecture separates concerns into storage, search, rules, and integration layers.
~/.shellp/notes/shellp/
├── main.go # CLI root command
├── cmd/ # Command implementations
│ ├── hook.go # Shell hook processor
│ ├── notes.go # View notes
│ ├── search.go # Search & filter
│ ├── manage.go # Edit/delete notes
│ ├── links.go # Cross-project linking
│ ├── config.go # Configuration
│ ├── stats.go # Statistics
│ ├── share.go # Export/import
│ └── integrate.go # External integrations
├── internal/
│ ├── notes/ # Storage & search
│ │ ├── storage.go # JSON persistence
│ │ └── search.go # Full-text search
│ ├── git/ # Git integration
│ ├── context/ # Command analysis
│ ├── config/ # Configuration
│ ├── linking/ # Project linking
│ ├── sharing/ # Export/import
│ ├── integrations/ # Webhooks
│ └── rules/ # Command rules
└── Makefile
Notes are stored as individual JSON files in ~/.shellp/notes/:
Full-text search with weighted relevance scoring:
Pattern-based command classification with priorities (1-10):
git - commit, merge, rebase operationspackage-management - npm, yarn, pnpmcontainerization - docker operationsdeployment - kubectl, helminfrastructure - terraformbuild - make, buildsdevelopment - language toolsCommand Execution
↓
Shell Hook (DEBUG trap / preexec)
↓
shellp hook <command>
↓
Context Analysis
├→ Git state (branch, changes)
├→ File change detection
└→ Generate suggestions
↓
Rules Engine
├→ Categorize command
└→ Generate initial tags
↓
Priority Filter (min_priority)
↓
Prompt User
↓
Save Note
├→ Auto-categorization
├→ Auto-tagging
├→ Project linking
└→ Write to ~/.shellp/notes/ {
"id": "abc123def456",
"command": "git commit -m 'feat'",
"content": "Added user authentication",
"category": "git",
"tags": ["feature", "security", "commit"],
"timestamp": "2025-08-24T21:53:59Z",
"directory": "/home/user/my-project",
"project_id": "ff372b667cad",
"project_name": "my-project",
"references": [],
"linked_to": []
} | Option | Type | Default | Description |
|---|---|---|---|
shellp notes | command | - | View recent notes (last 10) |
shellp search [query] | command | - | Search through notes |
shellp search categories | command | - | List all note categories |
shellp search tags | command | - | List all note tags |
shellp manage list | command | - | List notes for editing |
shellp manage edit <n> | command | - | Edit note by number |
shellp stats | command | - | View statistics dashboard |
shellp config show | command | - | View configuration |
shellp config set <k> <v> | command | - | Set configuration value |
shellp version | command | - | Show version info |
| Option | Type | Default | Description |
|---|---|---|---|
--category, -c | flag | - | Filter by category |
--tag, -t | flag | - | Filter by tags (repeatable) |
--recent, -r | flag | - | Time filter (7d, 2w, 24h) |
--directory, -d | flag | - | Filter by directory path |
--limit, -l | flag | 50 | Maximum results |
--sort, -s | flag | date | Sort by date or relevance |
| Option | Type | Default | Description |
|---|---|---|---|
shellp share export | command | - | Export notes to JSON bundle |
shellp share import <file> | command | - | Import notes from bundle |
shellp share report | command | - | Generate activity report |
shellp share list | command | - | List bundle files |
| Option | Type | Default | Description |
|---|---|---|---|
shellp links show | command | - | Show current project info |
shellp links related | command | - | Find related notes |
shellp links projects | command | - | List all known projects |
shellp links graph <n> | command | - | Show relationship graph |
| Option | Type | Default | Description |
|---|---|---|---|
shellp integrate setup <type> | command | - | Setup slack/discord/webhook |
shellp integrate test | command | - | Test connection |
shellp integrate enable | command | - | Enable notifications |
shellp integrate disable | command | - | Disable notifications |
shellp integrate status | command | - | Show integration status |
Symptoms: Commands run but no prompts appear.
For large note collections (1000+ notes):