What Are the Two Outputs Generated by the Reviewer Agent in AI Job Search?

The reviewer agent in the AI Job Search framework produces two distinct outputs: Part A (structured JSON edits for automatic application) and Part B (narrative suggestions requiring human judgment).

The MadsLorentzen/ai-job-search repository implements a sophisticated drafter-reviewer pipeline that critiques application materials through this dual-output feedback system. Understanding what are the two outputs generated by the reviewer agent is essential for customizing the automated job application workflow. This architecture separates deterministic text replacements from strategic editorial guidance, enabling both precision and creative nuance in CV and cover letter refinement.

The Dual-Output Architecture of the Reviewer Agent

According to the source code in .claude/commands/apply.md, the reviewer agent returns a bifurcated response that distinguishes between machine-applicable corrections and high-level narrative improvements. This design ensures mechanical edits execute automatically while stylistic choices receive proper human oversight.

Part A: Structured Edits

Part A consists of a JSON-formatted array of concrete edit operations. Each object specifies the target file, the exact text to locate (old_string), and the replacement content (new_string). These instructions interface directly with the Edit tool, allowing the drafter agent to execute precise string substitutions without re-processing the entire document.

The structure follows a predictable schema designed for deterministic application:

  • file: Path to the target document
  • old_string: The exact existing text to locate
  • new_string: The replacement text to insert

Part B: Narrative Suggestions

Part B delivers higher-level, prose-style recommendations that demand interpretive reasoning. These suggestions include strategic advice such as weaving company-specific research into opening paragraphs, reframing passive language into active achievements, or adding contextual background that connects skills to job requirements. Unlike Part A, these cannot be expressed as simple string replacements and require manual implementation.

Implementing the Reviewer Agent Output Format

The dual-output structure appears throughout the test suite and command definitions. The apply command documentation in .claude/commands/apply.md explicitly distinguishes between applying Part A "directly with the Edit tool" and applying Part B "using judgment," creating a clear separation of concerns in the feedback loop.


# Processing the reviewer agent's dual outputs

reviewer_feedback = {
    "part_a": [
        {
            "file": "cv.tex",
            "old_string": "Experienced in Python.",
            "new_string": "Experienced in Python (5+ years)."
        },
        {
            "file": "cover_letter.md",
            "old_string": "I am writing to apply",
            "new_string": "I am excited to apply"
        }
    ],
    "part_b": [
        "Reference the company's recent Series B funding in the opening paragraph.",
        "Reframe the bullet about 'assisted with' to emphasize leadership and revenue impact."
    ]
}

# Apply Part A automatically using the Edit tool pattern

for edit in reviewer_feedback["part_a"]:
    apply_edit(
        file_path=edit["file"],
        old_string=edit["old_string"],
        new_string=edit["new_string"]
    )

# Part B requires manual review and implementation

for suggestion in reviewer_feedback["part_b"]:
    print(f"Manual review required: {suggestion}")

Summary

  • Part A (Structured Edits): JSON-formatted machine instructions with old_string and new_string fields for automatic application via the Edit tool.
  • Part B (Narrative Suggestions): Prose-style strategic recommendations requiring human judgment to implement effectively.
  • The split format is defined in .claude/commands/apply.md and separates deterministic text replacement from nuanced editorial guidance.
  • This architecture enables the AI Job Search framework to combine automation precision with high-quality, context-aware application materials.

Frequently Asked Questions

What is the difference between Part A and Part B reviewer outputs?

Part A provides structured, deterministic edits that specify exact text replacements using old_string and new_string parameters for automated application. Part B offers narrative, strategic suggestions about content and tone that require interpretive reasoning and cannot be reduced to simple string substitutions.

How do you apply Part A structured edits automatically?

According to the implementation in .claude/commands/apply.md, Part A edits are applied directly using the Edit tool, which locates the old_string in the target file and replaces it with the new_string value. This process executes mechanically without requiring content re-evaluation.

Why does the reviewer agent separate mechanical edits from narrative suggestions?

The separation prevents automation errors when handling nuanced writing improvements while allowing high-volume text corrections to proceed unsupervised. Mechanical edits (Part A) require no context interpretation, whereas narrative suggestions (Part B) benefit from human judgment to ensure appropriate tone and strategic alignment with job requirements.

Where is the reviewer agent output format defined in the codebase?

The dual-output specification resides in .claude/commands/apply.md, which documents the /apply workflow and explicitly references Part A for structured edits and Part B for narrative suggestions. Additional validation appears in tests/test_company_research_cache.py, where prompts reference the two-part output structure.

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 →