Open-source browser automation for AI agents. MCP server + Chrome extension + YAML workflow engine + knowledge packs. Give your AI agent a browser and domain expertise.
Drift inferred · capture-to-capture
- HIGH code analysis flagged committed secret in sidebutton/sidebutton
- HIGH code analysis flagged committed secret in sidebutton/sidebutton
tools
-
capture_page
Capture selectors from current page
-
check_writing_quality
Evaluate text quality
-
click
Click an element
-
evaluate
Execute JavaScript in browser
-
exists
Check if element exists
-
extract
Extract text from element
-
extract_all
Extract all matching elements
-
extract_map
Extract structured data from repeated elements
-
fill
Fill input value (React-compatible)
-
get_browser_status
Check browser extension connection
-
get_run_log
Get execution log for a run
-
get_workflow
Get workflow YAML definition
-
hover
Hover over element
-
list_run_logs
List recent workflow executions
-
list_workflows
List all available workflows
-
navigate
Navigate browser to URL
-
press_key
Send keyboard keys
-
run_workflow
Execute a workflow by ID
-
screenshot
Capture page screenshot
-
scroll
Scroll the page
-
scroll_into_view
Scroll element into viewport
-
select_option
Select dropdown option
-
snapshot
Get page accessibility snapshot
-
type
Type text into an element
-
wait
Wait for element or delay
analyzed commit ee1d9ef · analyzer v20 · 13h ago
skills & prompt files 1
- agent-rulessidebutton-sidebutton-ee1d9ef/AGENTS.md
danger signals1
- committed secretcommitted .envsidebutton-sidebutton-ee1d9ef/packages/server/.env:1
env file shipped with populated values
filesystem 11
- fs sidebutton-sidebutton-ee1d9ef/packages/core/src/parser.ts :6
import * as fs from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/core/src/steps/shell.ts :9
import { writeFileSync, chmodSync, existsSync } from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/server/src/cli.ts :10
import * as fs from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/server/src/context.ts :6
import * as fs from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/server/src/mcp/handler.ts :21
import * as fs from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/server/src/plugins/loader.ts :5
import fs from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/server/src/projects.ts :11
import * as fs from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/server/src/registry.ts :9
import * as fs from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/server/src/server.ts :12
import * as fs from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/server/src/skill-pack.ts :5
import * as fs from 'node:fs'; - fs sidebutton-sidebutton-ee1d9ef/packages/server/src/skills.ts :13
import * as fs from 'node:fs';
shell / exec 9
- shell sidebutton-sidebutton-ee1d9ef/packages/core/src/providers/github.ts :3
* Calls gh commands via child_process.execFile, parses JSON output, - shell sidebutton-sidebutton-ee1d9ef/packages/core/src/providers/jira-acli.ts :3
* Calls `acli jira workitem` commands via child_process.execFile. - shell sidebutton-sidebutton-ee1d9ef/packages/core/src/providers/registry.ts :7
import { execFile } from 'node:child_process'; - shell sidebutton-sidebutton-ee1d9ef/packages/core/src/steps/shell.ts :6
import { exec, spawn } from 'node:child_process'; - shell sidebutton-sidebutton-ee1d9ef/packages/server/src/cli.ts :1187
const { exec } = await import('node:child_process'); - shell sidebutton-sidebutton-ee1d9ef/packages/server/src/plugins/executor.ts :6
import { spawn } from 'node:child_process'; - shell sidebutton-sidebutton-ee1d9ef/packages/server/src/projects.ts :9
import { execFile } from 'node:child_process'; - shell sidebutton-sidebutton-ee1d9ef/packages/server/src/registry.ts :11
import { execFile, execFileSync } from 'node:child_process'; - shell sidebutton-sidebutton-ee1d9ef/packages/server/src/server.ts :15
import { execSync } from 'node:child_process';
network 7
- net sidebutton-sidebutton-ee1d9ef/packages/core/src/providers/jira.ts :33
const response = await fetch(url, { - net sidebutton-sidebutton-ee1d9ef/packages/core/src/steps/llm.ts :48
const response = await fetch(url, { - net sidebutton-sidebutton-ee1d9ef/packages/dashboard/src/lib/api.ts :45
const response = await fetch(`${API_BASE}${url}`, fetchOptions); - net sidebutton-sidebutton-ee1d9ef/packages/server/src/cli.ts :203
const res = await fetch(`${REMOTE_BASE_URL}/api/skill-packs/${encodeURIComponent(domain)}/download`); - net sidebutton-sidebutton-ee1d9ef/packages/server/src/registry.ts :426
const res = await fetch(`${REMOTE_REGISTRY_URL}/api/skill-packs`); - net sidebutton-sidebutton-ee1d9ef/packages/server/src/server.ts :14
import * as net from 'node:net'; - net sidebutton-sidebutton-ee1d9ef/packages/server/src/services/report.ts :92
const res = await fetch(url, {
secrets 3
- secrets sidebutton-sidebutton-ee1d9ef/packages/core/src/steps/llm.ts :42
const apiKey = api_key || process.env.OPENAI_API_KEY; - secrets sidebutton-sidebutton-ee1d9ef/packages/dashboard/vite.config.ts :11
authToken: process.env.SENTRY_AUTH_TOKEN, - secrets sidebutton-sidebutton-ee1d9ef/packages/server/src/server.ts :607
const agentToken = process.env.SIDEBUTTON_AGENT_TOKEN;
declared dependencies 2
- turbo@^2.3.0
- typescript@^5.7.2
transport_posture 1
- binds all interfaces (0.0.0.0) sidebutton-sidebutton-ee1d9ef/packages/server/src/server.ts :3776
await fastify.listen({ port: config.port, host: '0.0.0.0' });