Jobs and people

recruitwithatlas.com

Atlas - my.recruitwithatlas.com

Notes an AI agent reads before it works on recruitwithatlas.com: what to open, what to call, what breaks. Written by browser-harness contributors after real runs, and kept on GitHub under the MIT license.

Give it to your agent

Any coding agent

Start the task with this line. The Markdown version is the same notes without the page around them.

Read https://browser-use.com/skills/atlas.md, then <your task>

Browser Harness

Save the files into your workspace and turn domain skills on. The code below calls its helpers, such as http_get and js. What Browser Harness is.

d="${BH_AGENT_WORKSPACE:-$HOME/.config/browser-harness/agent-workspace}/domain-skills/atlas"
mkdir -p "$d" && cd "$d"
curl -sLO https://raw.githubusercontent.com/browser-use/browser-harness/main/agent-workspace/domain-skills/atlas/overview.md
export BH_DOMAIN_SKILLS=1

name: atlas-recruit description: Atlas recruitment platform (my.recruitwithatlas.com) - routes, filters, GraphQL bootstrap for authenticated UI probes.

Gated recruitment SaaS. Auth via Google SSO (WebAuthn/passkey). GraphQL backend at /graphql (NextAuth session cookie, credentials: 'include' from the tab).

Routes

RouteWhat
/homeDashboard (default landing after login)
/sign-inRedirect target when unauthenticated
/business-development/opportunitiesBD opportunities (kanban / list view)
/business-development/leadsLeads
/business-development/prospectsProspects
/business-development/playbookPlaybook
/candidatesCandidate pipeline
/projects/<id>Specific job / project
/graphqlAuthenticated GraphQL endpoint (POST)

Filters in URL

BD opportunities uses ?filters=[JSON] (URL-encoded). Example "Me" filter:

[{"id":"opportunity_owner","selectedOptions":[{"id":"<USER_UUID>","title":"Me","excludeFromSearch":false}]}]

Filter IDs seen: opportunity_owner, stage, industry, segment, conversion_probability.

Finding your own user UUID

  • Apply a filter like "owner = Me" in /business-development/opportunities, then read selectedOptions[0].id out of the URL filters= param.
  • Or: query { me { id email } } via the GraphQL endpoint (see below).
  • User UUIDs are tenant-stable; keep them in a local secret store, not in this shared skill.

Stages (BD funnel)

Identified โ†’ Initial Outreach โ†’ Late Stage โ†’ Converted โ†’ Archived. Seen as tab labels on /business-development/opportunities.

Auth quirks

  • Google SSO flows through accounts.google.com/signin/oauth/id?... - passkey / WebAuthn only, no password fallback visible.
  • Session state lives in multiple cookies (JWE session + CSRF). Injecting only the JWE into a fresh Chrome profile is not sufficient for UI access - you land in a login loop. For UI work: log in once inside a persistent Chrome profile and let all cookies settle. For backend-only GraphQL calls: the __Secure-authjs.session-token JWE alone is enough when sent with cookie: __Secure-authjs.session-token=<jwe> from an external HTTP client.

GraphQL endpoint

POST https://my.recruitwithatlas.com/graphql using the tab's own cookies:

js("""
fetch('/graphql', {
  method: 'POST',
  headers: {'Content-Type': 'application/json', 'apollo-require-preflight': 'true'},
  credentials: 'include',
  body: JSON.stringify({query: 'query { me { id email } }'})
}).then(r => r.json()).then(j => JSON.stringify(j))
""")

This reuses the session cookies of the current tab - no JWE juggling needed when browsing from inside browser-harness.

Known mutations (verified against production schema, April 2026): opportunityCreate, opportunityUpdate, companyCreate, projectCreate, projectUpdate, opportunityAddLead, createOpportunityNote. Create mutations return placeholder names; follow with an opportunityUpdate / projectUpdate to set the final name or description. opportunityAddLead side-effects Project.company onto Opportunity.targetCompany when the opp had none.

Page titles

The app sets a green-dot emoji prefix on titles: ๐ŸŸข Atlas Agency (sign-in), ๐ŸŸข Business development (BD overview), etc. Useful for wait_for conditions - the emoji is consistent across routes.

overview.md ยท updated Apr 28, 2026 ยท 438 words

Sites change. These notes describe what worked when they were last updated, not a guarantee they still do. If something broke, the fix is a pull request to browser-harness.