| name | grant-finder |
| description | Use the `grant-finder` CLI to return source-cited candidate non-dilutive funding opportunities for a research lab, startup, nonprofit research group, or technical team. Returns evidence-backed Research Packets and per-candidate provenance. Triggers on `grant-finder research`, `grant-finder explain`, `grant-finder status`, or any need to find federal-grant, SBIR/STTR, topic-page, or public-source funding opportunities matching an organization brief. |
grant-finder
A deterministic Go CLI that turns a Research Assignment JSON into an
evidence-backed candidate list of non-dilutive funding opportunities. The CLI
does not call an LLM; it operates on a local SQLite ledger refreshed from
Grants.gov, the Federal Register, public agency RSS feeds, and configured
public source pages. Final ranking and recommendation judgment belong to the
calling agent.
When to use
- An upstream task gave you a lab, startup, nonprofit, or technical-project
brief, or a Research Assignment JSON, and you need to surface matching funding
opportunities.
- You need source-cited evidence for one candidate (
explain).
- You need to check ledger freshness or source-lane coverage (
status).
Public commands
grant-finder research --assignment <path|-> --json
grant-finder explain <recommendation-id|opportunity-id> --json
grant-finder status --assignment <path> --json
grant-finder doctor --json
Common flags
--db <path> SQLite ledger path (default ~/.local/share/grant-finder/grant-finder.sqlite)
--json JSON output (default for agent flows)
--compact Compact JSON
--select <fields> Project top-level paths (comma-separated, dot-pathed)
--limit N Result count (default 10 for research)
--refresh auto|off Refresh stale source lanes before answering. Default: auto
--semantic auto|usearch|off Default: auto (usearch when available, FTS5 fallback)
--include-inactive Include closed/archived/past-due records (off by default)
Notes
- Pipe the assignment JSON via stdin with
--assignment - rather than writing
to a temp file when possible.
- Always verify
retrieval.no_llm == true (or no_llm: true on explain) in
the response โ drift guard against future regressions.
- The CLI is deterministic; the same assignment against the same ledger
produces the same packet.
Where to read more
Install
(cd cli/grant-finder && go build -o "$HOME/.local/bin/grant-finder" ./cmd/grant-finder)
skills_dir="$HOME/.codex/skills"
mkdir -p "$skills_dir"
target="$skills_dir/grant-finder"
if [ -e "$target" ] && [ ! -L "$target" ]; then
echo "Existing non-symlink skill path: $target"
exit 1
fi
ln -sfn "$PWD/skills/grant-finder" "$target"