Career intelligence system - gather professional data, generate CVs, analyze career alignment
Project description
fu7ur3pr00f
Career intelligence agent that gathers professional data, searches job boards, analyzes career trajectories, and generates ATS-optimized CVs through conversational chat.
Quick Start
# Install
pipx install fu7ur3pr00f
# Run
fu7ur3pr00f
In the chat:
/setup— Configure your LLM provider/gather— Import LinkedIn, GitHub, portfolio, CliftonStrengths/analyze— Get skill gap analysis/search— Query 7 job boards + Hacker News/generate— Create ATS-optimized CV (Markdown + PDF)
Installation
Debian/Ubuntu (amd64)
curl -fsSL https://juanmanueldaza.github.io/fu7ur3pr00f/fu7ur3pr00f-archive-keyring.gpg | \
sudo tee /usr/share/keyrings/fu7ur3pr00f-archive-keyring.gpg >/dev/null
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/fu7ur3pr00f-archive-keyring.gpg] \
https://juanmanueldaza.github.io/fu7ur3pr00f stable main" | \
sudo tee /etc/apt/sources.list.d/fu7ur3pr00f.list
sudo apt update && sudo apt install fu7ur3pr00f
Development
git clone https://github.com/juanmanueldaza/fu7ur3pr00f.git
cd fu7ur3pr00f
pip install -e .
pip install -r requirements-dev.txt
# Run locally
fu7ur3pr00f
# Run with debug logs
fu7ur3pr00f --debug
Configuration
Run /setup in the chat, or manually edit ~/.fu7ur3pr00f/.env:
# Pick ONE provider (auto-detected if empty)
FUTUREPROOF_PROXY_KEY=fp-... # Default, zero config
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...
GOOGLE_API_KEY=...
OLLAMA_BASE_URL=http://localhost:11434 # Local, offline
See .env.example for all options.
Chat Commands
| Command | Description |
|---|---|
/help or /h |
Show help message |
/setup |
Configure LLM providers and API keys |
/gather |
Gather career data (LinkedIn, CliftonStrengths, CV, portfolio) |
/profile |
View your career profile |
/goals |
View your career goals |
/thread [name] |
Show or switch conversation thread |
/threads |
List saved user conversation threads |
/memory |
Show memory and profile stats |
/debug |
Toggle debug mode (verbose logging) |
/verbose |
Show system information |
/agents |
List available specialist agents |
/clear |
Clear current thread history |
/reset |
Factory reset (delete all generated data) |
/quit, /q, or /exit |
Exit chat |
Architecture
Multi-Agent with Blackboard Pattern
graph TB
User --> Chat[Chat Client]
Chat --> Engine[Engine<br/>invoke_turn]
Engine --> Outer[Outer Graph<br/>SessionState persistent]
Outer --> Classify[classify_turn<br/>factual / follow_up / new_query]
Classify --> Route[route_turn<br/>LLM routing + keyword fallback]
Route --> Inner[Inner Blackboard Graph<br/>per-turn execution]
Inner --> S1[Coach]
Inner --> S2[Jobs]
Inner --> S3[Learning]
Inner --> S4[Code / Founder]
S1 & S2 & S3 & S4 --> KB[(ChromaDB<br/>career knowledge)]
Inner --> Synth[Synthesis<br/>LLM]
Outer --> Accum[accumulate findings<br/>cross-turn context]
Accum --> Suggest[suggest_next<br/>proactive follow-ups]
Routing Architecture:
- LLM-based semantic routing: Understands query intent, selects 1-4 specialists
- Keyword fallback: Deterministic fallback if LLM unavailable (rate limits, network errors)
- Fast paths: Factual queries → coach only; follow-ups → reuse previous specialists
- Structured output:
RoutingDecisionmodel guarantees valid specialist names - Specialist guidance: All instructions load from
prompts/md/specialist_guidance.md(no hardcoded fallbacks) - Direct model selection: Purpose-specific models are selected from configured provider settings; invocation errors surface directly instead of retrying across models
Design decisions:
| Decision | Why |
|---|---|
| Multi-agent blackboard | Single agent with 41 tools; specialists provide focused reasoning via blackboard pattern |
| LLM routing | Keyword matching too brittle — "leverage strengths to win money" should route to 3 specialists, not 1 |
| Keyword fallback | Network-resilient: keeps routing obvious queries to the right specialist even if the LLM is unavailable |
| Direct model selection | Keeps model behavior explicit: choose the configured model and surface real errors instead of hiding them behind runtime fallback |
| Blackboard pattern | Multi-specialist analysis with shared context and iteration |
| Database-first | Gatherers index directly to ChromaDB — no intermediate files |
| Two-pass synthesis | AnalysisSynthesisMiddleware replaces generic LLM output with focused reasoning |
| HITL confirmation | Destructive/expensive operations require user approval via interrupt() |
| Prompt-driven | All specialist behavior from prompts folder, zero hardcoded fallbacks |
Tools
41 tools organized by domain:
| Category | Tools |
|---|---|
| Profile (7) | get_user_profile, update_user_name, update_current_role, update_salary_info, update_user_skills, set_target_roles, update_user_goal |
| Gathering (5) | gather_portfolio_data, gather_linkedin_data, gather_assessment_data, gather_cv_data, gather_all_career_data |
| GitHub (3) | search_github_repos, get_github_repo, get_github_profile |
| GitLab (3) | search_gitlab_projects, get_gitlab_project, get_gitlab_file |
| Knowledge (4) | search_career_knowledge, get_knowledge_stats, index_career_knowledge, clear_career_knowledge |
| Analysis (3) | analyze_skill_gaps, analyze_career_alignment, get_career_advice |
| Market (6) | search_jobs, get_tech_trends, get_salary_insights, analyze_market_fit, analyze_market_skills, gather_market_data |
| Financial (2) | convert_currency, compare_salary_ppp |
| Generation (2) | generate_cv, generate_cv_draft |
| Memory (4) | remember_decision, remember_job_application, recall_memories, get_memory_stats |
| Settings (2) | get_current_config, update_setting |
MCP Clients
12 MCP clients for real-time data access:
| Client | Purpose |
|---|---|
github |
Repository search, file access, profile |
financial |
Currency conversion, PPP comparison |
tavily |
Web search, salary research |
hn |
Hacker News jobs, trending discussions |
jobspy |
Multi-board job aggregation |
remoteok |
Remote job listings |
himalayas |
Remote job listings |
remotive |
Remote job listings |
jobicy |
Remote job listings |
weworkremotely |
Remote job listings |
devto |
Developer articles, trends |
stackoverflow |
Tag trends, popular questions |
Development
# Install dev tools
pip install pyright pytest ruff
# Test
pytest tests/ -q
pyright src/fu7ur3pr00f
ruff check .
ruff check . --fix
Scripts
| Script | Purpose |
|---|---|
scripts/setup.sh |
One-time Azure/config setup |
scripts/fresh_install_check.sh |
Validate pipx install |
scripts/clean_dev_artifacts.sh |
Clean build artifacts |
scripts/build_deb.sh |
Build .deb package |
scripts/build_apt_repo.sh |
Build apt repository |
scripts/validate_apt_artifact.sh |
Test .deb in Docker |
scripts/vagrant.sh |
Vagrant VM management |
Testing
# Unit tests
pytest tests/ -q
# Benchmarks
pytest tests/benchmarks/ -v
# Fresh install check
scripts/fresh_install_check.sh --source local --config-from .env
# Vagrant apt repo testing
scripts/vagrant.sh test-apt
# Multi-agent system testing
scripts/vagrant.sh multi
Offline behavior:
- Specialist routing falls back to deterministic keyword scoring in CI or other offline environments.
- CV parsing falls back to local heading extraction for Markdown and plain-text resumes when LLM section extraction is unavailable.
- Sensitive LinkedIn/social sections such as conversations and sponsored message threads are excluded before knowledge indexing, not just hidden at search time.
System Dependencies (Optional)
| Feature | Package |
|---|---|
| GitLab CLI | sudo apt install glab |
| CliftonStrengths PDF parsing | sudo apt install poppler-utils |
| CV PDF export | sudo apt install libpango-1.0-0 libpangoft2-1.0-0 libcairo2 libfontconfig1 libgdk-pixbuf-2.0-0 |
Tech Stack
Python 3.13 · LangChain + LangGraph · ChromaDB · Typer + Rich · WeasyPrint · MCP
Documentation
Documentation is embedded in the codebase:
- Prompts:
src/fu7ur3pr00f/prompts/md/— All system and specialist prompts - Tools:
src/fu7ur3pr00f/agents/tools/— Tool implementations with docstrings - MCP Clients:
src/fu7ur3pr00f/mcp/— MCP client implementations - Memory:
src/fu7ur3pr00f/memory/— ChromaDB, RAG, episodic memory - Gatherers:
src/fu7ur3pr00f/gatherers/— Data collection modules - Specialists:
src/fu7ur3pr00f/agents/specialists/— Multi-agent specialists and orchestrator - Blackboard:
src/fu7ur3pr00f/agents/blackboard/— Blackboard pattern implementation
Key documentation files:
QWEN.md— Project context for AI assistantsGEMINI.md— Additional project documentation.env.example— Configuration reference
Licensed under GPL-2.0.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fu7ur3pr00f-0.2.0.tar.gz.
File metadata
- Download URL: fu7ur3pr00f-0.2.0.tar.gz
- Upload date:
- Size: 320.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ffe84c9303cbf0c969f801f8bd91478291a8a67c616d0beeb41486ab1617687
|
|
| MD5 |
4e35eae1c8832be673ba0a4c8e795e76
|
|
| BLAKE2b-256 |
069737a26aa9718b23b33fc3f905cbc9159fcec3b2620ff0b81f30d7bf8d2721
|
File details
Details for the file fu7ur3pr00f-0.2.0-py3-none-any.whl.
File metadata
- Download URL: fu7ur3pr00f-0.2.0-py3-none-any.whl
- Upload date:
- Size: 305.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28c05c0cc531581d51faab38eddc4a90ffd93f0636ea6c3b38b3490cf0d20265
|
|
| MD5 |
81824823cdfa4380c2c3f94cfcf849bc
|
|
| BLAKE2b-256 |
634b73ecc9f74f6a394af3fe94ef5894c55690df238e33f88c74a381e3f1a55b
|