apply
FreeSearches for jobs on LinkedIn, filters by profile Must-haves, applies via Easy Apply, registers each application in DB.
The English summary is being prepared. Showing the original description.
Safe Postgres CLI. Reads DATABASE_URL from .env, runs SQL, prints JSON. Read-only by default.
The English summary is being prepared. Showing the original description.
Run score Not tested
See how to installReview the instructions the agent will receive before you install.
scripts/db.js is the single entry point to the database. Use it instead of psql or inline pg scripts.
DATABASE_URL from .env automatically. No manual sourcing, no leaked credentials.--write. Prevents accidental destructive SQL.psql in PATH required).--ping shows masked user@host/db only.# Read (default, JSON array out)
node scripts/db.js "SELECT * FROM users WHERE id = <user_id>"
node scripts/db.js "SELECT data->'profile' AS profile FROM users WHERE id = <user_id>"
# Write (requires --write)
node scripts/db.js "INSERT INTO applications (user_id, platform, company, role, url, status, data) VALUES (<user_id>, 'linkedin', 'Acme', 'Eng Manager', 'https://...', 'applied', '{}'::jsonb)" --write
node scripts/db.js "UPDATE users SET data = jsonb_set(data, '{linkedin_profile}', '\"https://...\"') WHERE id = <user_id>" --write
# Introspection
node scripts/db.js --tables
node scripts/db.js --schema applications
node scripts/db.js --ping
pg scripts in skills, never call psql directly.SELECT/WITH/SHOW/EXPLAIN/VALUES/DESCRIBE is refused without --write.[{...}, ...]. Writes print {rowCount, command}.DATABASE_URL. If you need to confirm connectivity, use --ping (masked).' -> '').data->'key' (jsonb) or data->>'key' (text). Use jsonb_set for updates.Tables live in public. Discover with --tables and --schema <table>. Known tables:
users — single row (repo owner). data JSONB holds profile, job_preferences, style_profile, platforms, linkedin_profile.applications — user_id, platform, company, role, url, status, applied_at, data.messages — recruiter / contact messages.applications tableColumns: id, user_id, platform, company, role, url, status, applied_at, data
Platforms used:
linkedin = Easy Apply jobslinkedin_invite = connection requestsemail = direct emails to recruitersteamtailor = applications via Teamtailor (with LinkedIn auth, email verification, Connect)humand = applications via Humand.co<company>_career_site, etc. = specific career sitesStatus values (pipeline stages, canonical):
Active stages (left to right in the kanban):
discovered = found but no action takencontacted = invite/email sent, no formal applicationapplied = application submittedin_review = company reviewing, no responsescreening = screening call scheduled/doneinterview = technical interview in progressoffer = offer received, negotiatinghired = accepted, startingClosed stages (shown with --closed):
rejected = company rejectedwithdrawn = user withdrewskipped = decided not to apply / not a fitdata JSONB: include source, match (high/medium/low), location, tech array, stage_history array (audit trail of status changes), and any relevant metadata.
lib/browser-helpers.js provides atomic helpers that prevent session death between browser calls:
const {
goto, evalJS, evalJSON, clickByText,
waitFor, waitForSelector, waitForText,
snapshotReliable, dismissModals,
dbQuery, dbWrite,
// Atomic helpers (prevent session death between calls)
openAndEval, openAndEvalJSON,
gotoAndEval, gotoAndEvalJSON,
} = require('./lib/browser-helpers');
Atomic helpers chain open/goto + eval in a single shell command to prevent session death between calls:
// Open browser + extract in one call (no session death risk)
const jobs = openAndEvalJSON(
'https://www.linkedin.com/jobs/search/?keywords=...',
`(function(){ ... return JSON.stringify(...); })()`,
{ session: 'my-session', headed: true }
);
// Navigate + extract in one call (browser already open)
const emails = gotoAndEvalJSON(
'https://mail.google.com/mail/u/0/#all',
`(function(){ ... return JSON.stringify(...); })()`,
{ session: 'my-session' }
);
onboarding (.env + DB must exist).profile, apply, news, daily.No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Searches for jobs on LinkedIn, filters by profile Must-haves, applies via Easy Apply, registers each application in DB.
The English summary is being prepared. Showing the original description.
Control a dedicated browser via agent-browser (Vercel). Use when automating web apps, scraping authenticated sites, filling forms, or navigating SPAs. Do NOT use for desktop apps or API-only integrations.
The English summary is being prepared. Showing the original description.
Periodic routine that runs news, cleans up inbox and applies if there's no recent activity. Designed to run 1-2 times per day.
The English summary is being prepared. Showing the original description.
Opens a local web dashboard that visualizes the job application pipeline, funnel stats, recent messages, and target company status. The agent opens it at the end of a round so the user can visually review the pipeline.
The English summary is being prepared. Showing the original description.
Autonomous user preference detection, storage and injection. The agent detects preferences from conversation, saves them to Postgres, and loads active ones at the start of every flow.
The English summary is being prepared. Showing the original description.
Reviews job application updates from Gmail, LinkedIn and platforms. Prepares drafts, presents executive summary by priority, validates with the user and sends replies.
The English summary is being prepared. Showing the original description.