[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81731":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":13,"openIssues":14,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":10,"rankLanguage":10,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":14,"starSnapshotCount":14,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},81731,"devgrep","aasixh\u002Fdevgrep","aasixh","Fast recursive command search CLI tool built for developers.","https:\u002F\u002Fdevgrep.vercel.app\u002F",null,"Go",31,16,0,43.69,"MIT License",false,"main",true,[21,22,23,24,25,26,27,28],"cli","code-search","devloper-tools","go","golang","grep","search","terminal","2026-06-12 04:01:35","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\".\u002Fassets\u002Flogo.png\" width=\"240\" alt=\"devgrep logo\" \u002F>\n\n\u003Cstrong>Search your developer workflow history instantly.\u003C\u002Fstrong>\n\n\u003Cp>\nTerminal-native search for shell history, logs, markdown notes,\nand indexed project workflows.\n\u003C\u002Fp>\n\n\u003Cp>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Faasixh\u002Fdevgrep\">GitHub\u003C\u002Fa>\n&nbsp;·&nbsp;\n\u003Ca href=\"https:\u002F\u002Fdevgrep.vercel.app\u002F\">Documentation\u003C\u002Fa>\n&nbsp;·&nbsp;\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Faasixh\u002Fdevgrep\u002Freleases\">Releases\u003C\u002Fa>\n&nbsp;·&nbsp;\n\u003Ca href=\"https:\u002F\u002Fx.com\u002Faasixh\">Twitter\u002FX\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Faasixh\u002Fdevgrep?style=flat-square\" \u002F>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Faasixh\u002Fdevgrep?style=flat-square\" \u002F>\n\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fgo-1.24+-00ADD8?style=flat-square&logo=go\" \u002F>\n\u003C\u002Fp>\n\n\u003C\u002Fdiv>\ndevgrep is a terminal-native search engine for developer workflows. It indexes shell history, log files, and markdown notes into a local SQLite database so you can recover commands, debugging steps, and project context without digging through scattered files.\n\nNo cloud. No accounts. No telemetry. No AI layer — just fast, offline search in your terminal.\n\n\u003Cp align=\"center\">\n  \u003Cimg \n    src=\"assets\u002Fdevgrep-demo.gif\" \n    alt=\"devgrep demo\"\n    width=\"900\"\n  \u002F>\n\u003C\u002Fp>\n\n\n## Why devgrep\n\nYou fix a hard problem once. The command lives in history for a week, then vanishes behind newer entries, log rotations, and half-written notes.\n\ndevgrep keeps those breadcrumbs searchable:\n\n- shell commands you already ran\n- deployment and Docker workflows\n- log lines with severity\n- markdown notes and runbooks\n\nEverything stays on your machine in `~\u002F.local\u002Fshare\u002Fdevgrep\u002Fdevgrep.db`.\n\n---\n\n## Install\n\n**Go**\n\n```sh\ngo install github.com\u002Faasixh\u002Fdevgrep@latest\n```\n\n**Release binary**\n\n```sh\ncurl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Faasixh\u002Fdevgrep\u002Fmain\u002Fscripts\u002Finstall.sh | sh\n```\n\n**Build from source**\n\n```sh\ngit clone https:\u002F\u002Fgithub.com\u002Faasixh\u002Fdevgrep\ncd devgrep\nmake build\n.\u002Fbin\u002Fdevgrep version\n```\n\nPlatforms: Linux, macOS, and Windows (`amd64` \u002F `arm64`) via manual method (docs\u002Frelease.md).\n\n---\n\n## Quick start\n\n```sh\n# Build your first index (shell history + default paths)\ndevgrep index\n\n# Search — opens the TUI when stdout is a terminal\ndevgrep search \"docker postgres\"\n\n# Shorthand (same as search)\ndevgrep docker postgres\n```\n\n**Plain output** for scripts and pipes:\n\n```sh\ndevgrep --plain search \"kube auth failed\" --source history,logs\n```\n\n```text\n[history]\ndocker compose up -d postgres\n\n[last used]\n3 weeks ago\n\n[directory]\n~\u002Fprojects\u002Fauth-api\n\n[score]\n92\n```\n\n**Index a project** before searching its logs and notes:\n\n```sh\ndevgrep index .\ndevgrep search \"migration failed\"\n```\n\n---\n\n## Example workflows\n\n### Recover a shell command\n\n```sh\ndevgrep search \"kubectl rollout undo\"\n```\n\nResults show the original command, when you last ran it, and the working directory inferred from history.\n\n### Find a deployment step\n\n```sh\ndevgrep --plain search \"terraform apply staging\"\n```\n\n### Search project logs\n\n```sh\ndevgrep index ~\u002Fprojects\u002Fapi\ndevgrep search --source logs \"connection refused\"\ndevgrep search --source logs --tail --regex \"ERROR|WARN\"\n```\n\n### Search markdown notes\n\n```sh\ndevgrep search --source notes \"postgres failover\"\n```\n\n### Inspect what is indexed\n\n```sh\ndevgrep sources\ndevgrep sources --tree\ndevgrep stats\ndevgrep doctor\n```\n\n---\n\n## Features\n\n| | |\n| --- | --- |\n| **Local-first** | SQLite storage, WAL mode, incremental indexing |\n| **Shell history** | Bash and zsh, duplicate suppression, cwd inference |\n| **Logs** | `.log` files with severity detection and tail mode |\n| **Notes** | Markdown fragments from configured paths |\n| **Search** | Fuzzy matching with typo-tolerant ranking fallback |\n| **TUI** | Full-screen Bubble Tea UI, vim-style navigation |\n| **Watch mode** | `fsnotify` re-indexing for explicit project paths |\n| **Unix-friendly** | `--plain` output, direct search shorthand, pipe-safe |\n| **Operational** | `sources`, `stats`, and `doctor` for visibility |\n\n---\n\n## How indexing works\n\n```text\n  ~\u002F.bash_history ──┐\n  ~\u002F.zsh_history  ──┼──► indexers ──► SQLite ──► search + ranking ──► TUI \u002F plain output\n  *.log, *.md     ──┘         ▲\n                              │\n                    incremental offsets + watch\n```\n\n1. **Indexers** parse history, logs, and notes into normalized documents.\n2. **Storage** persists documents, source offsets, and search stats.\n3. **Search** loads candidates from SQLite, applies fuzzy matching, and ranks results.\n4. **Commands** expose indexing, search, and maintenance through Cobra.\n\nShell history is indexed incrementally. Log and note indexers walk configured paths with shared ignore rules (`.git`, `node_modules`, large files, binaries, and more).\n\n---\n\n## Sources\n\n| Source | Location | Label in results |\n| --- | --- | --- |\n| Shell history | `~\u002F.bash_history`, `~\u002F.zsh_history` | `[history]` |\n| Logs | `.log` under `indexed_paths` | `[log]` |\n| Notes | `.md` under `indexed_paths` | `[note]` |\n\nDefault note\u002Flog discovery paths (overridable in config):\n\n```text\n.\n~\u002Fnotes\n~\u002FDocuments\n```\n\nConfig: `~\u002F.config\u002Fdevgrep\u002Fconfig.yaml` · Database: `~\u002F.local\u002Fshare\u002Fdevgrep\u002Fdevgrep.db`\n\nSee [examples\u002Fconfig.yaml](examples\u002Fconfig.yaml) and [docs\u002Fconfig.md](docs\u002Fconfig.md).\n\n---\n\n## Commands\n\n| Command | Description |\n| --- | --- |\n| `devgrep search [query]` | Search indexed workflows (TUI or plain) |\n| `devgrep [query]` | Shorthand for `search` |\n| `devgrep index [path...]` | Index history, logs, and notes |\n| `devgrep index . --dry-run` | Preview files without writing to SQLite |\n| `devgrep index \u003Cpath> --no-watch` | Index once, do not stay in watch mode |\n| `devgrep index --watch` | Restore and run persisted watchers |\n| `devgrep sources` | List indexed source locations |\n| `devgrep sources --tree` | Tree view of indexed paths |\n| `devgrep stats` | Document counts, DB size, top searches |\n| `devgrep doctor` | Local health checks |\n| `devgrep version` | Version and build metadata |\n\n**Global flags:** `--config`, `--db`, `--plain`, `--verbose`\n\n**Search flags:** `--source history,logs,notes`, `-n` limit, `-i` force TUI, `--tail`, `--regex`, `--severity`\n\n**Index flags:** `--source`, `--path`, `--watch`, `--no-watch`, `--dry-run`, `-y` confirm risky paths\n\n---\n\n## Interactive TUI\n\nWhen stdout is a TTY, search opens a full-screen interface:\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"assets\u002Fscreenshot-doctor.svg\" alt=\"devgrep doctor output\" width=\"520\">\n\u003C\u002Fp>\n\n| Key | Action |\n| --- | --- |\n| `\u002F` | Focus live search |\n| `j` \u002F `k` | Move selection |\n| `gg` \u002F `G` | Jump to top \u002F bottom |\n| `enter` | Run selected history command |\n| `y` | Copy selected result |\n| `esc` \u002F `q` | Quit |\n\nLog and note previews include nearby context lines when the source file is still on disk.\n\n---\n\n## Watch mode\n\nIndexing an explicit directory persists it as a watched path and, by default, keeps it synchronized:\n\n```sh\ndevgrep index ~\u002Fprojects\u002Fapi\n```\n\nWatch mode uses `fsnotify` with debounced updates. New and modified files are re-indexed; deleted files are removed from the database.\n\n```sh\ndevgrep index ~\u002Fprojects\u002Fapi --no-watch   # index once\ndevgrep index --watch                     # restore saved watchers\n```\n\nRisky paths (`\u002F`, `~`) require confirmation unless you pass `--yes`. Use `--dry-run` to inspect a tree before indexing.\n\n---\n\n## Architecture\n\n```text\ncmd\u002F                  Cobra commands and CLI wiring\ninternal\u002Fhistory\u002F     bash\u002Fzsh parsing and incremental history indexing\ninternal\u002Flogs\u002F        log indexing and tail mode\ninternal\u002Findexer\u002F     pluggable indexer interface, markdown notes\ninternal\u002Fstorage\u002F     SQLite migrations, documents, source state\ninternal\u002Fsearch\u002F      fuzzy search, formatting, result types\ninternal\u002Franking\u002F     scoring model (recency, frequency, fuzzy, cwd, …)\ninternal\u002Ftui\u002F         Bubble Tea interface\ninternal\u002Fdoctor\u002F      health checks\n```\n\nNew sources implement the `Indexer` interface in `internal\u002Findexer` without changing command wiring.\n\nDeeper detail: [docs\u002Farchitecture.md](docs\u002Farchitecture.md)\n\n---\n\n## Configuration\n\ndevgrep runs with sensible defaults. No config file is required for the first run.\n\nOn first `devgrep index`, defaults are written to `~\u002F.config\u002Fdevgrep\u002Fconfig.yaml` if missing. Customize indexed paths, ignore rules, ranking weights, history limits, log extensions, and TUI colors.\n\nFull reference: [docs\u002Fuser-manual.md](docs\u002Fuser-manual.md) · [docs\u002Fconfig.md](docs\u002Fconfig.md)\n\n---\n\n## Development\n\n```sh\nmake build    # bin\u002Fdevgrep\nmake test     # race detector + coverage\nmake lint     # golangci-lint or go vet\nmake bench    # includes 100k-document search benchmark\n```\n\nContributions welcome. Good starting points: new local source indexers, ranking improvements, shell-specific history metadata, and benchmarks.\n\nPlease keep changes **offline-first**, **terminal-first**, and **dependency-conscious**.\n\n---\n\n## Privacy\n\ndevgrep does not phone home. It does not collect usage data, queries, commands, paths, or logs. Indexing and search happen entirely on local files you point it at.\n\n---\n\n## License\n\n[MIT](LICENSE)\n","devgrep 是一个为开发者设计的终端原生搜索工具，能够快速递归地搜索命令行历史、日志文件和 Markdown 笔记。其核心功能是将这些信息索引到本地 SQLite 数据库中，以便用户可以轻松找回曾经执行过的命令、调试步骤以及项目上下文，而无需在分散的文件中查找。该工具完全离线运行，不依赖云端服务或账号系统，也没有任何遥测数据收集或 AI 层面的功能，保证了用户的隐私安全与搜索速度。它非常适合需要频繁回顾过往操作记录、进行故障排查或是管理复杂项目工作流的技术人员使用。",2,"2026-06-11 04:06:09","CREATED_QUERY"]