next-role
Health Warn
- License รขโฌโ License: MIT
- Description รขโฌโ Repository has a description
- Active repo รขโฌโ Last push 0 days ago
- Low visibility รขโฌโ Only 7 GitHub stars
Code Pass
- Code scan รขโฌโ Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
- Permissions รขโฌโ No dangerous permissions requested
No AI report is available for this listing yet.
๐ Level up your career with GenAI. ๐ Tailor your CV to any JD, ๐ automate company research, and ๐๏ธ generate custom interview prep plans for your next role or internal promotion.
NextRole ๐
โจ GenAI-Accelerated Career Advancement โจ
Upload your CV + a job description. Get a tailored resume PDF, a researched interview-prep doc, and a day-of battlecard cheat sheet โ built by a multi-agent system with long-term memory.
What is NextRole?
Preparing for an interview takes hours of tedious resume tailoring and company research. NextRole automates the heavy lifting. Hand it your current CV and a target Job Description (or just a JD URL) โ whether you're applying externally or angling for an internal move โ and a team of specialized AI agents researches the company, rewrites your resume to fit, coaches you round-by-round, and prints a cheat sheet for the day of.
- ๐ Tailored resume โ PDF โ your experience rewritten against the exact JD + company research, rendered with
rendercv(editable & re-renderable). - ๐ Deep company & role recon โ live web research distilled into a match analysis.
- ๐ฏ Structured interview prep โ a self-introduction plus per-round STAR stories mapped to the role.
- โก Day-of battlecard โ a one-page-per-round PDF cheat sheet for the final high-pressure review.
- ๐๏ธ Time-boxed prep plans โ a study plan that fits 1 month, 2 weeks, or just 3 hours.
- ๐ Paste a JD URL โ point it at a careers page; it extracts and processes the posting for you.
- ๐ฌ Iterate by chatting โ "add a 4th round", "add React to my skills" โ streaming multi-turn edits, with the right agent owning each file.
- ๐๏ธ Built-in workspace โ upload, preview (PDF / MD / YAML / JSON / code), print-to-PDF, and swap the LLM at runtime.
Demo
Your browser does not support the video tag.โถ๏ธ Watch the full walkthrough in HD on YouTube ยป
Quick Start
The whole stack โ frontend, backend, Postgres, Redis โ runs in Docker.
# 1. Clone & configure
git clone https://github.com/tam159/next-role.git
cd next-role
cp .env.example .env # then fill in your API keys (see table below)
# 2. Launch everything
docker compose up -d
# 3. Find your host ports (set in .env, vary per machine)
docker ps # read the 0.0.0.0:<host>->... mappings
# 4. Open the app
# Frontend UI โ http://localhost:<FRONTEND_LOCAL_PORT>/
# Backend API docs โ http://localhost:<LANGGRAPH_LOCAL_PORT>/docs
Environment variables โ what to put in๐ก Pick your LLM in the app. Open the in-app Configuration dialog to set the main agent and subagent models โ no rebuild needed. See LLM configuration below for recommended models and free / local options.
.env
| Variable | Required | Purpose |
|---|---|---|
OPENAI_API_KEY |
โ | Default main + subagent models |
TAVILY_API_KEY |
โ | Web research (hiring-recon) |
LLAMA_CLOUD_API_KEY |
โ | Document parsing (LlamaParse) |
POSTGRES_PASSWORD |
โ | Local Postgres password |
ANTHROPIC_API_KEY / GOOGLE_API_KEY |
โฌ | Alternative providers (swap at runtime) |
OPENAI_API_BASE |
โฌ | Self-hosted / Azure / LM Studio endpoint |
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_DEFAULT_REGION |
โฌ | AWS Bedrock models |
LANGCHAIN_API_KEY + LANGCHAIN_TRACING_V2=true |
โฌ | LangSmith tracing (recommended) |
FRONTEND_LOCAL_PORT / LANGGRAPH_LOCAL_PORT / POSTGRES_LOCAL_PORT / REDIS_LOCAL_PORT |
preset | Host port mappings |
Secrets live only in .env (gitignored); gitleaks runs on every commit.
Models are swappable at runtime โ no rebuild. Open the in-app Configuration dialog and set Main agent / Subagents to a <provider>:<model> string (e.g. anthropic:claude-sonnet-4.6); leave blank to use the defaults. Settings persist in your browser's local storage.
Recommended: Claude Sonnet 4.x, GPT-5.x, or Gemini 3.x โ e.g. anthropic:claude-sonnet-4.6, openai:gpt-5.4, google_genai:gemini-3.5-flash.
Run it for free or fully local:
- Tavily and LlamaCloud both include a generous monthly free tier โ plenty for local use.
- Google AI Studio offers a free tier for Gemini
flash/litemodels. - Fully local โ point
OPENAI_API_BASEat LM Studio or Ollama (both expose an OpenAI-compatible API) and fill your local model in the UI.
Output quality tracks the model you pick โ smaller local models trade some quality for zero cost.
Dev workflow โ hot reload, restart, rebuild, stop- Code edits hot-reload in both containers โ just save the file.
- Add a frontend dep:
pnpm --dir frontend add <pkg>โdocker compose restart frontend - Add a backend dep:
uv add <pkg>โdocker compose up -d --build backend - Change
.env:docker compose restart <service> - Stop:
docker compose down(add-vto wipe the DB & Redis volumes)
Architecture
NextRole is a supervisor agent orchestrating three specialist subagents on LangGraph + DeepAgents. The main agent handles intake, document processing, and the final battlecard; it delegates research, resume tailoring, and interview coaching to declarative subagents (defined in subagents.yaml, each with its own model, tools, and skills).

How It Works
A five-stage pipeline. Stage 4 runs the resume tailor and interview coach in parallel; Stage 6 routes follow-up edits to whichever agent owns the target file.

- Intake โ the agent asks for your CV, the JD (file, URL, or pasted text), your prep timeline, and any extra context.
- Process documents โ uploads are parsed to markdown via LlamaParse (
parse_document); JD URLs are pulled via Tavily (extract_jd). Results land in/processed/, alongside a persisted intake note. - Research โ the
hiring-reconsubagent gathers company + role intel and a match analysis โ/research/<resume>/<jd>.md. - Tailor & coach (parallel) โ
resume-tailorrewrites the CV as arendercvYAML and renders a PDF;interview-coachwrites a structured prep doc (self-intro + per-round STAR stories). - Battlecard โ the main agent assembles a one-page-per-round JSON and renders it to a day-of PDF via WeasyPrint.
- Multi-turn updates โ ask for changes in chat; the owning agent reads the existing file, preserves everything you didn't name, and re-renders.
The full procedure (file layout, update routing, source-of-truth conventions) lives in backend/app/career_agent/README.md. Per-feature design docs are in docs/prd/.
The agent's behavior is configured by files, not hardcoded โ making it easy to read, diff, and extend:
| Primitive | Where | Role | When loaded |
|---|---|---|---|
| Memory | AGENTS.md |
Per-stage procedure manual (semantic memory) | Always (system prompt) |
| Skills | skills/<consumer>/<name>/SKILL.md |
Task workflows (procedural memory) | On demand, per consumer |
| Subagents | subagents.yaml |
Specialist delegates โ the task tool |
Always |
| Tools | tools.py + DeepAgents built-ins |
parse_document, extract_jd, render_battlecard_pdf, prepare_render_settings, list_files, overwrite_file, plus read/write/edit_file, ls/glob/grep, execute |
โ |
| Filesystem | CompositeBackend |
Routes virtual paths to the right store (see below) | โ |
| Middleware | middleware.py |
ModelOverrideMiddleware (runtime LLM swap) + UtcDatetimeMiddleware |
โ |
Subagents only receive the tools they opt into in YAML โ tool whitelisting keeps interview-coach, for example, from inheriting the main agent's full toolset.
A single CompositeBackend gives the agent one virtual filesystem while routing each path prefix to the right physical store โ Postgres for text artifacts, disk for binaries and render outputs, and a shell backend that translates virtual paths to real ones before running commands like rendercv render.
flowchart LR
Agent["Agent filesystem tools<br/>read_file ยท write_file ยท edit_file<br/>ls ยท glob ยท grep ยท execute"]
CB{{"CompositeBackend<br/>routes virtual paths"}}
Agent --> CB
subgraph Shell["VirtualPathShellBackend ยท default route"]
SH["rewrites /virtual/path โ on-disk path<br/>before subprocess.run<br/>(e.g. rendercv render /tailored_resume/...)"]
end
subgraph Store["StoreBackend ยท Postgres + pgvector"]
ST["/memory/ ยท /processed/ ยท /research/<br/>/interview_coach/<br/>/large_tool_results/ ยท /workspace/"]
end
subgraph Disk["FilesystemBackend ยท disk (binaries + renders)"]
DK["/upload/ ยท /tailored_resume/<br/>/render_intermediate/<br/>/interview_battlecard/"]
end
CB -->|default| Shell
CB -->|KV routes| Store
CB -->|binary + PDF routes| Disk
Sem["Semantic memory ยท AGENTS.md"] -. loaded into system prompt .-> Agent
Proc["Procedural memory ยท skills/*/SKILL.md"] -. loaded on demand .-> Agent
Work["Working memory ยท LangGraph thread"] -. drives .-> Agent
Store --- Epi["Episodic memory ยท persisted artifacts<br/>(/memory/ auto-memory planned)"]
Disk --- Epi
Mapped to memory types:
- Working memory โ the live LangGraph conversation thread.
- Semantic memory โ
AGENTS.md, always in the system prompt. - Procedural memory โ
skills/*/SKILL.md, loaded on demand. - Episodic memory โ persisted artifacts in Postgres + disk. Per-user auto-memory (personalization via the
/memory/route) is on the roadmap.
| Layer | Stack |
|---|---|
| Backend | Python 3.13 ยท LangChain v1 ยท LangGraph 1.x ยท DeepAgents 0.6 ยท uv ยท served on langchain/langgraph-api:3.13 |
| Agent I/O | Tavily (web search) ยท LlamaParse / LlamaCloud (document parsing) ยท rendercv (resume โ PDF) ยท WeasyPrint (battlecard โ PDF) |
| Frontend | Next.js 16 ยท React 19 ยท TypeScript ยท Tailwind ยท pnpm ยท @langchain/langgraph-sdk (useStream) |
| Data | PostgreSQL 18 + pgvector ยท Redis 8 |
| Infra | Docker Compose (frontend ยท backend ยท postgres ยท redis) |
| Observability | LangSmith |
Because NextRole runs on the LangGraph Agent Server, the career_agent assistant is also reachable by other tools and agents โ no extra code:
- MCP โ exposed as Model Context Protocol tools at
/mcp(Streamable HTTP), usable by any MCP-compliant client. โ docs - A2A โ Google's Agent2Agent protocol at
/a2a/{assistant_id}(JSON-RPC 2.0;message/send+message/stream). โ docs - The full server API is browsable at the
/docsendpoint of your deployment.

Set LANGCHAIN_API_KEY and LANGCHAIN_TRACING_V2=true in .env, and every run โ each LLM call, tool call, and nested subagent โ is traced at smith.langchain.com under the LANGCHAIN_PROJECT you configure. Optional, but invaluable for debugging the multi-agent flow.
Roadmap
- ๐ง Auto-memory & personalization โ populate the
/memory/route so the agent learns your style, history, and preferences and auto-applies them across sessions. - ๐ค "Auto-dream" consolidation โ sleep-time compaction that prunes stale notes and merges insights into durable memory.
- ๐ฆ Remote sandboxes โ swap
LocalShellBackendfor an isolated remote sandbox (e.g. Daytona) so render/shell steps are safe for multi-tenant use. - ๐ Agent evaluation โ LangSmith evals over the workflow (the
@pytest.mark.evalmarker is already reserved). - ๐จ Enhanced UI โ richer artifact editing, diff views, and inline regeneration.
- โก React streaming SDK migration โ evaluate
@langchain/reactto replace the current frontenduseStreamintegration, using selector-based subagent subscriptions to avoid UI hangs when parallel subagents stream large tool inputs such aswrite_file.content. - ๐ MCP / A2A examples โ sample integrations driving
career_agentfrom external agents and IDEs. - ๐งต Per-thread / multi-user scoping โ namespace artifacts per user instead of the current global layout.
- ๐ More sources & ATS-aware tailoring โ pluggable retrievers + keyword/ATS optimization passes.
Limitations
NextRole is built for local, single-user, trusted use today.
- ๐ Local shell execution โ
VirtualPathShellBackendruns render commands viasubprocesson the host. Safe locally; not hardened for multi-tenant production (needs sandboxing โ see roadmap). - ๐ค Global file scoping โ uploads and artifacts share one filesystem layout; re-uploading a filename overwrites. No per-user isolation yet.
- ๐งช LLM evals deferred โ current tests are unit + local-DB integration; automated quality evals aren't wired up yet.
- ๐ง No cross-session personalization yet โ memory persists within a project (conversation threads + artifacts in Postgres), but the agent doesn't yet learn your style and history and auto-apply them to brand-new chats; the
/memory/auto-memory route is on the roadmap. - โฑ๏ธ Latency โ a full run makes several LLM and tool calls across multiple agents; expect minutes, not seconds.
Contributing
PRs and issues are welcome! Start with CONTRIBUTING.md โ it walks through the fork โ PR workflow, local setup, the CI quality gate (pre-commit + backend tests), testing, and conventions. Stack-specific details live in backend/CLAUDE.md and frontend/CLAUDE.md; commits follow Conventional Commits.
New here? Issues labelled good first issue are a gentle place to start, and questions are welcome in Discussions.
License
MIT ยฉ 2026 Tam Nguyen
Acknowledgements
Built on DeepAgents, LangChain / LangGraph / LangSmith, rendercv, WeasyPrint, Tavily, and LlamaIndex / LlamaParse.
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found