{"id":47819059,"url":"https://github.com/vaayne/tap","last_synced_at":"2026-05-12T06:01:05.840Z","repository":{"id":348260463,"uuid":"1197150418","full_name":"vaayne/tap","owner":"vaayne","description":"CLI toolkit for structured web scraping, content extraction, and browser automation","archived":false,"fork":false,"pushed_at":"2026-05-11T14:58:15.000Z","size":558,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T16:41:19.338Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://tap.vaayne.com","language":"Go","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/vaayne.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-31T11:16:52.000Z","updated_at":"2026-05-11T15:09:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vaayne/tap","commit_stats":null,"previous_names":["vaayne/tap"],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/vaayne/tap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vaayne%2Ftap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vaayne%2Ftap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vaayne%2Ftap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vaayne%2Ftap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vaayne","download_url":"https://codeload.github.com/vaayne/tap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vaayne%2Ftap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32926039,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-11T17:09:15.040Z","status":"online","status_checked_at":"2026-05-12T02:00:06.338Z","response_time":102,"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-04-03T19:00:46.629Z","updated_at":"2026-05-12T06:01:05.830Z","avatar_url":"https://github.com/vaayne.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚰 Tap\n\nTap into any website from your terminal.\n\n## Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/vaayne/tap/main/scripts/install.sh | sh\n```\n\nOr with Go:\n\n```bash\ngo install github.com/vaayne/tap/cmd/tap@latest\n```\n\nUpgrade later with:\n\n```bash\ntap upgrade\n```\n\nBrowser features use Chrome by default. Check dependencies with `tap doctor`.\n\n## Quick start\n\n### Structured data from site scripts\n\n```bash\ntap site list\ntap site hackernews/top\ntap site run github/repo repo=vaayne/tap\ntap site search weather\n```\n\nScripts auto-sync from [tap.vaayne.com](https://tap.vaayne.com) into the local cache. Local overrides at `~/.config/tap/sites/{site}/{script}.js` take precedence.\n\n### Readable content from any URL\n\n```bash\ntap fetch https://example.com/article\ntap fetch --json https://example.com/article\ntap fetch -b https://example.com/app --wait-selector '.content'\n```\n\n### Use a visible browser for auth when needed\n\n```bash\ntap attach chrome\ntap browser open https://github.com/login --show\ntap site -b github/notifications\ntap fetch -b https://github.com/notifications\n```\n\n### Reuse your existing Chrome\n\nChrome must already expose DevTools.\n\n```bash\ntap attach chrome\ntap attach status\ntap browser open https://example.com\ntap browser snapshot --interactive\ntap browser click '#submit'\ntap browser click @e1\ntap browser text\n```\n\nYou can also attach explicitly:\n\n```bash\ntap attach chrome --browser-url http://127.0.0.1:9222\ntap attach chrome --port-file ~/Library/Application\\ Support/Google/Chrome/DevToolsActivePort\n```\n\n### Browser workflow\n\n```bash\ntap browser open https://news.ycombinator.com\ntap browser open https://github.com --new-tab\ntap browser tabs\ntap browser switch tab-2\ntap browser screenshot --output github.png\ntap browser status\n```\n\n### Attached Chrome workflow\n\n```bash\ntap attach chrome\ntap attach status --json\ntap browser evaluate 'document.title'\ntap browser screenshot\n```\n\nIf the attached state becomes stale, rerun `tap attach chrome`.\n\n## Command map\n\n```text\ntap\n├── site        structured extraction from known sites\n├── fetch       clean readable content from arbitrary URLs\n├── browser     open pages and automate the current browser context\n├── attach      connect tap to an existing Chrome browser\n├── status      show the active browser context and current tab\n├── doctor      dependency and environment checks\n├── upgrade     update tap\n└── completion  generate shell completion scripts\n```\n\n## Shell completion\n\nTap can generate shell completion scripts for bash, zsh, fish, and pwsh.\n\n```bash\n# Bash\nsource \u003c(tap completion bash)\n\n# Zsh\nsource \u003c(tap completion zsh)\n\n# Fish\nmkdir -p ~/.config/fish/completions\ntap completion fish \u003e ~/.config/fish/completions/tap.fish\n\n# PowerShell / pwsh\ntap completion pwsh \u003e ~/.config/powershell/tap.ps1\n```\n\nPersistent install paths commonly used by package managers and dotfiles:\n\n```bash\n# Bash\nmkdir -p ~/.local/share/bash-completion/completions\ntap completion bash \u003e ~/.local/share/bash-completion/completions/tap\n\n# Zsh\nmkdir -p ~/.zfunc\ntap completion zsh \u003e ~/.zfunc/_tap\n```\n\n## Common browser-backed flags\n\nThese show up on the relevant commands instead of only in global help:\n\n| Flag | Description |\n| --- | --- |\n| `--browser`, `-b` | Force browser execution and reuse the resolved browser context |\n| `--show` | Run the browser visibly |\n| `--wait` | Wait a fixed duration after navigation |\n| `--wait-selector` | Wait for a CSS selector |\n| `--wait-js` | Wait for a JS expression |\n| `--timeout` | Set execution timeout |\n| `--browser-url` | One-shot DevTools override |\n| `--profile-dir` | One-shot profile override |\n| `--lightpanda`, `--lp` | Use Lightpanda instead of Chrome |\n\nCompatibility aliases still work:\n- `--ws-url` -\u003e `--browser-url`\n- `--delay` -\u003e `--wait`\n- `--no-headless` -\u003e `--show`\n\n## Advanced browser commands\n\nThe browser command still includes lower-level tools when needed:\n\n```bash\ntap browser evaluate ...\ntap browser snapshot\ntap browser forms\ntap browser cookies ...\ntap browser network ...\n```\n\n## Lightpanda\n\n| Backend | Platforms | Best for |\n| --- | --- | --- |\n| Chrome | macOS, Linux, Windows | Full browser automation, auth, network interception |\n| Lightpanda | macOS, Linux | Fast headless rendering without auth-heavy flows |\n\nInstall or update Lightpanda with:\n\n```bash\ntap doctor --install\n```\n\n## Docs\n\n- [docs/browser.md](docs/browser.md) — browser UX and reference\n- [docs/network.md](docs/network.md) — network interception reference\n- [web/README.md](web/README.md) — web app docs\n\n## Agent skill\n\nTap ships with a built-in agent skill that gives coding agents web access, site scripts, and browser automation.\n\n```bash\nnpx skills add vaayne/tap\n```\n\n## Go library\n\n```bash\ngo get github.com/vaayne/tap\n```\n\n```go\nclient, _ := tap.New()\ndefer client.Close()\n\nresult, _ := client.RunScript(ctx, \"hackernews/top\", nil)\ncontent, _ := client.Fetch(ctx, \"https://example.com\", \u0026fetch.Options{Markdown: true})\nfmt.Println(content.Markdown)\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaayne%2Ftap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvaayne%2Ftap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvaayne%2Ftap/lists"}