Skip to main content

Career intelligence system - gather professional data, generate CVs, analyze career alignment

Project description

fu7ur3pr00f

Python Version License: GPL-2.0 Tests

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: RoutingDecision model 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:

Key documentation files:


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

fu7ur3pr00f-0.2.0.tar.gz (320.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fu7ur3pr00f-0.2.0-py3-none-any.whl (305.2 kB view details)

Uploaded Python 3

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

Hashes for fu7ur3pr00f-0.2.0.tar.gz
Algorithm Hash digest
SHA256 9ffe84c9303cbf0c969f801f8bd91478291a8a67c616d0beeb41486ab1617687
MD5 4e35eae1c8832be673ba0a4c8e795e76
BLAKE2b-256 069737a26aa9718b23b33fc3f905cbc9159fcec3b2620ff0b81f30d7bf8d2721

See more details on using hashes here.

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

Hashes for fu7ur3pr00f-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 28c05c0cc531581d51faab38eddc4a90ffd93f0636ea6c3b38b3490cf0d20265
MD5 81824823cdfa4380c2c3f94cfcf849bc
BLAKE2b-256 634b73ecc9f74f6a394af3fe94ef5894c55690df238e33f88c74a381e3f1a55b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page