How to Provide Feedback to Improve the AI's Generation Quality in AI-Job-Search

You improve the AI's generation quality by editing the structured source files—specifically CLAUDE.md and the skill definitions in .claude/skills/job-application-assistant/—rather than correcting the generated output directly.

The AI-Job-Search repository leverages Claude Code agents to read your candidate profile, evaluate job postings, and draft LaTeX CVs and cover letters. Because all generation is deterministic—templates filled from structured data—providing feedback means updating the input files that the agents consume during the six-phase pipeline.

Understanding the Feedback Architecture

The system processes your application through a rigid pipeline where each phase reads specific files. To provide effective feedback, you must modify the source files before the agents consume them.

Phase 1: Profile Onboarding

During onboarding, the agent reads CLAUDE.md (your master candidate profile) and the modular skill files under .claude/skills/job-application-assistant/. These include:

Feedback method: Edit CLAUDE.md to correct factual errors or enrich your experience descriptions. Keep information modular by using the separate markdown files to prevent data drift.

Phase 2: Job-Fit Evaluation

The agent evaluates fit by reading 04-job-evaluation.md, which contains the scoring rubric and weighting for five fit dimensions (skill match, experience match, cultural fit, etc.).

Feedback method: Adjust the rubric weights to align with your priorities. For example, increase skill_match_weight if you want the AI to prioritize technical competencies over years of experience.

Phase 3: LaTeX Document Drafting

The drafter agent assembles documents by reading 05-cv-templates.md and 06-cover-letter-templates.md, which define LaTeX assembly rules, page limits, and bullet-point styles.

Feedback method: Modify template rules if outputs appear generic or miss critical details. You can also edit cv/main_example.tex directly to adjust spacing guards like \needspace{5\baselineskip}.

Phase 4: The Reviewer Loop

A reviewer agent critiques the drafted LaTeX against the job posting. This critique lives in temporary memory, not on disk, meaning you cannot edit it directly.

Feedback method: Influence the reviewer by clearing the session and re-running the /apply command after you have improved the underlying profile or templates.

Phase 5: ATS Verification

The pipeline validates output using tools/lint_skills.py, which enforces strict schema compliance on skill files, and extracts text from compiled PDFs using pdftotext to verify contact details.

Feedback method: Run python tools/lint_skills.py locally to catch schema violations early. Ensure PDFs contain literal contact details—otherwise the ATS check will flag the output as malformed.

Phase 6: Continuous Learning

The optional /upskill command generates reports surfacing competency gaps, while tools/convert_salary_excel.py provides benchmarking data.

Feedback method: When the AI repeatedly suggests missing skills, run /upskill https://example.com/job, then feed the generated learning plan back into 02-behavioral-profile.md by adding new competencies.

Practical Steps to Provide Feedback

Follow these specific workflows to inject quality improvements into the system.

Update the Candidate Profile

Open the master profile for editing:

nano CLAUDE.md

Add precise skill entries to reduce hallucinations:

- **Primary:** Python (pandas, scikit-learn), Docker, Git
- **Secondary:** Rust, Go, Terraform

The job-application-assistant skill reads these fields at runtime from 01-candidate-profile.md.

Adjust the Scoring Weights

Edit /.claude/skills/job-application-assistant/04-job-evaluation.md to re-weight fit dimensions:

- skill_match_weight: 0.3
- experience_match_weight: 0.2
+ skill_match_weight: 0.4
+ experience_match_weight: 0.25

Save and re-run the workflow:

claude /apply https://jobindex.dk/job/1234567

Refine CV Templates

To prevent orphaned section titles, insert spacing guards in cv/main_example.tex:

\needspace{5\baselineskip}
\cventry{2020--2022}{Senior Engineer}{Acme Corp}{Copenhagen}{}

Compile locally to verify:

lualatex cv/main_example.tex

Validate with CI Linting

Enforce schema correctness before submitting:

python tools/lint_skills.py

Fix any errors in the offending skill files (e.g., missing description fields) to prevent malformed prompts that degrade output quality.

Use the Upskill Command for Gap Analysis

Generate feedback on missing competencies:

claude /upskill https://jobindex.dk/job/9876543

Add the most relevant suggested skills to 02-behavioral-profile.md, then re-run /apply to see improved matches.

Summary

  • Edit source files, not outputs: Modify CLAUDE.md and the .claude/skills/ definitions to change what the AI generates.
  • Adjust the rubric: Tweak weights in 04-job-evaluation.md to prioritize skills or experience based on your target roles.
  • Template precision: Update 05-cv-templates.md and 06-cover-letter-templates.md to control LaTeX formatting and prevent generic phrasing.
  • Enforce schema: Run tools/lint_skills.py to ensure skill files pass CI validation and produce valid prompts.
  • Close the loop: Use /upskill to identify gaps, update your profile, and re-run /apply to verify improvements in the reviewer loop.

Frequently Asked Questions

Why can't I edit the generated LaTeX directly to provide feedback?

The reviewer agent operates in an isolated loop that critiques drafts without modifying them. Because the system is deterministic, any changes you make to the output would be overwritten on the next run. Instead, update the input files (CLAUDE.md, templates, or rubrics) so the drafter produces better output natively.

How do I know if my skill files are causing quality issues?

Run python tools/lint_skills.py from the repository root. This CI-style validator enforces strict JSON/YAML schema on all files under .claude/skills/. If the linter reports missing required fields or malformed YAML, the agents receive incomplete prompts, leading to hallucinations or generic text.

What is the difference between /apply and /upskill commands?

The /apply command triggers the full pipeline: it reads your profile, evaluates the job posting, drafts LaTeX documents, and runs the reviewer loop. The /upskill command analyzes a specific job posting against your current skills and generates a learning plan without drafting documents. Use /upskill to identify gaps, update your profile, then run /apply to generate improved applications.

Where should I add new technical skills to improve generation accuracy?

Add primary technical skills to 01-candidate-profile.md under the hard skills section, and secondary or emerging skills to 02-behavioral-profile.md. The agents reference these files during the job-fit evaluation phase, and precise categorization ensures the drafter includes relevant competencies in the final LaTeX output.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →