The flows below follow the code. Module paths are relative to each repository.
Recruitment Desk
Jobs. An operator-run endpoint supplies job records, fetched with one GET request. The desk maps each job into a SEEK listing draft (src/recruitment_swarm/job_bridge.py, src/recruitment_swarm/desk.py). The code does not log in to LinkedIn or crawl it, and it refuses LinkedIn and SEEK hosts as the source. Posting waits for the settings in src/recruitment_swarm/config.py.
Resumes. The keyword step (src/recruitment_swarm/resume_bridge.py, src/recruitment_swarm/keywords.py) rewrites a bullet only when it already holds a same-group alias, and lists unsupported keywords as missing. An engine named dspy runs the same check through DSPy, a Python library for prompt programs (src/recruitment_swarm/runtimes/dspy_phrase.py). That path writes no desk event.
Calls. The Calls lane (web/app/calls/page.tsx) sends a dial with the approval flag set. The server refuses unless the flag is true, the phone number is in E.164 form (the international phone format), and the three Twilio settings exist (src/recruitment_swarm/desk.py, src/recruitment_swarm/config.py). The call opens with this disclosure:
Hello, this is an automated initial interview from {company} about the {title} role. This call is transcribed by Grok so a recruiter can review it. It is not a decision by itself. You can say no or hang up now. Do you agree to continue and to this transcription?
The call moves to in progress only after a clear yes (src/recruitment_swarm/calling.py). Speech then goes to a realtime Grok voice session that transcribes with the model grok-transcribe (src/recruitment_swarm/runtimes/grok_voice.py). The fallback path sends the recording to a Grok speech-to-text endpoint with the model grok-voice-transcribe-2.0 (src/recruitment_swarm/clients.py). score_transcript in src/recruitment_swarm/calling.py counts keyword presence and gives one of five recommendations, each labelled an initial screen. [NEEDS CONFIRMATION: whether a recruiter must confirm each recommendation before action]
Programming Desk
Seats. Seven seats are defined: LEAD, SYSTEMS, WEB, ANDROID, IOS, INFRA, and QUALITY (services/desk-gateway/src/desk_gateway/config.py). Each has a prompt under prompts/, and scripts/generate-templates.py produces seven Grok Bot templates. The documented install is those templates and a bootstrap step (docs/upgrade-plan-desk-v2.md). This page does not describe a paste-the-URL install.
Gateway. services/desk-gateway/src/desk_gateway/server.py gives each seat its own MCP endpoint, where MCP (Model Context Protocol) is how agents call tools. A seat signs in through OAuth with PKCE, a code challenge that ties the sign-in to one client, and a consent page asks for its passphrase (services/desk-gateway/src/desk_gateway/oauth.py). Each tool call is checked against its input schema (schema.py), refused if its arguments look like a secret (redact.py), and stopped after 20 seconds. Each call writes an audit line that stores a digest of its arguments, not the arguments (audit.py).
Gates. ci/gates/run_all.py runs the repository gates. G-1 (ci/gates/check_ownership.py) checks one owner per changed file. G-2 (ci/gates/check_receipt.py) requires a receipt and a recorded approver who is not the bot. G-3 (ci/gates/check_secrets.py) runs in a pre-commit hook and in CI. G-5 and G-6 (ci/gates/check_rollback.py) require approval fields for destructive operations. G-4 is the contracts gate (ci/gates/check_contracts.py). A seventh gate, G-7 (ci/gates/check_desk_integrity.py), runs but is absent from the README table.
Across seats, gates, and gateway. A seat's tool calls pass the gateway checks, and its change then passes the gates in CI. The gates read the records attached to a change. For approvals, they check that a record exists, not who the approver is.
Example workflow (illustrative scenario)
This scenario is invented to show how the steps connect. It uses a hypothetical customer support lead role and does not describe a real candidate, call, or hire.
An operator imports one job for the role through the operator-run endpoint. The desk stores it as a SEEK draft, and nothing is posted because the posting settings are incomplete (src/recruitment_swarm/desk.py).
In the Resumes lane, the job's keywords are checked against a sample resume that already says customer service, so the phrasing can use the job's wording. A software platform the resume does not mention is listed as missing and is not added (src/recruitment_swarm/resume_bridge.py).
In the Calls lane, the operator reviews the planned call and sets the approval flag before any dial. The server dials only then, and only when the telephony settings and phone number pass. The call opens with the disclosure. Suppose the candidate says yes. The call moves to in progress, and the transcript is scored. The lane shows a recommendation of hold, labelled an initial screen. The operator then decides the next step.