{"id":50734703,"url":"https://github.com/najibninaba/pi-exa-search","last_synced_at":"2026-06-10T12:30:49.883Z","repository":{"id":342754370,"uuid":"1175035539","full_name":"najibninaba/pi-exa-search","owner":"najibninaba","description":"Exa-powered source discovery and search workflows for Pi.","archived":false,"fork":false,"pushed_at":"2026-03-07T07:23:02.000Z","size":99,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-07T14:30:09.662Z","etag":null,"topics":["exa","pi","pi-coding-agent","pi-package","research","typescript","web-search"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/najibninaba.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-07T06:15:02.000Z","updated_at":"2026-03-07T07:21:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/najibninaba/pi-exa-search","commit_stats":null,"previous_names":["najibninaba/pi-exa-search"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/najibninaba/pi-exa-search","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/najibninaba%2Fpi-exa-search","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/najibninaba%2Fpi-exa-search/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/najibninaba%2Fpi-exa-search/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/najibninaba%2Fpi-exa-search/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/najibninaba","download_url":"https://codeload.github.com/najibninaba/pi-exa-search/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/najibninaba%2Fpi-exa-search/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34153482,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["exa","pi","pi-coding-agent","pi-package","research","typescript","web-search"],"created_at":"2026-06-10T12:30:48.972Z","updated_at":"2026-06-10T12:30:49.876Z","avatar_url":"https://github.com/najibninaba.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/najibninaba/pi-exa-search/main/assets/header.svg\" alt=\"pi-exa-search banner\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n# pi-exa-search\n\n[![Version](https://img.shields.io/badge/dynamic/json?url=https://raw.githubusercontent.com/najibninaba/pi-exa-search/main/package.json\u0026query=%24.version\u0026label=version\u0026style=for-the-badge)](https://github.com/najibninaba/pi-exa-search/blob/main/package.json)\n[![CI](https://img.shields.io/github/actions/workflow/status/najibninaba/pi-exa-search/ci.yml?branch=main\u0026label=CI\u0026style=for-the-badge)](https://github.com/najibninaba/pi-exa-search/actions/workflows/ci.yml)\n[![Versioning](https://img.shields.io/badge/versioning-Changesets-7C3AED?style=for-the-badge)](https://github.com/changesets/changesets)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)\n\nExa-powered source discovery for Pi.\n\n`pi-exa-search` works **standalone** for URL discovery and lightweight web research.\n\nFor the complete experience, pair it with [`pi-web-access`](https://github.com/nicobailon/pi-web-access) by nicobailon so Pi can follow `exa_search` with `fetch_content` for full-page extraction.\n\nA good enhanced workflow is:\n\n1. `exa_search` finds strong candidate URLs\n2. `fetch_content` from `pi-web-access` extracts the best pages\n3. Pi synthesizes the final answer or sitrep\n\n## Why this exists\n\n`pi-web-access` is already very good at:\n\n- fetching and extracting page content\n- handling blocked or JS-heavy pages\n- storing fetched results for follow-up\n- GitHub, YouTube, and video handling\n\nThis package fills a different gap:\n\n- Exa-backed source discovery\n- fresh multi-query research workflows\n- domain include/exclude filtering\n- recency and published-date filtering\n- lightweight highlights before you decide what to fetch deeply\n\n## Install\n\nYou can install and use `pi-exa-search` on its own.\n\nThe canonical install method is npm:\n\n```bash\npi install npm:pi-exa-search\n```\n\nFor the complete experience, also install [`pi-web-access`](https://github.com/nicobailon/pi-web-access) by nicobailon:\n\n```bash\npi install npm:pi-web-access\n```\n\nFor development or testing, you can still install from GitHub and pin a ref:\n\n```bash\npi install git:github.com/najibninaba/pi-exa-search@main\n```\n\nThis package intentionally follows the same Pi package pattern as [`pi-web-access`](https://github.com/nicobailon/pi-web-access): the package ships TypeScript extension sources under `extensions/`, and Pi loads them directly.\n\n## Configuration\n\nThe extension reads your Exa API key from:\n\n1. `EXA_API_KEY` environment variable\n2. `~/.pi/exa-search.json`\n\nExample config file:\n\n```json\n{\n  \"exaApiKey\": \"your-exa-api-key\"\n}\n```\n\n## Tool\n\n### `exa_search`\n\nSearch the web with Exa for source discovery.\n\nIt works on its own, and pairs well with `fetch_content` from [`pi-web-access`](https://github.com/nicobailon/pi-web-access) when deeper extraction is available.\n\n#### Parameters\n\n- `query` or `queries`, but not both\n- `numResults`\n- `searchType`: `auto`, `neural`, `instant`, `deep`, `deep-reasoning`, `deep-max`\n- `domainFilter`: array with normal domains to include and `-domain.com` to exclude\n- `includeDomains`\n- `excludeDomains`\n- `recencyFilter`: `day`, `week`, `month`, `year`\n- `startPublishedDate`\n- `endPublishedDate`\n- `highlightsMaxCharacters`\n\n#### Behavior notes\n\n- exactly one of `query` or `queries` must be provided\n- `recencyFilter` cannot be mixed with explicit published date bounds\n- date-only published date values are normalized to UTC day boundaries\n- domains are validated explicitly, invalid values raise an error instead of being silently dropped\n\n#### Examples\n\n```ts\nexa_search({ query: \"latest AI regulation developments\", recencyFilter: \"day\" })\nexa_search({ queries: [\"coding agent tools\", \"developer workflow automation\", \"open-source agent frameworks\"], recencyFilter: \"month\" })\nexa_search({ query: \"enterprise browser security\", domainFilter: [\"reuters.com\", \"-reddit.com\"] })\n```\n\n## Command\n\n### `/exasearch \u003cquery\u003e`\n\nThis command sends a user message that nudges Pi to:\n\n- use `exa_search`\n- select the best URLs\n- use `fetch_content` if deeper extraction is needed and available\n\nUseful when you want to force the Exa-first workflow from the command line.\n\nIf `pi-web-access` is not installed, the command is still useful for Exa-first source discovery and URL shortlisting.\n\n## Recommended usage pattern\n\n### Standalone\n\n1. `exa_search`\n2. review the returned URLs, highlights, and metadata\n3. synthesize from those results or fetch pages with whatever other tooling you have available\n\n### With [`pi-web-access`](https://github.com/nicobailon/pi-web-access)\n\n1. `exa_search`\n2. choose the strongest URLs\n3. `fetch_content` on those URLs\n4. synthesize the answer\n\nPrompts like these work especially well:\n\n- \"get a fresh sitrep on AI regulation in Europe\"\n- \"find recent coverage of semiconductor manufacturing trends\"\n- \"pull together good sources on browser automation tools\"\n\n## Releases\n\nThis repo uses [Changesets](https://github.com/changesets/changesets) for versioning and changelog management, but publishing is still done **manually** from a trusted local machine.\n\nGitHub Releases are created locally with GitHub CLI via `npm run release:github`.\n\nPrerequisites:\n\n- `gh` installed locally\n- `gh auth login` completed for the target GitHub account\n\nTypical workflow:\n\n1. Make a user-facing change\n2. Run `npm run changeset`\n3. Commit the generated changeset file\n4. Merge to `main`\n5. On your local machine, run `npm run check`\n6. Run `npm run version-packages`\n7. Commit the version bump and changelog update\n8. Push that commit to `main`\n9. Run `npm publish --access public`\n10. Run `npm run release:github`\n\nIf you prefer a single final step after pushing the version bump commit to `main`, use:\n\n```bash\nmake release\n```\n\nThat target runs validation, publishes to npm, then creates the GitHub Release for the current package version.\n\nHelpful commands:\n\n```bash\nnpm run release:dry-run\nnpm publish --access public\nnpm run release:github\nmake release\n```\n\nIf you prefer shorter local commands, the repo also ships a thin `Makefile` wrapper:\n\n```bash\nmake help\nmake check\nmake release-dry-run\nmake version-packages\nmake release\nmake release-github\n```\n\nThe release GitHub Action is a manual readiness check: it runs validation plus `npm run release:dry-run`, then prints the local release steps in the workflow summary.\n\n## Development\n\nYou can use npm scripts directly:\n\n```bash\nnpm install\nnpm run format\nnpm run check\n```\n\nOr the equivalent Make targets:\n\n```bash\nmake install\nmake format\nmake check\n```\n\nThe repo includes:\n\n- Biome for formatting and linting\n- TypeScript for typechecking\n- Vitest with coverage thresholds for tests\n- GitHub Actions CI on push and pull request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnajibninaba%2Fpi-exa-search","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnajibninaba%2Fpi-exa-search","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnajibninaba%2Fpi-exa-search/lists"}