# itshoax/career-ops-extension architecture

> Architecture diagram of the GitHub repository itshoax/career-ops-extension, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/itshoax/career-ops-extension
- Repository: https://github.com/itshoax/career-ops-extension

## Overview

apply-factory extends career-ops with job-form filling, learning from reviewed snapshots, LinkedIn discovery and Easy Apply support, KB review, and a daily briefing. The main flow parses career-ops report answers, emits a Kimi Webbridge prompt for human-supervised filling, then learns final answers from a snapshot into SQLite and rewrites Section G. LinkedIn search separately stages discovered jobs in an inbox. Source excerpts establish core module calls; README documents user-facing capabilities. Some mode and configuration wiring is not sampled, so those links are documented rather than inferred from imports.

Main entry points: [`extensions/apply-factory/orchestrator.py`](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/orchestrator.py) (Command orchestrator), [`extensions/apply-factory/stages/linkedin.py`](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/stages/linkedin.py) (Search and inbox stage), [`extensions/apply-factory/lib/knowledge.py`](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/lib/knowledge.py) (Intent knowledge base), [`modes/fill.md`](https://github.com/itshoax/career-ops-extension/blob/main/modes/fill.md) (Fill commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Application workflow"]
  node_orchestrator["Command orchestrator<br/>[orchestrator.py]"]
  node_report_parser["Section G parser<br/>[report_parser.py]"]
  node_fill_mode["Fill commands<br/>[fill.md]"]
  node_easy_mode["Easy Apply mode<br/>[linkedin-easy.md]"]
  node_fill_prompt["Kimi fill prompts<br/>[kimi_fill.md]"]
  node_easy_prompt["Easy Apply prompt"]
  node_snapshot["Form snapshots<br/>[kimi_snapshot.md]"]
end

subgraph group_linkedin["LinkedIn discovery"]
  node_linkedin_mode["LinkedIn commands<br/>[linkedin.md]"]
  node_linkedin_easy_search["LinkedIn easy search<br/>[linkedin-easy.md]"]
  node_linkedin_stage["Search and inbox stage<br/>[linkedin.py]"]
  node_search_prompt["LinkedIn search prompt"]
  node_scraper["Browser job scraper"]
end

subgraph group_learning["Knowledge learning"]
  node_learner["Snapshot learner<br/>[learn.py]"]
  node_knowledge["Intent knowledge base<br/>[knowledge.py]"]
  node_llm["LLM adapter<br/>[llm.py]"]
  node_db["SQLite access<br/>[db.py]"]
  node_kb_store[("Knowledge database<br/>[schema.sql]")]
  node_learn_mode["Learning mode<br/>[learn.md]"]
end

subgraph group_dashboard["Review and briefing"]
  node_kb_review["KB review mode<br/>[kb-review.md]"]
  node_briefing["Daily briefing mode<br/>[briefing.md]"]
end

node_applicant(("Applicant"))
node_careerops["Career-ops reports"]
node_kimi(("Kimi Webbridge"))
node_linkedin_site(("LinkedIn"))
node_llm_services(("LLM services"))

node_applicant -.->|"invokes fill"| node_fill_mode
node_fill_mode -.->|"runs command"| node_orchestrator
node_orchestrator -->|"parses answers"| node_report_parser
node_orchestrator -->|"renders prompt"| node_fill_prompt
node_fill_prompt -.->|"guides filling"| node_kimi
node_easy_mode -.->|"runs command"| node_orchestrator
node_orchestrator -->|"selects template"| node_easy_prompt
node_easy_prompt -.->|"guides filling"| node_kimi
node_kimi -.->|"writes snapshot"| node_snapshot
node_applicant -.->|"reviews and submits"| node_snapshot
node_applicant -.->|"invokes learning"| node_learn_mode
node_learn_mode -.->|"runs command"| node_orchestrator
node_orchestrator -->|"ingests snapshot"| node_learner
node_learner -->|"normalizes and upserts"| node_knowledge
node_knowledge -->|"queries and writes"| node_db
node_knowledge -->|"normalizes unknowns"| node_llm
node_llm -->|"calls configured backend"| node_llm_services
node_db -.->|"accesses SQLite"| node_kb_store
node_orchestrator -->|"rewrites Section G"| node_report_parser
node_applicant -.->|"invokes search"| node_linkedin_mode
node_linkedin_mode -.->|"runs command"| node_orchestrator
node_orchestrator -->|"emits and ingests"| node_linkedin_stage
node_linkedin_stage -->|"reads template"| node_search_prompt
node_search_prompt -.->|"guides job search"| node_kimi
node_kimi -.->|"supplies results"| node_linkedin_stage
node_linkedin_stage -.->|"stages discovered jobs"| node_linkedin_site
node_applicant -.->|"runs scraper"| node_scraper
node_applicant -.->|"reviews entries"| node_kb_review
node_kb_review -.->|"runs review commands"| node_orchestrator
node_applicant -.->|"requests overview"| node_briefing
node_briefing -.->|"runs command"| node_orchestrator
node_orchestrator -->|"reads review metrics"| node_kb_store
node_orchestrator -.->|"reads reports"| node_careerops

click node_orchestrator "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/orchestrator.py"
click node_report_parser "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/lib/report_parser.py"
click node_fill_mode "https://github.com/itshoax/career-ops-extension/blob/main/modes/fill.md"
click node_easy_mode "https://github.com/itshoax/career-ops-extension/blob/main/modes/linkedin-easy.md"
click node_fill_prompt "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/prompts/kimi_fill.md"
click node_easy_prompt "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/prompts/kimi_linkedin_easy.md"
click node_snapshot "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/prompts/kimi_snapshot.md"
click node_linkedin_mode "https://github.com/itshoax/career-ops-extension/blob/main/modes/linkedin.md"
click node_linkedin_easy_search "https://github.com/itshoax/career-ops-extension/blob/main/modes/linkedin-easy.md"
click node_linkedin_stage "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/stages/linkedin.py"
click node_search_prompt "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/prompts/kimi_linkedin_search.md"
click node_scraper "https://github.com/itshoax/career-ops-extension/blob/main/modes/Full_stack/linkedin_job_scraper.py"
click node_learner "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/learner/learn.py"
click node_knowledge "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/lib/knowledge.py"
click node_llm "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/lib/llm.py"
click node_db "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/lib/db.py"
click node_kb_store "https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/schema.sql"
click node_kb_review "https://github.com/itshoax/career-ops-extension/blob/main/modes/kb-review.md"
click node_briefing "https://github.com/itshoax/career-ops-extension/blob/main/modes/briefing.md"
click node_learn_mode "https://github.com/itshoax/career-ops-extension/blob/main/modes/learn.md"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_orchestrator,node_report_parser,node_fill_mode,node_easy_mode,node_fill_prompt,node_easy_prompt,node_snapshot toneBlue
class node_linkedin_mode,node_linkedin_easy_search,node_linkedin_stage,node_search_prompt,node_scraper toneAmber
class node_learner,node_knowledge,node_llm,node_db,node_kb_store,node_learn_mode toneMint
class node_kb_review,node_briefing toneRose
class node_applicant,node_careerops,node_kimi,node_linkedin_site,node_llm_services toneIndigo
```

## Components

### Application workflow

- [Command orchestrator](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/orchestrator.py): `extensions/apply-factory/orchestrator.py`
- [Section G parser](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/lib/report_parser.py): `extensions/apply-factory/lib/report_parser.py`
- [Fill commands](https://github.com/itshoax/career-ops-extension/blob/main/modes/fill.md): `modes/fill.md`
- [Easy Apply mode](https://github.com/itshoax/career-ops-extension/blob/main/modes/linkedin-easy.md): `modes/linkedin-easy.md`
- [Kimi fill prompts](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/prompts/kimi_fill.md): `extensions/apply-factory/prompts/kimi_fill.md`
- [Easy Apply prompt](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/prompts/kimi_linkedin_easy.md): `extensions/apply-factory/prompts/kimi_linkedin_easy.md`
- [Form snapshots](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/prompts/kimi_snapshot.md): `extensions/apply-factory/prompts/kimi_snapshot.md`

### LinkedIn discovery

- [LinkedIn commands](https://github.com/itshoax/career-ops-extension/blob/main/modes/linkedin.md): `modes/linkedin.md`
- [LinkedIn easy search](https://github.com/itshoax/career-ops-extension/blob/main/modes/linkedin-easy.md): `modes/linkedin-easy.md`
- [Search and inbox stage](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/stages/linkedin.py): `extensions/apply-factory/stages/linkedin.py`
- [LinkedIn search prompt](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/prompts/kimi_linkedin_search.md): `extensions/apply-factory/prompts/kimi_linkedin_search.md`
- [Browser job scraper](https://github.com/itshoax/career-ops-extension/blob/main/modes/Full_stack/linkedin_job_scraper.py): `modes/Full_stack/linkedin_job_scraper.py`

### Knowledge learning

- [Snapshot learner](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/learner/learn.py): `extensions/apply-factory/learner/learn.py`
- [Intent knowledge base](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/lib/knowledge.py): `extensions/apply-factory/lib/knowledge.py`
- [LLM adapter](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/lib/llm.py): `extensions/apply-factory/lib/llm.py`
- [SQLite access](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/lib/db.py): `extensions/apply-factory/lib/db.py`
- [Knowledge database](https://github.com/itshoax/career-ops-extension/blob/main/extensions/apply-factory/schema.sql): `extensions/apply-factory/schema.sql`
- [Learning mode](https://github.com/itshoax/career-ops-extension/blob/main/modes/learn.md): `modes/learn.md`

### Review and briefing

- [KB review mode](https://github.com/itshoax/career-ops-extension/blob/main/modes/kb-review.md): `modes/kb-review.md`
- [Daily briefing mode](https://github.com/itshoax/career-ops-extension/blob/main/modes/briefing.md): `modes/briefing.md`

### Other components

- **Applicant**
- **Career-ops reports**
- **Kimi Webbridge**
- **LinkedIn**
- **LLM services**

## Connections

- Applicant → Fill commands: invokes fill (evidence: `README.md`)
- Fill commands → Command orchestrator: runs command (evidence: `README.md`)
- Command orchestrator → Section G parser: parses answers (evidence: `extensions/apply-factory/orchestrator.py`)
- Command orchestrator → Kimi fill prompts: renders prompt (evidence: `extensions/apply-factory/orchestrator.py`)
- Kimi fill prompts → Kimi Webbridge: guides filling (evidence: `README.md`)
- Easy Apply mode → Command orchestrator: runs command (evidence: `README.md`)
- Command orchestrator → Easy Apply prompt: selects template (evidence: `extensions/apply-factory/orchestrator.py`)
- Easy Apply prompt → Kimi Webbridge: guides filling (evidence: `README.md`)
- Kimi Webbridge → Form snapshots: writes snapshot (evidence: `README.md`)
- Applicant → Form snapshots: reviews and submits (evidence: `README.md`)
- Applicant → Learning mode: invokes learning (evidence: `README.md`)
- Learning mode → Command orchestrator: runs command (evidence: `README.md`)
- Command orchestrator → Snapshot learner: ingests snapshot (evidence: `extensions/apply-factory/orchestrator.py`)
- Snapshot learner → Intent knowledge base: normalizes and upserts (evidence: `extensions/apply-factory/learner/learn.py`)
- Intent knowledge base → SQLite access: queries and writes (evidence: `extensions/apply-factory/lib/knowledge.py`)
- Intent knowledge base → LLM adapter: normalizes unknowns (evidence: `extensions/apply-factory/lib/knowledge.py`)
- LLM adapter → LLM services: calls configured backend (evidence: `extensions/apply-factory/lib/llm.py`)
- SQLite access → Knowledge database: accesses SQLite
- Command orchestrator → Section G parser: rewrites Section G (evidence: `extensions/apply-factory/orchestrator.py`)
- Applicant → LinkedIn commands: invokes search (evidence: `README.md`)
- LinkedIn commands → Command orchestrator: runs command (evidence: `README.md`)
- Command orchestrator → Search and inbox stage: emits and ingests (evidence: `extensions/apply-factory/orchestrator.py`)
- Search and inbox stage → LinkedIn search prompt: reads template (evidence: `extensions/apply-factory/stages/linkedin.py`)
- LinkedIn search prompt → Kimi Webbridge: guides job search (evidence: `README.md`)
- Kimi Webbridge → Search and inbox stage: supplies results (evidence: `README.md`)
- Search and inbox stage → LinkedIn: stages discovered jobs
- Applicant → Browser job scraper: runs scraper
- Applicant → KB review mode: reviews entries (evidence: `README.md`)
- KB review mode → Command orchestrator: runs review commands (evidence: `README.md`)
- Applicant → Daily briefing mode: requests overview (evidence: `README.md`)
- Daily briefing mode → Command orchestrator: runs command (evidence: `README.md`)
- Command orchestrator → Knowledge database: reads review metrics (evidence: `extensions/apply-factory/orchestrator.py`)
- Command orchestrator → Career-ops reports: reads reports (evidence: `README.md`)
