Published on

Automating Facebook, Greenhouse, and Upwork from an AI Agent Without API Keys

Automating Facebook, Greenhouse, and Upwork from an AI Agent Without API Keys
Authors
On this page

I spend most of my workday pairing with AI coding agents in the terminal. They write modules, run test suites, and manage git branches. But the moment I asked an agent to help with repetitive tasks on the web, everything broke down.

My daily backlog had real friction points:

  • Reviewing sixty incoming Facebook friend requests. I want to accept people with fifteen mutual connections from the developer community and ignore the rest, but doing it by hand means clicking through dozens of profiles.
  • Applying to job postings on Greenhouse. Every single posting asks for the exact same twenty fields: GitHub link, portfolio, location, phone, work authorization, plus five custom dropdowns.
  • Updating project pitches on Toptal and tweaking skill tags on Upwork to match recent client work.

The standard developer answer to web automation is headless Playwright or Puppeteer. In practice, that meant exporting session cookies into scripts, getting blocked by Cloudflare verification pages, or fighting headless browser detection. Reverse-engineering private GraphQL endpoints was no better, because authentication headers rotate every few hours.

The simpler path was staring right at me. I already have Chrome open all day with my active sessions, two-factor auth cookies, and real browser fingerprint. Why spin up a cold headless runner when the agent could just work inside the tabs I already have open?

That is what OpenTabs handles over the Model Context Protocol (MCP). The agent issues tool calls over local JSON-RPC, the OpenTabs daemon routes them to its Chrome extension, and the extension runs an adapter script directly in the target tab.

To automate my own daily routine, I built four plugins and open-sourced them as a collection: github.com/nadimtuhin/opentabs-plugins.

1. Facebook Friends Manager

Facebook Friends Request Triage

Going through Facebook friend requests manually is tedious. The fb-friends-manager plugin turns your pending request queue into a structured dataset.

When I run a triage prompt, the agent calls get_friends_overview and suggest_triage. It groups requests by mutual friend tiers (zero, low, mid, high) and incoming age.

From there, I can tell the agent: "Accept everyone with more than ten mutual friends and clear the requests older than six months." The plugin executes batch confirmations with built-in pacing delays between requests, avoiding aggressive bursts that trigger platform rate limits.

2. Greenhouse Job Applications

Greenhouse Job Application Autofill

Applying to engineering roles shouldn't require copy-pasting the same resume details thirty times a week.

With the greenhouse plugin, I point my agent to an active Greenhouse tab. The agent runs get_application_form to map out the entire page structure: standard inputs, required checkboxes, and custom dropdown menus.

Next, it calls fill_application to populate matching fields from my local profile notes. For resume and cover letter uploads, attach_file injects base64 document buffers straight into the native file inputs. The whole form gets filled in two seconds.

3. Toptal Talent Portal

Toptal Talent Application and Cover Letter

On the Toptal portal, applying to open client contracts requires writing tailored cover letters and keeping profile credentials aligned with specific tech stacks.

The toptal plugin tracks modal state through get_apply_state. The agent reads the client description, drafts a role-specific pitch matching character limits, and injects it with fill_cover_letter. It also exposes tools to update profile sections and employment dates without digging through nested settings menus.

4. Upwork Profile Manager

Upwork Freelancer Profile Editor

Keeping a freelance profile fresh on Upwork usually means clicking through multiple sub-pages.

The upwork plugin exposes four targeted tools: inspecting current profile text, editing the headline and overview bio, assigning job categories, and managing skill chips. The agent adds missing skills and prunes outdated ones directly from a single prompt instruction.

The safety guardrail: no auto-submitting

Automating browser work can feel risky if you hand an agent full control over the submit button. A bad hallucination could send an unfinished pitch or apply to the wrong role.

To prevent that, the Greenhouse and Toptal plugins intentionally do not have a submit tool. The agent handles 95% of the mechanical work: mapping inputs, formatting text, selecting dropdown options, and attaching resumes. But it stops there. The tab stays open in Chrome for your review, and you click submit yourself.

Trying the plugins

All four plugins are written in TypeScript under an MIT license in a single monorepo:

git clone https://github.com/nadimtuhin/opentabs-plugins.git
cd opentabs-plugins
npm install
npm run build

Point your ~/.opentabs/config.json to the plugin paths and restart OpenTabs:

{
  "localPlugins": [
    "/path/to/opentabs-plugins/plugins/fb-friends-manager",
    "/path/to/opentabs-plugins/plugins/greenhouse",
    "/path/to/opentabs-plugins/plugins/toptal",
    "/path/to/opentabs-plugins/plugins/upwork"
  ]
}

Your coding agent now has direct access to your active browser tabs, with zero API keys or headless scrapers required.