JSON-Rohbericht maschinenlesbar
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 1396,
"has_wiki": true,
"homepage": "https://vecgrep.dev",
"languages": {
"Go": 1617184,
"Shell": 50,
"Dockerfile": 1539
},
"pushed_at": "2026-07-19T21:19:51Z",
"created_at": "2026-01-20T05:35:24Z",
"owner_type": "User",
"updated_at": "2026-07-19T21:19:54Z",
"description": "Local-first semantic code search using Ollama embeddings and sqlite-vec",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": "https://abdulachik.dev",
"name": "Abdul Hamid",
"type": "User",
"login": "abdul-hamid-achik",
"company": "@graphite-systems ",
"location": "México",
"followers": 49,
"avatar_url": "https://avatars.githubusercontent.com/u/7379966?v=4",
"created_at": "2014-04-23T03:26:08Z",
"is_verified": null,
"public_repos": 113,
"account_age_days": 4477
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v2.21.0",
"kind": "minor",
"published_at": "2026-07-19T21:22:55Z"
},
{
"tag": "v2.20.0",
"kind": "minor",
"published_at": "2026-07-18T21:24:42Z"
},
{
"tag": "v2.19.1",
"kind": "patch",
"published_at": "2026-07-16T19:11:43Z"
},
{
"tag": "v2.19.0",
"kind": "minor",
"published_at": "2026-07-16T18:05:52Z"
},
{
"tag": "v2.18.0",
"kind": "minor",
"published_at": "2026-07-16T05:55:23Z"
},
{
"tag": "v2.17.0",
"kind": "minor",
"published_at": "2026-07-13T18:47:35Z"
},
{
"tag": "v2.16.0",
"kind": "minor",
"published_at": "2026-07-09T18:37:22Z"
},
{
"tag": "v0.31.0",
"kind": "minor",
"published_at": "2026-07-09T18:37:21Z"
},
{
"tag": "v2.15.0",
"kind": "minor",
"published_at": "2026-07-07T01:18:03Z"
},
{
"tag": "v2.14.1",
"kind": "patch",
"published_at": "2026-07-01T03:07:06Z"
},
{
"tag": "v2.14.0",
"kind": "minor",
"published_at": "2026-06-29T15:56:28Z"
},
{
"tag": "v2.13.0",
"kind": "minor",
"published_at": "2026-06-28T19:13:45Z"
},
{
"tag": "v2.12.0",
"kind": "minor",
"published_at": "2026-06-27T20:31:23Z"
},
{
"tag": "v2.11.0",
"kind": "minor",
"published_at": "2026-06-27T18:36:48Z"
},
{
"tag": "v2.10.2",
"kind": "patch",
"published_at": "2026-06-27T18:28:58Z"
},
{
"tag": "v2.10.1",
"kind": "patch",
"published_at": "2026-06-27T07:55:10Z"
},
{
"tag": "v2.10.0",
"kind": "minor",
"published_at": "2026-06-26T21:40:28Z"
},
{
"tag": "v2.7.1",
"kind": "patch",
"published_at": "2026-06-25T05:07:51Z"
},
{
"tag": "v2.7.0",
"kind": "minor",
"published_at": "2026-06-25T04:23:23Z"
},
{
"tag": "v2.6.0",
"kind": "minor",
"published_at": "2026-06-24T20:36:21Z"
},
{
"tag": "v2.5.0",
"kind": "minor",
"published_at": "2026-06-24T16:00:11Z"
},
{
"tag": "v2.4.0",
"kind": "minor",
"published_at": "2026-06-23T23:34:45Z"
},
{
"tag": "v2.3.1",
"kind": "patch",
"published_at": "2026-06-23T23:02:13Z"
},
{
"tag": "v2.3.0",
"kind": "minor",
"published_at": "2026-06-23T22:18:11Z"
},
{
"tag": "v2.2.0",
"kind": "minor",
"published_at": "2026-06-21T21:07:13Z"
},
{
"tag": "v2.1.0",
"kind": "minor",
"published_at": "2026-06-20T01:24:55Z"
},
{
"tag": "v2.0.1",
"kind": "patch",
"published_at": "2026-06-15T17:43:50Z"
},
{
"tag": "v2.0.0",
"kind": "major",
"published_at": "2026-06-15T17:38:15Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2026-03-02T20:10:07Z"
},
{
"tag": "v1.2.2",
"kind": "patch",
"published_at": "2026-02-07T15:23:24Z"
},
{
"tag": "v1.2.1",
"kind": "patch",
"published_at": "2026-01-31T01:34:41Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2026-01-30T19:34:45Z"
},
{
"tag": "v1.1.0",
"kind": "minor",
"published_at": "2026-01-30T19:35:29Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2026-01-29T04:54:52Z"
},
{
"tag": "v0.5.0",
"kind": "minor",
"published_at": "2026-01-26T00:23:41Z"
},
{
"tag": "v0.4.2",
"kind": "patch",
"published_at": "2026-01-23T07:39:07Z"
},
{
"tag": "v0.4.1",
"kind": "patch",
"published_at": "2026-01-21T21:38:45Z"
},
{
"tag": "v0.3.1",
"kind": "patch",
"published_at": "2026-01-21T19:30:31Z"
},
{
"tag": "v0.4.0",
"kind": "minor",
"published_at": "2026-01-21T04:26:46Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2026-01-20T23:22:51Z"
},
{
"tag": "v0.2.10",
"kind": "patch",
"published_at": "2026-01-20T22:42:20Z"
},
{
"tag": "v0.2.9",
"kind": "patch",
"published_at": "2026-01-20T21:55:00Z"
},
{
"tag": "v0.2.8",
"kind": "patch",
"published_at": "2026-01-20T21:11:27Z"
},
{
"tag": "v0.2.7",
"kind": "patch",
"published_at": "2026-01-20T21:01:47Z"
},
{
"tag": "v0.2.6",
"kind": "patch",
"published_at": "2026-01-20T20:50:13Z"
},
{
"tag": "v0.2.5",
"kind": "patch",
"published_at": "2026-01-20T19:57:00Z"
},
{
"tag": "v0.2.4",
"kind": "patch",
"published_at": "2026-01-20T19:51:18Z"
},
{
"tag": "v0.2.3",
"kind": "patch",
"published_at": "2026-01-20T19:40:34Z"
},
{
"tag": "v0.2.2",
"kind": "patch",
"published_at": "2026-01-20T19:30:30Z"
},
{
"tag": "v0.2.1",
"kind": "patch",
"published_at": "2026-01-20T19:03:36Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2026-01-20T18:56:29Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2026-01-20T18:39:26Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2026-01-20T18:32:54Z"
}
],
"recent_commits": [
{
"oid": "97144781e69632b8a18d55b301f741cb76ea2136",
"body": "Ship a production-ready Studio: list results with fuzzy filter, spinner and\ngradient progress for honest indexing, status tables, readiness chips, and\nmouse wheel/click. Gate large/full indexes with dry-run confirm on CLI and\nStudio (small empty projects auto-start). Expand unit coverage and ten\npassing Glyph Studio flows.",
"is_bot": false,
"headline": "feat: polish Studio TUI with Charm v2 components and index plan-first UX",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-19T21:19:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4cb8c14fd1a09e12b6517e5af21f729bb7847d1b",
"body": "Document the agent readiness envelope, vecgrep_ensure modes, and phase-aware\nindex progress shipped on main.",
"is_bot": false,
"headline": "Prepare v2.20.0 changelog for readiness, ensure, and progress UX.",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-18T21:22:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4df0fa5018b75d874584fe13c3c6b5d6a3a87f5b",
"body": "Add a shared readiness envelope so MCP search no longer confuses empty or profile-mismatched indexes with zero hits, gate readiness before daemon search, and expose vecgrep_ensure for explicit check/index paths. Emit walk-complete progress so CLI and Studio stop showing a shrinking percentage during discovery, with empty-index first-run CTAs in Studio.",
"is_bot": false,
"headline": "Improve index readiness UX for agents and honest progress for humans.",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-18T21:10:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7e9aaf864188ed1ed2cd788afea76f3172a192ae",
"body": "…ions\n\nIsRunning dialed the daemon socket with no deadline, so a wedged daemon\nor a foreign process squatting on the path blocked interactive callers\n(studio startup, test runs) indefinitely — observed hanging go test for\n10 minutes against a live socket. The whole probe (dial + ping +\nresponse) is \n[…]\nne tag carries the\ndirective), so @latest falls back to the current default branch;\nHomebrew remains the supported channel for versioned builds.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Bound the daemon liveness probe and retract stale 0.x/1.x module vers…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-16T19:08:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5531667dcc2fae1eb17ac2676774f28413786cd1",
"body": "…id weights\n\nAfter hybrid search degrades to keyword-only, raw unbounded BM25 landed\non Score and the 0-1 --min-score filter silently no-op'd. Keyword-mode\nscores are now BM25/maxBM25 within the result set (top hit = 1.0,\nDistance keeps the raw value) so min-score works in every mode; the\ndegradatio\n[…]\nnstead of\ndefaults. CHANGELOG backfilled for the 20 releases between v2.2.0 and\nv2.18.0, with two bullets moved to their true release (v2.14.1).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Normalize keyword BM25 scores for min-score and honor configured hybr…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-16T18:01:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9f71d6e6a0f704a738a5fe8aa4fce1c2078c96e6",
"body": "Covers per-mode score scales (calibrated 0-1 hybrid, raw cosine in\nsemantic, raw BM25 in keyword and degraded-hybrid), substance damping,\nthe degradation warning surfaces, and the min-score no-op after\ndegradation. Fixes the landing-page demo scores that were impossible\nunder the new calibration and the stale claim that veclite owns fusion.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Document v2.18.0 score semantics across docs, help, and MCP descriptions",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-16T06:18:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "386987061b000bcfd833cb85c50ca7dd4dc66c1b",
"body": "Hybrid-mode scores were raw Reciprocal Rank Fusion values (k=60), capping\nthe reportable score at ~0.0164 — every result showed 0.01–0.02, tiny\nimport-only chunks outranked substantive code via BM25 length bias, and\nmin_score above 0.02 wiped all results. Hybrid search now runs vector and\nBM25 retri\n[…]\nPC, and the CLI\ndaemon fast-path, which previously dropped warnings entirely. Strict\nSearch still errors; semantic mode never silently degrades.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix hybrid scoring: replace raw RRF values with calibrated score fusion",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-16T05:51:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1ff6f16776553f3f78b005b20bb0878eecd02074",
"body": null,
"is_bot": false,
"headline": "feat: add trusted structural ingestion and freshness",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-13T18:42:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a492903ccea5a9ab86f8661ff8dea37104ffc002",
"body": "brew install abdul-hamid-achik/tap/vecgrep is the recommended install\nmethod. From-source build remains as an alternative. Updated the final\nCTA on the landing page, the quick-start guide, and the README\ninstallation section.",
"is_bot": false,
"headline": "add Homebrew install method to landing page, quick-start, and README",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-13T05:53:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0dcacfea04006a2aab5e13169c5412b8a261b787",
"body": "Landing page:\n- Rewrite index.md with 8 feature cards, how-it-works 3-step flow,\n terminal demo, vecgrep vs grep comparison table, why-vecgrep section,\n MCP integration CTA, provider matrix, FAQ accordion, and final CTA\n- Add stats banner with flex layout (4 providers, 11 MCP tools, 3 modes)\n- Fix\n[…]\nostname: vecgrep.dev)\n- Add robots.txt with sitemap reference\n- Generate 1200x630 OG image (PNG via headless Chromium screenshot)\n- Add SVG favicon and apple-touch-icon\n- Add Providers link to top nav",
"is_bot": false,
"headline": "overhaul docs landing page and add SEO infrastructure",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-13T05:39:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cb4f0b6210068682c296cccd174086dd1cb89f01",
"body": "The global registry (~/.vecgrep/config.yaml) accumulates entries for\ndeleted checkouts and temp directories from old runs, each dragging an\norphaned index data dir under ~/.vecgrep/projects/. Add\n`vecgrep projects prune`:\n\n- removes entries whose project path no longer exists (a path that merely\n c\n[…]\nwhen\n the data_dir resolves strictly inside ~/.vecgrep/projects; a hand-edited\n data_dir pointing elsewhere is never touched (covered by test)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: vecgrep projects prune — clean stale registry entries",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-12T04:08:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e81a11a77f0ec96bf8e552ba38652a1aabe5a6fc",
"body": "Bump veclite to v0.24.0 (pulls go-sdk v1.6.1 transitively; all tests pass).\nEvery writable open now sets WithWAL(true):\n\n- index backend (InitWithOptions): chunks accepted mid-index or by the\n long-running daemon survive a crash between snapshot saves. Bulk indexing\n pays one fsync per InsertBatch\n[…]\n\n\nVerified end-to-end: indexing a sample project creates vectors.veclite.wal\nand leaves it folded (16-byte header, 0 pending) after a clean run.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: adopt veclite v0.24.0 and enable the write-ahead log for writers",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-12T03:57:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5f29ad997e2a3ffd31d68090c9454e56c81ee4a8",
"body": "Grow the embedded benchmark dataset from 30/30 to production-representative\nscale: 14 languages (adds java, sql, json, toml, c, dockerfile, hcl),\n18 distractors, 12 multi-relevant queries, and hard-negative pairs (JWT\nvalidate vs decode, jitter vs plain backoff, token-bucket vs fixed-window,\npool-te\n[…]\n required list.\n\nBaseline on this corpus (ollama): fast-local MRR 0.831, quality-code\nMRR 0.886 / R@10 0.992 — profiles now measurably separate.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test: expand embedding relevance corpus to 78 docs / 66 queries",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-12T00:53:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3a04a272c15f6df707883dbb603444cb548c17a6",
"body": null,
"is_bot": false,
"headline": "fix: make Ollama truncation warnings truthful",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-11T20:38:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "799d9a105dfb207985a9a6ab062782734436fe58",
"body": null,
"is_bot": false,
"headline": "feat: optimize indexing and embedding workflows",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-11T20:21:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee25d4a004d19be6800ecbbdf80a593c16cf1972",
"body": "- bump veclite to v0.23.0 (per-call MCP locking, structured errors,\n model registry)\n- memory recall now ranks with exponential temporal decay (30d half-life\n default) and importance boost (0.25 default) — recent + important\n memories surface first; both are ranking-only, nothing is excluded.\n R\n[…]\nord-mode fallback on low scores, empty-result guidance)\n- drop CODEMAP-INTEGRATION.md + BRANCH-INDEX-AND-DAEMON.md (shipped\n working docs); live contract now documented at docs/codemap-integration.md",
"is_bot": false,
"headline": "feat: memory ranking intelligence + search affordances (veclite 0.23)",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-09T18:33:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c832e15183e8af4d72bbab5f628221334fd8a816",
"body": "Wire vecgrep's CLI for adapter consumers (Cortex) that need\nmachine-distinguishable signals:\n\n- Add --min-score to search and similar, wiring the existing\n SearchOptions.MinScore filter to a cobra flag (default 0 preserves\n behavior). Drops sub-threshold hits before emitting the array.\n- Route sco\n[…]\nn\n authoritative empty result.\n\nAdd MemoryStore.Ping and Service.IndexMeta helpers, plus unit tests for\nmin-score filtering, index metadata, the envelope shape, and the\nprovider-unavailable envelope.",
"is_bot": false,
"headline": "feat: machine-consumer contracts for search and memory recall",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-07T01:15:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "432d16f2e935942ee13402d19fce8a92d3804805",
"body": "vecgrep serve built s.codemap from the zero-value SDKServerConfig.Codemap\n(always nil), so vecgrep_status/vecgrep_index reported \"codemap binary not\nfound\" even when codemap was installed — silently disabling structural\nre-ranking and impact-based search scoping. Re-resolve s.codemap from the\nprojec\n[…]\nolute\npath so subsequent exec.Command calls don't re-fail a PATH lookup.\n\nRegression tests: ResolveBinary fallback/preferred/not-found/explicit-path;\nNewSDKServer resolves codemap from project config.",
"is_bot": false,
"headline": "fix(mcp): resolve codemap from project config in NewSDKServer",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-07-01T03:05:06Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f0d51ab1b471afd5dfc77237e23df5484aad8cee",
"body": null,
"is_bot": false,
"headline": "style: go fmt client/studio files (GoReleaser dirty-tree fix)",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-29T15:54:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e2837245540debbba9571e86ad0345213bbed3f7",
"body": "When the daemon hub owns the write lock, the studio used to fail to open\nwith 'the database is locked' and was unusable. Now it falls back to a\nread-only session (lock-free since veclite v0.22.0) so browsing/search\nwork alongside a running daemon:\n\n- On open, if the write lock is held by a running d\n[…]\nndexSync)\n with a 'reindexing via daemon' status; reset (!) and delete (x) are\n blocked with guidance to stop the daemon first.\n- Tests: isLockHeldByDaemon logic, readOnly status + header indicator.",
"is_bot": false,
"headline": "feat(studio): read-only fallback + daemon-delegated reindex",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-29T15:50:14Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1dad3f04911b1d946cd0b415304ef24417792c7a",
"body": "When the daemon hub is running, it owns the exclusive write lock for every\nopen project. A plain `vecgrep index` opened a second write session and\ncollided with the daemon's lock ('the database is locked. The daemon may be\nrunning.'). Now `vecgrep index` detects a running daemon and delegates the\nre\n[…]\nefresh veclite version to v0.22.1.\n- go.mod: veclite v0.22.0 -> v0.22.1 (also fixes the HNSW panic on insert\n after the entry point is soft-deleted, which crashed the daemon's\n incremental reindex).",
"is_bot": false,
"headline": "feat(index): delegate vecgrep index to a running daemon hub",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-29T15:23:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "df1f24b2b04d6052c1842b4567a7a0e9a414ba77",
"body": "veclite v0.22.0 makes WithSharedRead opens lock-free (no flock), so a\nlong-lived reader (MCP server, search) never blocks a writer and is never\nblocked by one. Backward-compatible API; no code changes needed.\n\n- go.mod: veclite v0.21.0 -> v0.22.0.\n- internal/mcp/session_test.go: drop the 'lock file \n[…]\nion (lock-free reads leave no .lock file); keep the\n idle-eviction + write-after-eviction checks.\n- cmd/vecgrep/main.go: update the serve lock comment (read-only opens are\n lock-free since v0.22.0).",
"is_bot": false,
"headline": "chore: bump veclite to v0.22.0 (lock-free read-only opens)",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-29T14:32:20Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d447b99c034fdc6052aceedd40a75c1866adb7af",
"body": "Replace the one-daemon-per-project model with a single hub process that\nlistens on one global socket (~/.vecgrep/daemon.sock) and routes JSON-RPC\nby project root to per-project workers, opening each lazily on first\nrequest (and pre-opening any roots passed to `daemon start`).\n\n- internal/daemon/work\n[…]\nottle for now (shared cross-project rate limiting is a\nfollow-up). Branch switching still rejected while a worker holds a project.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(daemon): multi-project hub — one socket, lazy per-project workers",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-28T18:23:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ecfc44ed37133476b50985a1bc75dd0f0ee760b8",
"body": "FindProjectRootFrom walked up the directory tree treating any .vecgrep\ndirectory as a project root, but the global store at ~/.vecgrep shares that\nname with the project-local marker. Running `vecgrep index` from a directory\nwith no closer marker resolved the project root to $HOME and indexed the\nent\n[…]\n config dir when matching the .vecgrep marker, and add\nregression tests covering the home/global dir and a genuine nested project.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: don't treat global ~/.vecgrep as a project-root marker",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-27T20:29:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "121f10ddc417f1e7aec9c9f8ae2f9e4358af2e61",
"body": "…ive progress bar\n\nReworks indexing into a concurrent chunk -> embed -> insert pipeline: chunk\nworkers feed per-chunk items that are coalesced into provider batches across\nfiles, and each file is inserted and reported the moment its last chunk is\nembedded. Chunks from many files share a batch, so th\n[…]\npipeline (race-clean), the all-or-nothing retry semantics, the\ncount-mismatch guard, and the progress-bar log suppression/restore.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: pipelined indexing with all-or-nothing per-file inserts and a l…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-27T18:34:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "02b9ad0a5efc8ff13471c21f7f3d8126e090d18d",
"body": "…nstalled\n\nvecgrep_investigate's blast-radius scoping never engaged, for two reasons:\n\n1. Parser drift. The `codemap impact --json` parser was written for an older\n codemap output shape. codemap v0.17.0 emits `found` (not `indexed`), no flat\n `files` array, and `blast_radius` as a transitive-cal\n[…]\nmap hotspots` call; set structural_weight=0 to keep investigate scoping\nwithout the per-search rerank.\n\ngo test -race ./... clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: parse codemap v0.17.0 impact output + auto-enable codemap when i…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-27T18:26:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "67bdb2d887a4f00bb7a3e95f3b943a4bc346475f",
"body": "`vecgrep serve --mcp` opened a writable session at startup and held an\nexclusive VecLite lock for its entire lifetime, blocking `vecgrep daemon\nstart` and every other reader (\"database file is locked by another\nprocess\"). Fix that and a cluster of related concurrency bugs found while\nauditing the lo\n[…]\nlusive open fails;\n surface previously-swallowed reloadIfStale errors.\n\nNew tests cover each fix; `go test -race ./...` is clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: resolve MCP/daemon index lock contention and concurrency races",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-27T07:52:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "141f72d53265b5ff4c3852ebb87f0f4db4201363",
"body": "mcpSession tests:\n- Lazy open (no lock until first call)\n- RO opens with shared lock, cached\n- RW closes RO first, returns uncached handle\n- Lock error on contention wraps ErrFileLocked\n- hasDatabase, reloadIfStale (threshold + daemon.json mtime signal)\n- Close releases RO lock allowing another proc\n[…]\nts:\n- available() true/false for live/missing socket\n- search, reindex, stats socket calls\n- call timeout via context deadline\n- formatDaemonSearchResult, formatStatsResult, formatLockError formatting",
"is_bot": false,
"headline": "test: add dedicated tests for mcpSession and daemonClient",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-26T21:40:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "640e9ed608edc792867f7ee23e38eaaff2a09957",
"body": "The MCP server no longer opens the database in read-write mode at\nstartup. Instead it uses a lazy dual-handle session (mcpSession) that\nopens read-only (shared flock) on first search and read-write (exclusive\nflock) per-call for write operations, releasing the lock when done.\n\nThis resolves the mult\n[…]\naemon.go: extended search params + daemon.stats handler\n- internal/db/db.go + veclite_backend.go: Reload() passthrough for RO auto-reload\n- Bumped veclite dep to v0.21.0 (adds veclite/session package)",
"is_bot": false,
"headline": "feat: lock-free MCP initialization with lazy dual-handle session",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-26T21:24:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cce6c7d56d401a01632645f9a057ccd4cd8cc4f4",
"body": "Add the missing investigation flow from FEATURE.md: codemap impact\ncomputes a changed symbol's blast radius, and vecgrep scopes its\nsemantic search to the affected file set.\n\nLayers (bottom-up):\n- DB: FilePaths allow-list filter on FilterOptions using veclite.In\n- Search: propagate FilePaths through\n[…]\n unavailable or unindexed, matching\nthe established pattern of rerankWithCodemap and annotateSearchHits.\n\nTests: FilePaths filter test in db_test.go, Impact unavailable test\nin codemap_client_test.go.",
"is_bot": false,
"headline": "feat: add codemap blast-radius investigation flow for scoped search",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T14:09:09Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7b1a817a347bdc57b7722d87ffc79266c1adc177",
"body": "The test handler appended to requestPaths from concurrent goroutines\n(the fallback sends 2 concurrent single-embed requests). Add a mutex\nto protect the slice.",
"is_bot": false,
"headline": "fix: resolve data race in EmbedBatchFallsBackOn404 test",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T12:50:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6fcef26465ff84d8ef6cd536e4d35fd2ba32909d",
"body": "Indexing Speed:\n- Add keep_alive parameter to Ollama embed requests to keep model loaded\n- Add model warmup before indexing to eliminate first-batch latency\n- Make maxBatchSize configurable (was hardcoded 64)\n- Eliminate double file read by caching content alongside hash in fileInfo\n- Wrap CLI path \n[…]\nleted branches\n\nDaemon:\n- Add daemon.switchBranch RPC for lock-free branch switching\n- Track in-flight reindex/switch operations with WaitGroup\n- Add periodic sweep timer (default 24h) using TTL rules",
"is_bot": false,
"headline": "feat: improve indexing speed, UX, DX, and add fcheap integration",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T12:46:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "38d5dea44ac50d4826ba712409d39e31c298a9a8",
"body": "The --verbose progress callback redrew with \\r but never erased to end of\nline, so a shorter line (shorter filename or smaller counts) left the tail\nof the previous, longer line on screen — producing garbled output like\n\"...479 chunks)9/4621 files, 478 chunks)s)ks)nks)8 chunks)\".\n\nAppend \\033[K (erase to end of line) after each redraw.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: clear line on verbose index progress to stop leftover characters",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T05:05:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "8d7bc5ad206677f6887f7c204bb689f09840c49c",
"body": "…exing\n\nAdd OllamaProvider.EmbedDocuments using /api/embed batch endpoint that\naccepts input: []string and returns multiple embeddings in a single HTTP\nrequest. EmbedBatch delegates to this and falls back to the legacy\nconcurrent single-request path when /api/embed is unavailable (old Ollama).\n\nThro\n[…]\n), and indexer BatchSize (32->64) to match the batch endpoint.\n\nOn a 10k-chunk codebase: 10k HTTP requests -> ~157 batch requests.\nOn a 100k-chunk codebase: 100k HTTP requests -> ~1.6k batch requests.",
"is_bot": false,
"headline": "feat: use Ollama native batch embedding endpoint for 8-16x faster ind…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T04:21:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1fd0ef730b1eec1cf4fc9768a2b0b4599e753e5c",
"body": "… rename)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: F3 rebind rule resolved (annotations survive reindex, orphan on…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T03:15:07Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "cca5ced729049d68a55e78b3f211d9fb152dd5ba",
"body": "…+ exact tag-AND)\n\nG2 needs codemap to surface this project's memories beside a symbol, but\nmemory was MCP-only — and codemap can't call vecgrep's MCP server (CLI-only,\none hop). Add a `vecgrep memory` CLI exposing the existing recall/remember\nlogic so codemap can shell it.\n\nNew commands (cmd/vecgre\n[…]\ng.\n\nGuardrails: no codemap Go import; degrades gracefully (Ollama down → clear\nerror, json mode still emits []). task check green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "memory: add `vecgrep memory recall/remember` CLI for G2 (C5 contract …",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T02:56:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1fbe74e9b3c0711d2e84d1fd40374a23720605aa",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: integration plan — G1 shipped (codemap), G2 memory-governance spec",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T02:39:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "58e0249c80d49a1836785dc8d698bcf6241eee0e",
"body": "…tatus cross-read\n\nF3 — annotate targeting via codemap symbol-at (C2). codemap now ships\n`codemap symbol-at <file>:<line> --json`, so add SymbolAt(ctx,file,line)\n+ SymbolAtResult{...,resolution} with a nil-safe Resolved() (exact|enclosing\nwith a non-empty symbol). annotateSearchHits now resolves eac\n[…]\nng the cross-tool safety net\nto the two new contracts.\n\nGuardrails held: CLI-only one hop, no codemap Go import. task check green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "codemap: finish F3 annotate targeting, F2 blast-radius decision, G4 s…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T02:17:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ae8ac3351442ed6f5e713dfbb1b99c1a8d13c97b",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: codemap integration plan v2 (validated, bidirectional)",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T02:11:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "650efd9952581271f1d3fcbbcf481659b3960504",
"body": "The vecgrep→codemap integration shipped dead: three paths parsed\nfields/flags codemap never emits, each failing quietly and falling\nback to heuristics with no trace.\n\nF1 — RelatedFiles: replace the per-symbol fan-out (symbols→impact per\nsymbol, N cold subprocess spawns parsing a non-existent\n{caller\n[…]\nering,\nthe inflated-hub down-weighting, and the annotate gate — the cross-tool\nsafety net the original five-shape coupling lacked.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "codemap: wire F1/F2/F3 against the real CLI contract",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-25T02:02:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1aeca266c7f2fb5700c6d36d9a38c424976f996b",
"body": "…-safe\n\n- Make mockProvider.embedCalls/batchCalls atomic.Int32 to fix concurrent\n access by throttle worker goroutines\n- Replace separate joinInFlight+registerInFlight with atomic\n joinOrRegisterInFlight to eliminate the check-then-act race where two\n goroutines both see no entry and both proceed to embed\n- Use named return values in Embed so defer leaveInFlight captures the\n actual result for dedup waiters",
"is_bot": false,
"headline": "fix: resolve data race in throttle dedup and make mockProvider thread…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-24T20:35:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "03a4c240051c6656ff6679c6bbba8292839892fc",
"body": "…ound daemon\n\nCODEMAP-INTEGRATION:\n- Add CodemapConfig with Enabled, Bin, MCPEndpoint, StructuralWeight\n- Create codemap_client.go MCP client (impact/find/symbols/annotate/hotspots)\n- Delegate vecgrep_related_files to codemap's real call graph with fallback\n- Pin search/similar hits as persistent co\n[…]\nAdd config tests for codemap/daemon env var resolution\n- Add Glyphrun flows: daemon_status, branch_status, config_codemap_enabled\n- Fix config_cloud_provider flow terminal rows for new config sections",
"is_bot": false,
"headline": "feat: add codemap integration, per-branch index switching, and backgr…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-24T20:31:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f786222b1295c7141e7dd27a45c8afde898c8158",
"body": "Replace the ASCII [====----] index bar with codemap's blended purple→pink\nBubble Tea progress bar showing percentage, file count, and current path.\n\n- Add cmd/vecgrep/index_progress.go: an inline Bubble Tea progress model\n (progress.WithDefaultBlend) plus runIndexWithBar, which runs service.Index\n \n[…]\nve now-dead internal/render/progress.go and its test.\n- go mod tidy pulls in github.com/charmbracelet/harmonica (progress spring).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: gradient progress bar for vecgrep index CLI",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-24T15:57:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ad938d2709e7dd626b8e5ea77e9c16e12df4f81b",
"body": "Add a real-time ASCII progress bar to the index command, shown by\ndefault in interactive terminals. The bar shows percentage, file count,\nchunk count, and elapsed time, updating in place via carriage return.\n\n- New internal/render/progress.go with reusable ProgressBar and\n IndexProgressLine helpers\n[…]\nle the bar for scripts/CI\n- Auto-suppress bar in non-TTY contexts (piped/redirected output)\n- Keep --verbose as its own format with current file path\n- Unit tests for ProgressBar and IndexProgressLine",
"is_bot": false,
"headline": "feat: add live progress bar to vecgrep index CLI",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-23T23:32:40Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3f7f8753ef8d8d3af1be80522ae3e84eb3a16712",
"body": "When another process holds the veclite lock, 'vecgrep reset' now:\n- Detects ErrFileLocked and suggests 'vecgrep reset --force'\n- ResetIndexFiles also removes the stale .lock file\n- ResetIndexFiles no longer fails if it can't re-open the DB after\n deletion (files are already deleted; user runs 'vecgrep index')",
"is_bot": false,
"headline": "fix: vecgrep reset --force handles locked DB gracefully",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-23T23:00:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c1a9fa532f04b28c8126575a6cc5d84f65da0197",
"body": "Bump veclite dependency from v0.17.0 to v0.20.0, remove local replace\ndirective. Read-only CLI commands (search, status, similar) now use\nOpenReadOnlySession() which opens with WithSharedRead(true), so they\nsucceed while the studio TUI holds the exclusive lock.",
"is_bot": false,
"headline": "feat: use veclite WithSharedRead for CLI-while-studio",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-23T22:14:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ed9d9e952012b313564c1f98d9ce2474a38ae52",
"body": "…ecar\n\n- Wire vector.veclite.m/ef_construction/ef_search from config through\n OpenOptions into VecLite collection creation and per-query search options.\n Resolve VECGREP_VECTOR_VECLITE_* env vars in resolution.go so they reach\n the backend instead of being silently dropped.\n- Bump veclite v0.14.0\n[…]\n via go/parser.\n- Surface provider health, veclite version, and HNSW config in status/Studio.\n- Add CLAUDE.md and document docs/ (VitePress site) vs ~/notes (Obsidian\n vault) discipline in AGENTS.md.",
"is_bot": false,
"headline": "feat: wire HNSW config, bump veclite to v0.17.0, collapse profile sid…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-21T21:04:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f068152f7bbc131e3d58111cc6849c27ad63fe69",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: add vercel config for docs site deploy",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-20T02:52:17Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "9fd762941cde3232d3df5a8fc105a76105cf1e2e",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add v2.1.0 changelog entry",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-20T02:25:50Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6131cefa265f3aa0a9e6508d592444084868cb5f",
"body": null,
"is_bot": false,
"headline": "feat: add docs site and provider polish",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-20T01:24:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6c3f8b2546334dc86b82c9ea238563374938b11",
"body": null,
"is_bot": false,
"headline": "ci: update workflow action runtimes",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-15T17:52:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "01ccd87c3fa45cf5c8042d04472d99615d28b6e9",
"body": null,
"is_bot": false,
"headline": "chore: prepare v2.0.1 release",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-15T17:42:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dcec5f7cdc6efb7e63c05eb89402e3bb3f305ed8",
"body": null,
"is_bot": false,
"headline": "ci: pin release workflow runtime",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-15T17:39:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "034108207bdad74e3f76be31d51c342addc1143e",
"body": null,
"is_bot": false,
"headline": "fix: enable cgo for race tests",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-15T17:39:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "428e6113ec0ee8b9d067c2d3bc7f2991d5512475",
"body": null,
"is_bot": false,
"headline": "feat: ship Studio-only vecgrep",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-06-15T17:35:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ddf6cf52e6e5df64b661e0fc08641cbd94661ae1",
"body": "…ault\n\nMake global mode the default for both CLI and MCP init. Project data is\nnow stored in ~/.vecgrep/projects/{name}/ instead of a local .vecgrep/\ndirectory, eliminating per-project .gitignore management. The --local\nflag preserves the old behavior. Existing local .vecgrep/ projects\ncontinue to work via auto-detection.\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: centralize vecgrep index storage to ~/.vecgrep/projects/ by def…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-03-02T20:05:36Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "cc826dfe0888b3832ef91a4de0e723ae2f849f9d",
"body": "…lanning-KzjZ4\n\nfeat: populate language/type filters dynamically from vector DB",
"is_bot": false,
"headline": "Merge pull request #1 from abdul-hamid-achik/claude/improve-web-app-p…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-02-07T15:09:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d2c39bfa345ef43f6398c939af92e9a1d271c13",
"body": null,
"is_bot": false,
"headline": "Merge pull request #2 from abdul-hamid-achik/copilot/sub-pr-1",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-02-07T14:07:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f16f7b196c5fb23d99b0369ab0bd0e63400b815b",
"body": "Co-authored-by: abdul-hamid-achik <7379966+abdul-hamid-achik@users.noreply.github.com>",
"is_bot": true,
"headline": "chore: fix trailing whitespace",
"author_name": "copilot-swe-agent[bot]",
"author_login": "Copilot",
"committed_at": "2026-02-07T13:48:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f8535bee383a0320502b927db46d5ef7d6380d8",
"body": "…ard, score clamping\n\nCo-authored-by: abdul-hamid-achik <7379966+abdul-hamid-achik@users.noreply.github.com>",
"is_bot": true,
"headline": "fix: address code review feedback - HTMX URLs, projects key, Prism gu…",
"author_name": "copilot-swe-agent[bot]",
"author_login": "Copilot",
"committed_at": "2026-02-07T13:47:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d325e5e039046658f67a0a2acce7587d5ce36b97",
"body": null,
"is_bot": true,
"headline": "Initial plan",
"author_name": "copilot-swe-agent[bot]",
"author_login": "Copilot",
"committed_at": "2026-02-07T13:42:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f70c95888441d36002913af6aa90f5ea83dab760",
"body": "Backend fixes:\n- Fix hybrid search re-ranking: results are now sorted AFTER text boost\n is applied, with improved token-level matching and symbol name boosting\n- Fix SearchSimilarByID same-file exclusion: was calling GetChunkByLocation\n with empty params, now uses new GetChunkByID method\n- Add Get\n[…]\nth overview cards and bar charts for\n language/chunk type distribution\n- Result cards now use .result-card class for keyboard navigation focus\n\nhttps://claude.ai/code/session_01A4sXGzy4soRkXj4MUh3JB4",
"is_bot": false,
"headline": "feat: improve web app with syntax highlighting, keyboard nav, bug fixes",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-02-07T13:17:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "08dd5a24eea4ef8ac9dc927f20a6a8d736e6a418",
"body": "Replace hardcoded language and chunk type dropdowns in the web UI with\ndata sourced from the actual vector database index. The filters now show\nonly languages and types that exist in the indexed codebase, sorted by\nchunk count descending, with counts displayed in labels (e.g., \"Go (42)\").\n\n- Add get\n[…]\ns DB-sourced filters\n- Add /api/languages JSON endpoint for programmatic access\n- Support all 20 language display names with fallback titleCase\n\nhttps://claude.ai/code/session_01A4sXGzy4soRkXj4MUh3JB4",
"is_bot": false,
"headline": "feat: populate language/type filters dynamically from vector DB",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-02-07T13:01:50Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "714f4459d6d31a23ccbf0185abc6f6733b798792",
"body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: upgrade veclite to v0.11.0",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-31T01:49:28Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "67d2b1375c8cb04ae42e5263da3b35130e214ee5",
"body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: add .vecai to gitignore and clean up README",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-31T01:35:59Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "054a08f836279dd98e6a7ca3b33812e9a323c676",
"body": "- Upgrade veclite from v0.4.2 to v0.10.0\n- Fix score calculation: use Distance directly instead of (1 - Distance)\n- veclite's cosine similarity returns scores where 1.0 = identical, 0.0 = orthogonal\n- Previous formula inverted scores, causing all results to show 0% match\n- Add score_test.go with regression tests for score calculation\n- Update README with v2.1 upgrade notes and veclite version\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: correct match score calculation for cosine similarity",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-31T01:32:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "070e1954ac974a176bb8e3dbe91fce1af2817ecf",
"body": "Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: handle remaining unchecked error returns in tests",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-30T19:28:07Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2d46a93a603bc5b085c33e08e8b58acebf14cef6",
"body": "- Fix unchecked error returns in cached_test.go\n- Fix comment format for CacheSize method\n- Simplify bool comparisons in overview_tools.go\n- Use pointer for optional Deduplicate field\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: resolve lint issues in new features",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-30T19:26:43Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e2e4e4a5126d8881c4af7461f2a1af756892c487",
"body": "- Add embedding cache with LRU eviction and TTL support for faster repeated queries\n- Add multi-profile search to search across code, notes, and other content sources\n- Add source adapter interface for pluggable content sources (files, noted CLI)\n- Add new MCP tools: vecgrep_overview, vecgrep_batch_\n[…]\n common query embeddings\n- Add profile management CLI commands (list, add, remove, show)\n- Fix MCP server panic caused by jsonschema tag format\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add embedding cache, multi-profile search, and MCP tools",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-30T19:23:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "817a36d1bb762020c734a44e7c0d1065cae672ae",
"body": null,
"is_bot": false,
"headline": "fix: handle unchecked error returns in memory package",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-30T18:50:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "792e9e814c4100da26f65aea74bf89b8fc576e71",
"body": "Add global memory store with semantic search for AI agents:\n\n- memory_remember: Store memories with importance, tags, and TTL\n- memory_recall: Search memories semantically with filtering\n- memory_forget: Delete by ID, tags, or age\n- memory_stats: Get memory store statistics\n\nMemory is stored globally at ~/.vecai/memory/memory.veclite using\nveclite with nomic-embed-text embeddings via Ollama.\n\nIncludes 21 unit tests covering happy paths, edge cases, and\nboundary conditions.",
"is_bot": false,
"headline": "feat: add memory MCP tools for agent note-taking",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-30T18:47:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cd9d95ef07c4c05401027a4b00ac994b33e8a8c7",
"body": null,
"is_bot": false,
"headline": "style: use fmt.Fprintf instead of WriteString(fmt.Sprintf)",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-29T04:52:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4443397650640b6403032971542a538e4b2d634b",
"body": null,
"is_bot": false,
"headline": "chore: update veclite dependency to v0.4.2",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-29T04:49:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69fa57778b3eb9dd91c2073e0a86c68e84060574",
"body": "…ering\n\nBREAKING CHANGE: Switch to cosine distance requires re-indexing\n\n- Add three search modes: semantic, keyword, and hybrid (default)\n- Implement native veclite filtering with Glob, In, Prefix, Between\n- Add batch insert operations for faster indexing\n- Add UpsertByKey support for incremental u\n[…]\nctor_weight, text_weight\n- Update CLI with --mode, --explain, --languages, --types, --dir, --lines\n- Update MCP server with mode and explain parameters\n- Update README with comprehensive documentation",
"is_bot": false,
"headline": "feat!: upgrade veclite integration with hybrid search and native filt…",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-29T04:47:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0441d0e95d4f37343e037775a2591dfb465ceed4",
"body": "BREAKING CHANGE: Database format has changed. Existing users must re-index:\n vecgrep reset --force && vecgrep index\n\nChanges:\n- Remove SQLite entirely - all data now stored in veclite vector payloads\n- Remove CGO requirement - pure Go builds with CGO_ENABLED=0\n- Enable true cross-compilation for al\n[…]\ne cross-compilation\n- Single data store = simpler architecture, no sync issues\n- Metadata in payload = faster search (no N+1 hydration queries)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat!: migrate to pure veclite storage, remove SQLite entirely",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-26T00:21:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ef853e2fe1bac8da98496a8e9d5b472ec9e86c3b",
"body": "Add JSON output support to the status command for consistency with\nsearch and similar commands. This enables scripting and integration\nwith tools like the vecai agent.\n\n- Add -f/--format flag accepting 'default' or 'json'\n- Add StatusOutput and PendingChanges types for JSON marshalling\n- Update README documentation with new options\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add --format flag to status command",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-23T07:37:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "415103a8935dcf2c097191a483c659e8e068d395",
"body": "Make the vector backend truly pluggable so users can switch between\nsqlite-vec (default) and veclite via configuration.\n\nChanges:\n- Add vectorBackend field to DB struct\n- Add OpenOptions and OpenWithBackend() for backend-aware opening\n- Create backend factory function (createVectorBackend)\n- Delegat\n[…]\n backends by setting vector.backend in config:\n- \"sqlite-vec\" (default): Uses sqlite-vec extension\n- \"veclite\": Uses VecLite with HNSW indexing\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: wire up pluggable vector backend architecture",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-21T20:50:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "055b53e5888c40f7f1bb261cd8f5f069d1816eeb",
"body": "- Add pluggable vector backend interface with sqlite-vec and veclite (HNSW) implementations\n- Add database migration support for schema upgrades\n- Create CHANGELOG.md with retrospective version history\n- Create CONTRIBUTING.md with contribution guidelines\n- Expand DEVELOPMENT.md with architecture, d\n[…]\nides\n- Update README.md with vector backend configuration and config sources\n- Update AGENTS.md with corrected file references and new features\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add pluggable vector backends and comprehensive documentation",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-21T19:27:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3aab5d3c74f9bb7fd46a6f25944f48a4c2a96f34",
"body": "Add multi-level config resolution supporting project, global, and XDG-style\nconfiguration files. Projects can now be registered globally in ~/.vecgrep/\ninstead of requiring a local .vecgrep/ directory in each project.\n\nNew commands:\n- vecgrep config show [--global]: Display resolved configuration\n- \n[…]\n/.vecgrep/config.yaml\n7. Built-in defaults\n\nAlso updates go-chi/chi v5.2.1 -> v5.2.2 to fix host header injection\nvulnerability (GO-2025-3770).\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add hierarchical configuration system with global project registry",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-21T04:26:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "901b2e187131a5dd12a57ad83b9a69c3d33ae80a",
"body": "- Handle fmt.Scanln error in reset command\n- Use blank identifier for ignored errors in db operations\n- Check json.Decode error in test\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: address linting issues",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T23:26:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e286c85b86868b11e4622a3abd6ab6f1a3cd4f63",
"body": "OpenAI Embedding Provider:\n- Add internal/embed/openai.go with full OpenAI API support\n- Support text-embedding-3-small and text-embedding-3-large models\n- Batch embedding with rate limit retry and exponential backoff\n- Configurable base URL for Azure OpenAI or custom endpoints\n- Add VECGREP_OPENAI_\n[…]\ntion:\n- Update README with OpenAI setup instructions\n- Document delete/clean/reset commands\n- Update environment variables and MCP tools tables\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add OpenAI provider, web similar feature, delete/reset commands",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T23:22:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "98df2d9cf7dd7797ebb9ab9433ecb2549b0dc488",
"body": "- Add PendingChanges struct and GetPendingChanges() method to indexer\n to detect new, modified, and deleted files since last index\n- CLI: vecgrep init now shows .gitignore reminder\n- CLI: vecgrep status now shows reindex status (new/modified/deleted)\n- MCP: Server instructions updated to mention .g\n[…]\nnding changes\n- MCP: vecgrep_status shows reindex status with pending changes\n- README: Added .gitignore notes in Quick Start and Configuration\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add .gitignore reminder and reindex detection",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T22:40:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fd893cdc496ec117317798bbe2d4953919301bb4",
"body": "- Add vecgrep similar CLI command\n- Add vecgrep_similar MCP tool\n- Support search by chunk ID, file:line, or text snippet\n- Add --exclude-same-file filter option\n- Add GetEmbedding() and GetChunkByLocation() to database layer\n- Add SearchSimilarByID/Location/Text() to search layer\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add similar code finder feature",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T21:52:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "add42f0f8d4d3dd9a124923d3f598870290af16d",
"body": "Search, index, and status commands now auto-detect projects from the\ncurrent working directory when a .vecgrep folder exists. This removes\nthe need to call vecgrep_init at the start of every Claude Code session.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add auto-detection for vecgrep projects without manual init",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T21:11:04Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2b6c3cc05d4db69be1ed8402ac582ec9f83ac9f2",
"body": "The custom MCP protocol implementation has been replaced by the\nofficial Go SDK (modelcontextprotocol/go-sdk). These files are\nno longer used:\n- protocol.go - custom protocol types\n- server.go - custom server implementation\n- tools.go - custom tools handler\n- server_test.go - tests for old implementation\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Remove old custom MCP implementation",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T21:05:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "fbb801a3773a1ec34db037c4e9e5a56e8476f67e",
"body": "Replace custom MCP protocol implementation with the official\nmodelcontextprotocol/go-sdk for reliable stdio transport handling.\nThis fixes the connection drop issue where Claude Code was unable\nto fetch tools after the initialize handshake.\n\nThe SDK handles:\n- Proper newline-delimited JSON framing\n- Correct initialize/initialized handshake\n- Automatic schema generation from Go structs\n- Tools list changed notifications\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Switch MCP server to official Go SDK",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T20:59:53Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c65ec1aa87ae09c82a89ba755cf28a8078514d20",
"body": "Claude Code interprets any stderr output as errors which may cause\nconnection issues with MCP servers. Removed the startup message\nto ensure clean stdio operation.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Remove stderr output in MCP mode",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T20:48:35Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "cbea78a0d97d01e8afe1cb50285d3fca3a1bbae3",
"body": "- Update server instructions to explain vecgrep_init must run first\n- Make tool description clearer: \"REQUIRED FIRST STEP\"\n- Explain that init activates existing .vecgrep or creates new one\n- Helps Claude understand it needs to run init even for existing projects\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Improve MCP instructions to clarify vecgrep_init requirement",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T19:55:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "adf4d91edd1c821b51c4d57e7d79a38e22208de2",
"body": "- Make 'path' parameter required for vecgrep_init\n- Add activateProject() to properly configure handler state after init\n- Handler now stores db, provider, projectRoot after successful init\n- Supports ~ expansion and absolute path resolution\n- Clear error message when path is missing\n\nThis fixes the\n[…]\ns didn't work after init because\nthe handler state wasn't updated. Now vecgrep_init properly\nactivates the project, making all tools available.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix MCP tools to work with global user scope",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T19:48:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e36cd0d182f2c108113124e8437d12cf121526aa",
"body": "- Add VERSION, COMMIT, BUILD_DATE build args to Dockerfile\n- Pass version ldflags to go build in Docker\n- Configure docker-compose.yml to pass build args\n- Remove unused Resources and Prompts capabilities (we don't provide any)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix version ldflags in Docker and clean up MCP capabilities",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T19:38:26Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2528c5c520b41be4638a09c1db0d37b3ad76fa27",
"body": "The current MCP specification is version 2025-06-18.\nPrevious versions may not be recognized by newer Claude Code clients.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Update MCP protocol version to 2025-06-18",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T19:28:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7a870f8809debb6c65af81f39ce1ec4af8cb8cf6",
"body": "- Remove omitempty from ToolsCapability.ListChanged\n- Set ListChanged: true (tools list changes after init)\n- This ensures clients properly recognize tools support\n\nThe previous \"tools\":{} was ambiguous - now outputs\n\"tools\":{\"listChanged\":true} which clearly indicates\ntools are supported.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix MCP tools capability declaration",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T19:01:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "61ca9398aa80f1ce71da02300cf35c159c97c7d7",
"body": "Features:\n- Add vecgrep_init tool to initialize projects via MCP\n- MCP server now starts without .vecgrep (shows only init tool)\n- After init, all tools (search, index, status) become available\n- Add Ollama health check with helpful error messages\n- Show instructions for installing/starting Ollama when unavailable\n\nThis enables --scope user for Claude Code MCP integration,\nallowing vecgrep to work across all projects.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add vecgrep_init MCP tool and graceful uninitialized mode",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T18:54:24Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4e341473b9fa0056b55591853037f5bf0ebb5482",
"body": "The vecgrep MCP server requires a .vecgrep directory in the working\ndirectory. Using --scope user fails because it runs from arbitrary\ndirectories. --scope local ensures it runs from the project directory.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix MCP CLI docs: use --scope local for project-specific config",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T18:50:28Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4a4764b69223bf1933771503a8e0dc67fe46c671",
"body": "- Add `claude mcp add` command examples\n- Show both local and user scope options\n- Add MCP management commands (list, get, remove)\n- Add Claude Desktop config file path for macOS\n- Reorganize MCP section with CLI first\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add Claude Code CLI installation instructions for MCP",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T18:45:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "aa866b04642f8eba77b561599f38e5e2153dd7f7",
"body": "macos-13 runners are retired. Use macos-14 (ARM) and cross-compile\nto amd64 for Intel Mac support.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Fix macos-13 retirement, use macos-14 with GOARCH=amd64",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T18:38:00Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "54bbf3b75f2049d55ebda571e3b238c9f34d106e",
"body": "- Build on ubuntu-latest for linux-amd64\n- Build on macos-latest for darwin-arm64 (Apple Silicon)\n- Build on macos-13 for darwin-amd64 (Intel Mac)\n- Custom Homebrew formula with on_macos/on_linux blocks\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add macOS support with native runners",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T18:35:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0488f61daea573dd3e7e7d4d7bce45c01ccb17b1",
"body": "- Remove build step from CI (release handles it)\n- Use simple GoReleaser workflow for release\n- Build linux-amd64 only (CGO cross-compilation requires Pro)\n\nFor macOS support, consider:\n- GoReleaser Pro for split/merge\n- Native macOS runners in matrix build\n- goreleaser-cross Docker image\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Simplify CI and release workflows",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T18:31:37Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "33556ab1ea3aa3690db863d6a6e855073354d145",
"body": "- Build natively on each platform (ubuntu, macos-13, macos-latest)\n- Supports linux-amd64, darwin-amd64, darwin-arm64\n- Manual Homebrew formula update with proper checksums\n- Removed GoReleaser in favor of direct builds for CGO compatibility\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add matrix build for macOS support",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T18:28:03Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0abb7a766b8f68b0cd1ba3eb7b1f737ecfde9c50",
"body": "CGO cross-compilation to macOS requires macOS SDK which isn't\navailable on Linux runners. Starting with linux-amd64 builds,\ncan add matrix builds for other platforms later.\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "Simplify release to linux-amd64 only for now",
"author_name": "Abdul Hamid",
"author_login": "abdul-hamid-achik",
"committed_at": "2026-01-20T18:23:31Z",
"body_truncated": false,
"is_coding_agent": true
}
],
"releases_count": 53,
"commits_last_year": 119,
"latest_release_at": "2026-07-19T21:22:55Z",
"latest_release_tag": "v2.21.0",
"releases_from_tags": false,
"days_since_last_push": 6,
"active_weeks_last_year": 10,
"days_since_latest_release": 6,
"mean_days_between_releases": 2.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 57,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/abdul-hamid-achik/vecgrep",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/abdul-hamid-achik/vecgrep",
"is_deprecated": false,
"latest_version": "v0.0.0-20260719211945-97144781e696",
"repository_url": "https://github.com/abdul-hamid-achik/vecgrep",
"versions_count": 27,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-19T21:19:45Z",
"latest_version_yanked": null,
"days_since_latest_publish": 6
}
]
},
"popularity": {
"forks": 0,
"stars": 1,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": true,
"bootstrap_files": [
"Taskfile.yml"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 85202,
"source_files_sampled": 158,
"oversized_source_files": 2,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 7048
},
"dependencies": {
"manifests": [
"go.mod",
"package.json"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go",
"npm"
],
"dependencies": [
{
"name": "charm.land/bubbles/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.1.0"
},
{
"name": "charm.land/bubbletea/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.0.7"
},
{
"name": "charm.land/lipgloss/v2",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v2.0.4"
},
{
"name": "github.com/abdul-hamid-achik/veclite",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.24.0"
},
{
"name": "github.com/fsnotify/fsnotify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.9.0"
},
{
"name": "github.com/modelcontextprotocol/go-sdk",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.1"
},
{
"name": "github.com/sabhiram/go-gitignore",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20210923224102-525f6e181f06"
},
{
"name": "github.com/spf13/cobra",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.10.2"
},
{
"name": "github.com/spf13/viper",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.21.0"
},
{
"name": "go.etcd.io/bbolt",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.5.0"
},
{
"name": "golang.org/x/sync",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.20.0"
},
{
"name": "golang.org/x/time",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.15.0"
},
{
"name": "gopkg.in/yaml.v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.1"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 2,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 1
},
"bus_factor": 1,
"bot_contributors": 1,
"top_contributors": [
{
"type": "User",
"login": "abdul-hamid-achik",
"commits": 114,
"avatar_url": "https://avatars.githubusercontent.com/u/7379966?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.983
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"release.yml"
],
"has_docs_dir": true,
"linter_configs": [
".golangci.yml"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": 10,
"reason": "packaging workflow detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 8,
"reason": "2 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "97144781e69632b8a18d55b301f741cb76ea2136",
"ran_at": "2026-07-26T06:42:17Z",
"aggregate_score": 3.8,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-19T21:23:06Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-02-07T15:09:14Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/abdul-hamid-achik/vecgrep",
"host": "github.com",
"name": "vecgrep",
"owner": "abdul-hamid-achik"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 58,
"inputs": {
"security": 38,
"vitality": 79,
"community": 33,
"governance": 51,
"engineering": 84
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 79,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 71,
"inputs": {
"commits_last_year": 119,
"human_commit_share": 0.97,
"days_since_last_push": 6,
"active_weeks_last_year": 10
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "10/52 weeks with commits",
"points": 6.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 10
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "119 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 119
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 53,
"latest_release_tag": "v2.21.0",
"releases_from_tags": false,
"days_since_latest_release": 6,
"mean_days_between_releases": 2.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "53 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 53
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~2.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 2.1
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 6,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 6 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 6
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 33,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 1,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "1 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 1
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 70,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 51,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.983
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 98% of commits",
"points": 0.4,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 98
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "at_risk",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 48,
"inputs": {
"merged_prs": 2,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 1
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "2/3 decided PRs merged",
"points": 25.5,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 2,
"decided": 3
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 59,
"inputs": {
"followers": 49,
"owner_type": "User",
"is_verified": null,
"owner_login": "abdul-hamid-achik",
"public_repos": 113,
"account_age_days": 4477
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "49 followers of abdul-hamid-achik",
"points": 12.2,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 49,
"login": "abdul-hamid-achik"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "113 public repos, account ~12 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 113
}
},
{
"code": "account_age_years",
"params": {
"years": 12
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/abdul-hamid-achik/vecgrep"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 6
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 6 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 6
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "27 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 27
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 84,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 80,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "2 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 2
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": ".golangci.yml",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": "https://vecgrep.dev",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://vecgrep.dev",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 38,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 38,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 3.8
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "2 existing vulnerabilities detected",
"points": 6,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 2
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "good",
"name": "AI Readiness",
"value": 76,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "excellent",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 1,
"agent_instruction_files": [
"AGENTS.md",
"CLAUDE.md"
],
"agent_instruction_max_bytes": 7048
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "AGENTS.md, CLAUDE.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "AGENTS.md, CLAUDE.md"
}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "97 of 97 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 97,
"sampled": 97
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [
"Taskfile.yml"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0.55,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Taskfile.yml",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Taskfile.yml"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": ".golangci.yml",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "55 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 55,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 85202,
"source_files_sampled": 158,
"oversized_source_files": 2
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "2/158 source files over 60KB",
"points": 54.3,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 158,
"oversized": 2
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "critical",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"example_dirs": [],
"has_mcp_signal": true,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-26T06:42:22.780701Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/abdul-hamid-achik/vecgrep.svg",
"full_name": "abdul-hamid-achik/vecgrep",
"license_state": "standard",
"license_spdx": "MIT"
}