{"id":47709467,"url":"https://github.com/bnomei/frigg","last_synced_at":"2026-04-17T11:04:12.297Z","repository":{"id":346047634,"uuid":"1172545599","full_name":"bnomei/frigg","owner":"bnomei","description":"Fast local code intelligence for AI agents powered by AST Treesitter, SCIP, semantic search and a reranker","archived":false,"fork":false,"pushed_at":"2026-04-17T10:27:41.000Z","size":9988,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T10:36:35.904Z","etag":null,"topics":["ai","ai-agents","ast","code-intelligence","code-navigation","cross-repository","kotlin","local-first","mcp","mcp-server","php","python","reranker","rust","scip","semantic-search","sourcegraph","treesitter","typescript"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/frigg","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bnomei.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"bnomei","buy_me_a_coffee":"bnomei"}},"created_at":"2026-03-04T12:37:32.000Z","updated_at":"2026-04-17T10:27:45.000Z","dependencies_parsed_at":null,"dependency_job_id":"1e403539-94f9-4d45-b02d-9155714fc564","html_url":"https://github.com/bnomei/frigg","commit_stats":null,"previous_names":["bnomei/frigg"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/bnomei/frigg","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bnomei%2Ffrigg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bnomei%2Ffrigg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bnomei%2Ffrigg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bnomei%2Ffrigg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bnomei","download_url":"https://codeload.github.com/bnomei/frigg/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bnomei%2Ffrigg/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31926262,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T10:35:34.458Z","status":"ssl_error","status_checked_at":"2026-04-17T10:35:09.472Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-agents","ast","code-intelligence","code-navigation","cross-repository","kotlin","local-first","mcp","mcp-server","php","python","reranker","rust","scip","semantic-search","sourcegraph","treesitter","typescript"],"created_at":"2026-04-02T18:26:41.974Z","updated_at":"2026-04-17T11:04:12.286Z","avatar_url":"https://github.com/bnomei.png","language":"C","readme":"# frigg\n\n[![Crates.io Version](https://img.shields.io/crates/v/frigg)](https://crates.io/crates/frigg)\n[![Build Status](https://github.com/bnomei/frigg/actions/workflows/ci.yml/badge.svg)](https://github.com/bnomei/frigg/actions/workflows/ci.yml)\n[![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)\n[![License](https://img.shields.io/badge/license-MPL2.0-blue)](LICENSE)\n[![Discord](https://flat.badgen.net/badge/discord/bnomei?color=7289da\u0026icon=discord\u0026label)](https://discordapp.com/users/bnomei)\n[![Buymecoffee](https://flat.badgen.net/badge/icon/donate?icon=buymeacoffee\u0026color=FF813F\u0026label)](https://www.buymeacoffee.com/bnomei)\n\nFrigg is a local-first, read-only MCP server built in Rust for code understanding. It scans local repositories, stores synchronized indexes in local SQLite, and gives AI agents fast, source-backed search and navigation across Rust, PHP, Blade, TypeScript / TSX, Python, Go, Kotlin / KTS, Java, Lua, Roc, and Nim, even when the relevant answer lives in another adopted repository.\nAll supported languages participate in text search, symbol search, structural search, document outlines, and hybrid retrieval. Blade support is source-based and bounded.\n\nIt is built for the moment when an agent needs more than `rg/fd/ast-grep`: definitions, references, implementations, callers, structural queries, document outlines, and better answers to “which files matter here?”. **Under the hood Frigg combines deterministic file manifests, Tree-sitter AST parsing, optional SCIP overlays for more precise navigation, and optional semantic retrieval.** It is not a replacement for shell tools or your IDE. It is a context engine that brings more IDE-like code intelligence into MCP.\n\n## What To Use Frigg For\n\nUse Frigg when the question is repository-aware and you want source-backed navigation instead of another raw repo scan.\n\n- jumping from a broad question to real code quickly with source-backed discovery, outlines, definitions, references, implementations, and call relationships\n- asking natural-language questions without giving up concrete anchors, matched paths, and navigable files\n- keeping one fast local index warm across one or more adopted repositories, so agents can move across shared code, related services, or neighboring projects without rebuilding context from scratch\n- getting a more IDE-like flow for agents in the terminal: discover the area, open the file, inspect symbols, and continue navigating from there\n\n## Installation\n\n### Cargo\n\nPublished crate:\n\n```bash\ncargo install frigg\n```\n\nLocal checkout:\n\n```bash\ncargo install --path crates/cli\n```\n\n### Homebrew\n\n```bash\nbrew install bnomei/frigg/frigg\n```\n\n### GitHub Releases\n\nDownload a prebuilt archive or source package from GitHub Releases, extract it, and place `frigg` on your `PATH`.\n\n### From source\n\n```bash\ngit clone https://github.com/bnomei/frigg.git\ncd frigg\ncargo build --release -p frigg\n```\n\nFor local performance work, Frigg also ships a small Criterion harness:\n\n```bash\njust bench\njust bench native_lexical_search\n```\n\n## Bundled Skill\n\nFrigg ships a search-and-navigation skill in [skills/frigg-mcp-search-navigation](skills/frigg-mcp-search-navigation/).\n\nUse it as the repo-backed instruction bundle for any assistant that supports local or Git-backed skills. It explains:\n\n- when to use Frigg instead of plain shell reads or scans\n- how to adopt repositories and move through search, symbol, and navigation flows\n- how to treat lexical-only hybrid results, call-graph answers, and other weaker surfaces\n- how to use `read_match`, structural queries, and bounded follow-up tools efficiently\n\n## Quickstart\n\n### 1) Prepare a repository\n\n```bash\ncd /absolute/path/to/repo\nfrigg init\nfrigg verify\n```\n\nOptional prewarm:\n\n```bash\nfrigg reindex\n```\n\nWhen you run these commands inside the repository root, Frigg now uses the current directory as the default workspace root. If you run them from somewhere else, pass `--workspace-root` explicitly.\n\n### 2) Start the recommended Frigg service\n\n```bash\nfrigg serve\n```\n\nKeep that process running in its own terminal tab or background session. This is the Frigg service your MCP client connects to. `frigg serve` can start with zero startup roots, so you can keep one shared Frigg service running and let clients adopt repositories as needed. The usual flow is:\n\n1. run `frigg init` / `frigg verify` inside each repository you care about\n2. keep one `frigg serve` process running\n3. point your MCP client at that running Frigg service\n\nIf you already know which repositories you want globally known at startup, you can still pass them explicitly:\n\n```bash\nfrigg serve \\\n  --workspace-root /absolute/path/to/repo-a \\\n  --workspace-root /absolute/path/to/repo-b\n```\n\n`frigg serve` defaults to loopback HTTP on `127.0.0.1:37444`. Startup roots become globally known repositories immediately, but watch leases are session-driven and start only after a session adopts a repository. The MCP endpoint is:\n\n`http://127.0.0.1:37444/mcp`\n\n### 3) Add Frigg to your MCP client\n\nPoint your MCP client at the loopback HTTP endpoint of the running Frigg service:\n\n`http://127.0.0.1:37444/mcp`\n\n#### Claude Code\n\n```bash\nclaude mcp add --transport http frigg http://127.0.0.1:37444/mcp\n```\n\n#### OpenCode\n\n```bash\nopencode mcp add\n```\n\nThen choose a remote MCP server and enter:\n\n- name: `frigg`\n- url: `http://127.0.0.1:37444/mcp`\n\n#### Codex\n\n```bash\ncodex mcp add frigg --url http://127.0.0.1:37444/mcp\n```\n\n#### Other JSON-configured clients\n\nExample MCP client config for an HTTP / streamable MCP connection:\n\n```json\n{\n  \"mcpServers\": {\n    \"frigg\": {\n      \"transport\": \"streamable_http\",\n      \"url\": \"http://127.0.0.1:37444/mcp\"\n    }\n  }\n}\n```\n\nThe exact file name and field names vary by client, but the important part is that the client connects to the running Frigg service at that URL. In other words: this setup assumes `frigg serve` is already running in another terminal or background process. You are connecting to Frigg here, not asking the MCP client to spawn it.\n\n## How Frigg Uses Your Workspace\n\nFor each indexed repository, Frigg creates and maintains:\n\n- `.frigg/storage.sqlite3`: the local SQLite database for manifests, snapshot-scoped retrieval projections, search state, navigation data, semantic data, and provenance\n\nFrigg can also read:\n\n- your source files under the configured workspace roots\n- optional `.frigg/scip/*.scip` or `.frigg/scip/*.json` artifacts for more precise definitions, references, implementations, and call navigation\n\nFrigg does not modify your source tree during plain session adoption. `workspace_attach` by itself does not create `.frigg` state. Frigg writes `.frigg/storage.sqlite3` only when indexing/preparing/reindexing paths run.\n\n## Showcases\n\nThe [showcases/](https://github.com/bnomei/frigg/tree/main/showcases) directory contains 52 public example catalogs for real repositories. Each JSON file records realistic questions and the kinds of paths a good Frigg answer should surface.\n\n## Use Cases\n\n### Standard code search and navigation\n\nOnce Frigg is running, the normal workflow is:\n\n1. Let your agent adopt repositories session-locally with `workspace_attach`.\n   `workspace_attach` reports whether the session attached a fresh workspace or reused an already-adopted one, and it returns a compact precise-index summary for the selected repo. That summary now exposes `state`, `failure_tool`, `failure_class`, `failure_summary`, `recommended_action`, and `generation_action` so clients do not need to parse nested generator detail first.\n2. Use `search_hybrid` as the discovery surface for broad questions, then pivot into `read_match`, `read_file`, `document_symbols`, `go_to_definition`, or `search_symbol` when you need precise anchors and deeper navigation.\n3. Use `workspace_prepare` or `workspace_reindex` only when you intentionally want to initialize or refresh repository state from inside the client.\n4. Use `inspect_syntax_tree` before `search_structural` whenever the tree-sitter node shape is unclear.\n\n`read_file` and `read_match` now default to text-first output: the main MCP content block is the bounded source slice, and `structured_content` only keeps compact identity metadata such as repository, path, and effective line window. When a caller needs the older structured JSON payload with `content`, pass `presentation_mode=json`. In the extended profile, `explore(operation=zoom)` follows the same text-first default, while `explore(operation=probe|refine)` stays structured by default.\n\n`inspect_syntax_tree` and `search_structural` accept `include_follow_up_structural=true` as an opt-in. When enabled, Frigg returns typed `follow_up_structural` suggestions that are replayable `search_structural` invocations derived from the resolved AST focus, not from the user's original query. Omitting the flag keeps the normal response shape unchanged. Phase 1 covers `inspect_syntax_tree` and `search_structural`; phase 2 extends the same contract to `document_symbols`, `find_references`, `go_to_definition`, `find_declarations`, `find_implementations`, `incoming_calls`, and `outgoing_calls`. The phase 2 surfaces require stable `path`, `line`, and `column` anchors, and they omit suggestions when no usable AST focus can be resolved. `search_hybrid` and `search_symbol` remain deferred.\n\n`search_structural` now defaults to one row per Tree-sitter match instead of one row per capture. Use `primary_capture` when your query has helper captures but you want one specific capture to anchor the visible row, or switch to `result_mode=captures` when you want raw capture rows for debugging.\n\nTypical prompts:\n\n- “Where is authentication bootstrapped?”\n- “Show me implementations of `ProviderInterface`.”\n- “Who calls `handleWebhook`?”\n- “Which files are relevant to the checkout flow?”\n\n### Optional semantic search\n\nSemantic retrieval is off by default. When enabled, it improves recall for natural-language queries, but Frigg still grounds answers in local lexical and graph evidence.\nOnce enabled, **semantic refresh participates in reindex and watch-driven updates**, so Frigg may call the configured embedding provider automatically as the workspace changes. That means semantic mode can consume provider tokens over time, not only when you run a manual reindex.\n\nOpenAI:\n\n```bash\nexport FRIGG_SEMANTIC_RUNTIME_ENABLED=true\nexport FRIGG_SEMANTIC_RUNTIME_PROVIDER=openai\nexport OPENAI_API_KEY=...\n```\n\nGoogle:\n\n```bash\nexport FRIGG_SEMANTIC_RUNTIME_ENABLED=true\nexport FRIGG_SEMANTIC_RUNTIME_PROVIDER=google\nexport GEMINI_API_KEY=...\n```\n\nOptional model override:\n\n```bash\nexport FRIGG_SEMANTIC_RUNTIME_MODEL=text-embedding-3-small\n```\n\nAfter enabling semantic search for an existing repository, run one reindex pass:\n\n```bash\nfrigg reindex\n```\n\n### Optional SCIP artifacts (Highly Recommended)\n\nFrigg can consume external SCIP artifacts, and if supported generator tools are installed it will **automatically detect and invoke them during workspace attach/reindex flows** for Rust, Go, TypeScript / JavaScript, Python, PHP, and Kotlin. Java source support is available too, but current JVM auto-generation is intentionally scoped to Gradle/KTS workspaces with Kotlin source files; Java/JVM and other Kotlin/JVM layouts should continue to use manual `.frigg/scip/` artifact drops.\n\nThe commands below are only needed if you want to pre-populate artifacts yourself, or if your workspace falls outside Frigg's automatic generation path. Manual artifacts should be placed under:\n\n```text\n.frigg/scip/\n```\n\nManual artifact directory:\n\n```bash\nmkdir -p .frigg/scip\n```\n\nIf you want to generate SCIP artifacts yourself, these are good starting points:\n\n- Overview of supported indexers: [Sourcegraph indexers](https://sourcegraph.com/docs/code-search/code-navigation/references/indexers)\n- Rust: [rust-analyzer](https://github.com/rust-lang/rust-analyzer)\n- PHP: [scip-php](https://github.com/davidrjenni/scip-php)\n- Laravel: [scip-laravel](https://github.com/bnomei/scip-laravel)\n- TypeScript / JavaScript: [scip-typescript](https://github.com/sourcegraph/scip-typescript)\n- Python: [scip-python](https://github.com/sourcegraph/scip-python)\n- Kotlin / Gradle, Java / JVM: [scip-java](https://sourcegraph.github.io/scip-java/docs/getting-started.html)\n\nLaravel PHP workspaces prefer repo-local `vendor/bin/scip-laravel` when `bootstrap/app.php` is present; otherwise Frigg keeps using the existing PHP `vendor/bin/scip-php` / `scip-php` lookup.\n\nFrigg distills those artifacts into snapshot-scoped retrieval projections on the next `frigg reindex`. Server startup alone does not change retrieval state. If you do not provide SCIP data, Frigg still works with heuristic and source-backed navigation plus path and AST-derived retrieval summaries.\n\nWhen generator tools are installed, `repository.health.precise_generators` and `workspace_current.repository.health.precise_generators` report their detected status and any last generation result, and Frigg writes best-effort artifacts under `.frigg/scip/`.\n\nFrigg now disables the normal precise SCIP ingest budgets by default, so oversized monolithic artifacts are ingested without extra configuration. `--full-scip-ingest` and `FRIGG_FULL_SCIP_INGEST=true` are still accepted for explicitness.\n\nPython generation now uses the `scip-python index` subcommand shape directly:\n\n```bash\nscip-python index --quiet --project-name \u003cderived-name\u003e --output .frigg/scip/python.scip\n```\n\nOptional repository-local precise config lives at `.frigg/precise.json`. Use it to disable a generator for one repo, add generator-specific extra args, or exclude paths from filtered generation workspaces and trigger calculations without compiling repo-specific path rules into Frigg itself.\n\nExample:\n\n```json\n{\n  \"precise\": {\n    \"disabled_generators\": [\"python\"],\n    \"generation_excludes\": [\"vendor/**\", \"generated/**\"],\n    \"ingest_excludes\": [\"**/python-tests.scip\"],\n    \"generator_extra_args\": {\n      \"python\": [\"--target-only\", \"src/app\"]\n    }\n  }\n}\n```\n\nStatus surfaces are separated on purpose:\n\n- `health.scip` reports raw `.scip` artifact discovery only.\n- `health.precise_ingest` reports whether Frigg could actually ingest those artifacts, with coverage mode, discovered or ingested byte counts, and sampled failed artifact reasons.\n- `workspace_current.precise` stays as the compact operator summary built on top of that ingest status.\n\n`workspace_attach` and `workspace_reindex` also support `wait_for_precise=true`. By default they remain non-blocking and may return while precise generation is still running. With `wait_for_precise`, the response includes a terminal `precise_lifecycle.phase` when possible and a `last_generation` summary with artifact path details.\n\n## Built-In Watch Mode\n\nFrigg includes a built-in watch worker behind `frigg serve` that keeps indexed repositories fresh with changed-only refreshes.\n\n- watchers activate only while active sessions hold watcher leases for adopted repositories\n- refreshes update the same `.frigg/storage.sqlite3` state, not a separate sidecar index\n- repository-scoped caches are invalidated only for the repo that changed, so follow-up reads and searches stay warm elsewhere\n- if you already run an external watcher, start Frigg with `--watch-mode off` to avoid duplicate work\n\n## Frigg Vs Shell Search\n\nUse shell tools like [`rg`](https://github.com/BurntSushi/ripgrep) for fast literal and regex scans, [`fd`](https://github.com/sharkdp/fd) for quick file and path discovery, and [`ast-grep`](https://github.com/ast-grep/ast-grep) for standalone structural matching in normal repository work.\n\nOn macOS and Linux, if `rg` is installed, Frigg can also use it internally as an optional lexical accelerator for `search_text` and the lexical stage of `search_hybrid`. That stays inside Frigg's own candidate scope and falls back to the native scanner automatically when `rg` is missing, disabled, or fails.\n\nUse Frigg when the question is repository-aware:\n\n- definitions\n- references\n- implementations\n- call relationships\n- structural queries\n- natural-language discovery across many files\n- source-backed answers that need fewer manual file hops\n\nFrigg works best when your agent is told to prefer Frigg for repo-aware search and navigation, and plain shell tools for quick text, path, or one-off structural tasks.\n\n## MCP Tools\n\nFrigg exposes the `extended` MCP tool surface by default. Set `FRIGG_MCP_TOOL_SURFACE_PROFILE=core` when you need the restricted stable subset without `explore` or the deep-search tools.\n\n### Core tools\n\n- `list_repositories`: list globally known repositories in the runtime catalog.\n- `workspace_attach`: adopt a repository into the current session by `path` or `repository_id`.\n- `workspace_detach`: remove a repository adoption from the current session and potentially release a watch lease.\n- `workspace_prepare`: confirm-gated workspace/index preparation for an adopted repository.\n- `workspace_reindex`: confirm-gated full or changed reindex for an adopted repository.\n- `workspace_current`: inspect session-local repository adoption, defaults, compact precise status, health, and runtime status.\n- `read_file`: read a file safely inside an adopted repository. Defaults to text-first output; use `presentation_mode=json` for the structured compatibility payload.\n- `read_match`: reopen a prior search or navigation hit by `result_handle` plus `match_id`. Defaults to text-first output; use `presentation_mode=json` for the structured compatibility payload.\n- `search_text`: run literal or regex text search across repository files.\n- `search_hybrid`: broad natural-language search that blends lexical, graph, witness, and optional semantic evidence.\n- `search_symbol`: search for symbols such as functions, classes, methods, traits, or modules.\n- `find_references`: find references to a symbol or a source location.\n- `go_to_definition`: jump to a symbol definition from a symbol or source location.\n- `find_declarations`: find declaration sites for a symbol or source location.\n- `find_implementations`: find implementing types or members for interfaces, traits, or base symbols.\n- `incoming_calls`: find callers of a callable symbol.\n- `outgoing_calls`: find callees from a callable symbol.\n- `document_symbols`: return a hierarchical outline for a source file.\n- `inspect_syntax_tree`: inspect the bounded AST stack around a source location before writing a structural query, with optional `include_follow_up_structural=true` for best-effort replayable follow-up queries.\n- `search_structural`: run Tree-sitter structural queries over supported languages, grouped one row per match by default, with optional raw `result_mode=captures`, `primary_capture` anchoring, and per-match best-effort follow-up queries via `include_follow_up_structural=true`.\n- Follow-up structural suggestions are opt-in across the phase 1 and phase 2 surfaces above. Phase 1 covers `inspect_syntax_tree` and `search_structural`; phase 2 covers `document_symbols`, `find_references`, `go_to_definition`, `find_declarations`, `find_implementations`, `incoming_calls`, and `outgoing_calls`. `search_hybrid` and `search_symbol` remain deferred.\n\n### Extended profile tools\n\nThese tools are available by default in the `extended` profile. Set `FRIGG_MCP_TOOL_SURFACE_PROFILE=core` to hide them:\n\n- `explore`: bounded follow-up exploration for a single artifact after discovery. `zoom` defaults to text-first output; `probe` and `refine` remain structured by default.\n- `deep_search_run`: run a deeper multi-step search workflow.\n- `deep_search_replay`: replay a prior deep-search trace.\n- `deep_search_compose_citations`: build citation payloads from deep-search output.\n\n## Under the Hood\n\nFrigg keeps a **local repository model** for each adopted workspace instead of rescanning from scratch on every question. That model starts with deterministic manifests and SQLite-backed snapshot state, then layers in Tree-sitter AST parsing, symbol extraction, retrieval projections, and optional overlays such as SCIP and semantic embeddings when you enable them.\n\nFor broad discovery, Frigg does not just sort raw text hits. `search_hybrid` turns the query into intent, collects evidence from lexical matches, path and surface witnesses, graph facts, and optional semantic recall, then runs a rule-driven reranker and post-selection pass that tries to keep the useful files visible: runtime code, entrypoints, config, tests, build surfaces, and nearby companions. That is the internal “DSL and reranker” story in plain language: query facts come in, scoring rules fire, and the final pass repairs or preserves good pivots so obvious source files are less likely to lose to generic noise.\n\nThe built-in watch runtime keeps that model fresh incrementally. Frigg tracks changed paths, refreshes the affected repository state, and invalidates only the repository-scoped caches that need to move.\n\n## Configuration\n\nPrecedence is `CLI flag \u003e env var \u003e default`.\n\n| Flag / Env | Default | Meaning |\n| --- | --- | --- |\n| `--workspace-root` | utility commands default to current directory; serving mode can start empty | Limits what Frigg can read and index. Repeatable. In serving mode these roots become the global known-repository catalog. |\n| `--max-file-bytes` / `FRIGG_MAX_FILE_BYTES` | `2097152` | Maximum file size Frigg will read. |\n| `--full-scip-ingest` / `FRIGG_FULL_SCIP_INGEST` | `true` | Disable precise SCIP ingest budgets. This is the default. |\n| `--watch-mode` / `FRIGG_WATCH_MODE` | stdio `off`, HTTP `auto` | Controls the built-in watch worker: `auto`, `on`, or `off`. |\n| `--watch-debounce-ms` / `FRIGG_WATCH_DEBOUNCE_MS` | `2000` | Debounce delay before a watch-triggered refresh starts. |\n| `--watch-retry-ms` / `FRIGG_WATCH_RETRY_MS` | `5000` | Retry delay after a failed watch refresh. |\n| `--mcp-http-port` | unset | Enables HTTP transport on the given port. |\n| `--mcp-http-host` | unset | Host bind address for HTTP transport. |\n| `--allow-remote-http` | `false` | Required for non-loopback HTTP serving. |\n| `--mcp-http-auth-token` / `FRIGG_MCP_HTTP_AUTH_TOKEN` | unset | Auth token for HTTP mode. Required for non-loopback HTTP. |\n| `FRIGG_MCP_TOOL_SURFACE_PROFILE` | `extended` | MCP tool surface profile: `extended` by default, or `core` to restrict the public surface to the stable subset. |\n| `FRIGG_SEMANTIC_RUNTIME_ENABLED` | `false` | Enables optional semantic retrieval. |\n| `FRIGG_SEMANTIC_RUNTIME_PROVIDER` | unset | Semantic provider: `openai` or `google`. |\n| `FRIGG_SEMANTIC_RUNTIME_MODEL` | provider default | Optional embedding model override. |\n| `FRIGG_SEMANTIC_RUNTIME_STRICT_MODE` | `false` | Tightens query-time semantic failure behavior. |\n\nProvider defaults:\n\n- `openai` -\u003e `text-embedding-3-small`\n- `google` -\u003e `gemini-embedding-001`\n\n## Safety And Boundaries\n\n- Frigg does not modify source files. Workspace/index maintenance tools (`workspace_prepare`, `workspace_reindex`) are confirm-gated and operate on Frigg state.\n- Frigg only reads inside configured workspace roots.\n- Frigg keeps its primary state locally in SQLite.\n- Optional semantic search may call an external embedding provider if you enable it.\n- External SCIP artifacts improve precision when available, but they are optional.\n\nSession adoption and watcher leases are runtime/session state. `workspace_current.repositories` is session-local, while `list_repositories` is the global known-repository catalog. For repo-aware tools with omitted `repository_id`, Frigg scopes to the session default first, then the remaining adopted repositories.\n\nFrigg has been tested against larger real-world repositories across its supported language set, but the product boundary stays intentionally narrow: local code evidence over MCP, not a full IDE or framework runtime.\n","funding_links":["https://github.com/sponsors/bnomei","https://buymeacoffee.com/bnomei","https://www.buymeacoffee.com/bnomei"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbnomei%2Ffrigg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbnomei%2Ffrigg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbnomei%2Ffrigg/lists"}