{"id":50774794,"url":"https://github.com/nudgebee/forager","last_synced_at":"2026-06-11T22:30:32.814Z","repository":{"id":362004080,"uuid":"1160577333","full_name":"nudgebee/forager","owner":"nudgebee","description":"Lightweight agent that forages data from customer datasources (databases, HTTP APIs, MCP servers) and relays it securely to Nudgebee's cloud platform.","archived":false,"fork":false,"pushed_at":"2026-06-02T07:43:01.000Z","size":420,"stargazers_count":0,"open_issues_count":7,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T08:08:47.351Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nudgebee.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-18T05:33:45.000Z","updated_at":"2026-06-02T06:02:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nudgebee/forager","commit_stats":null,"previous_names":["nudgebee/forager"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/nudgebee/forager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nudgebee%2Fforager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nudgebee%2Fforager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nudgebee%2Fforager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nudgebee%2Fforager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nudgebee","download_url":"https://codeload.github.com/nudgebee/forager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nudgebee%2Fforager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34221150,"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-11T02:00:06.485Z","response_time":57,"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":[],"created_at":"2026-06-11T22:30:32.289Z","updated_at":"2026-06-11T22:30:32.801Z","avatar_url":"https://github.com/nudgebee.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Forager\n\n[![CI](https://github.com/nudgebee/forager/actions/workflows/ci.yml/badge.svg)](https://github.com/nudgebee/forager/actions/workflows/ci.yml)\n[![CodeQL](https://github.com/nudgebee/forager/actions/workflows/codeql.yml/badge.svg)](https://github.com/nudgebee/forager/actions/workflows/codeql.yml)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/nudgebee/forager/badge)](https://scorecard.dev/viewer/?uri=github.com/nudgebee/forager)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)\n\nLightweight agent that runs in a customer environment (VM, container, or\nKubernetes pod) and proxies requests from Nudgebee's cloud platform to\ninternal datasources — databases, HTTP APIs, MCP servers, Kafka, Redis,\nSSH targets, and more. Customers never need to expose those datasources\nto the internet; the agent only makes outbound connections to the\nNudgebee relay.\n\nLicensed under [Apache 2.0](LICENSE).\n\n## What it does\n\n```\n┌──────────────────────────────┐         ┌──────────────────────────────┐\n│      Nudgebee Cloud          │         │   Customer Environment       │\n│                              │   wss   │                              │\n│   Cloud API ──► Relay ◄──────┼─────────┼──► Forager Agent             │\n│                              │         │       │                      │\n└──────────────────────────────┘         │       ├──► PostgreSQL/MySQL  │\n                                         │       ├──► HTTP API          │\n                                         │       ├──► MCP server        │\n                                         │       └──► ...               │\n                                         └──────────────────────────────┘\n```\n\nThe agent opens a single outbound WebSocket connection to the relay,\nreceives signed action requests (Ed25519), routes them to the right proxy\nmodule by datasource ID, and returns responses. No inbound ports needed.\n\nSee [docs/architecture.md](docs/architecture.md) for the full request\nflow and connection lifecycle.\n\n## Install\n\n### Linux\n\n```bash\ncurl -fsSL https://github.com/nudgebee/forager/releases/latest/download/install.sh \\\n  | sudo NB_ACCESS_KEY=... NB_ACCESS_SECRET=... bash\n```\n\nInstalls the binary to `/usr/local/bin/nudgebee-forager`, drops config\nunder `/etc/nudgebee/`, and registers a systemd unit.\n\n### macOS\n\n```bash\ncurl -fsSL https://github.com/nudgebee/forager/releases/latest/download/install-macos.sh \\\n  | sudo NB_ACCESS_KEY=... NB_ACCESS_SECRET=... bash\n```\n\nInstalls the binary to `/usr/local/bin/nudgebee-forager`, drops config\nunder `/usr/local/etc/nudgebee/`, and registers a launchd daemon at\n`/Library/LaunchDaemons/com.nudgebee.forager.plist` (requires root).\n\n### Windows (PowerShell, as Administrator)\n\n```powershell\n$env:NB_ACCESS_KEY = \"...\"\n$env:NB_ACCESS_SECRET = \"...\"\niwr -useb https://github.com/nudgebee/forager/releases/latest/download/install.ps1 | iex\n```\n\n### Kubernetes (Helm)\n\n```bash\nhelm install forager oci://ghcr.io/nudgebee/charts/forager \\\n  --set forager.accessKey=... \\\n  --set forager.accessSecret=...\n```\n\n### Docker\n\n```bash\ndocker run -d --name forager \\\n  -e NB_ACCESS_KEY=... \\\n  -e NB_ACCESS_SECRET=... \\\n  -v forager-data:/data \\\n  ghcr.io/nudgebee/forager:latest\n```\n\nThe Docker image is the only build that bundles Oracle Instant Client\nfor `oracle` datasources. Standalone binaries (Linux/macOS/Windows) ship\nwithout Oracle support.\n\n### AWS (CloudFormation)\n\nA ready-to-launch EC2 template lives at\n[deploy/cloudformation/forager-ec2.yaml](deploy/cloudformation/forager-ec2.yaml).\n\n## Configure\n\nMinimal `forager.yaml`:\n\n```yaml\nrelay_url: wss://relay.nudgebee.com/register\naccess_key: \u003cagent-key\u003e\naccess_secret: \u003cagent-secret\u003e\ndata_dir: /var/lib/nudgebee\n```\n\nAll config values can also be set via `NB_*` environment variables\n(`NB_RELAY_URL`, `NB_ACCESS_KEY`, ...). Local datasources, cloud secret\nproviders, and the full env-var surface are documented in\n[docs/configuration.md](docs/configuration.md).\n\n## Supported datasources\n\n| Module       | Protocols                                              |\n| ------------ | ------------------------------------------------------ |\n| `db-proxy`   | PostgreSQL, MySQL, MSSQL, ClickHouse, Oracle (Docker only) |\n| `http-proxy` | Any HTTP API (basic / bearer / custom-header auth)     |\n| `mcp-proxy`  | Model Context Protocol (HTTP, stdio, SSE transports)   |\n| `mongo-proxy`| MongoDB                                                |\n| `redis-proxy`| Redis                                                  |\n| `kafka-proxy`| Kafka (PLAIN / SCRAM)                                  |\n| `ssh-proxy`  | SSH (password or key)                                  |\n\nFull details and config keys in\n[docs/proxy-modules.md](docs/proxy-modules.md).\n\n## Build from source\n\n```bash\ngit clone https://github.com/nudgebee/forager\ncd forager\nmake build              # → bin/forager\nmake test               # unit tests with -race\nmake build-all          # cross-compile: linux/{amd64,arm64}, darwin/{amd64,arm64}, windows/amd64\ndocker build -t forager .   # local Docker image (with Oracle support)\n```\n\n## Releases\n\n- **Docker images** — `ghcr.io/nudgebee/forager:vX.Y.Z` and `:latest`,\n  multi-arch (linux/amd64 + linux/arm64), cosign-signed.\n- **Standalone binaries** — attached to each\n  [GitHub Release](https://github.com/nudgebee/forager/releases):\n  linux/{amd64,arm64}, darwin/{amd64,arm64}, windows/amd64.\n- **Helm chart** — `oci://ghcr.io/nudgebee/charts/forager`.\n\n## Documentation\n\n- [Architecture](docs/architecture.md) — overview and request flow.\n- [Configuration](docs/configuration.md) — config file, env vars, secret\n  providers.\n- [Connection lifecycle](docs/connection-lifecycle.md) — WS reconnect,\n  state machine.\n- [Proxy modules](docs/proxy-modules.md) — per-module config and creds.\n- [Request flow](docs/request-flow.md) — how a request travels end-to-end.\n\n## Contributing\n\nPRs welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for the dev loop,\nPR guidelines, and the DCO sign-off requirement.\n\n## Security\n\nPlease report vulnerabilities privately. See [SECURITY.md](SECURITY.md).\n\n## License\n\nApache 2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnudgebee%2Fforager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnudgebee%2Fforager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnudgebee%2Fforager/lists"}