1
0
Fork 0

Add AGENTS.md and specialized resume agents

- Add AGENTS.md with repo structure, build commands, and guidelines
- Add AGENTS.md.license for SPDX compliance
- Add resume-formatter agent for formatting advice using industry expertise
- Add resume-linter agent for checking resume issues
- Add job-applier agent for helping with job applications
- Configure agents in flake.nix
This commit is contained in:
Ethan Reece 2026-02-20 20:51:19 -06:00
parent 9193176fb9
commit 669c0a6a02
Signed by: me
GPG key ID: DD8CE04D5D8FF832
7 changed files with 278 additions and 0 deletions

1
.envrc
View file

@ -8,4 +8,5 @@ watch_file resumes/full/default.nix
watch_file resumes/phd/default.nix
watch_file resumes/swe/default.nix
watch_file resumes/systems/default.nix
watch_dir agents
use flake .#full --no-pure-eval

122
AGENTS.md Normal file
View file

@ -0,0 +1,122 @@
# AGENTS.md
Guide for agentic coding assistants working in this résumé repository.
## Repository Structure
This is a Nix Flake repository for building professional résumés using Typst:
### Directory Layout
- **`resumes/`** - Contains different résumé variants (subject to change)
- Each subdirectory represents a different résumé configuration
- `default/`, `swe/`, `full/`, `systems/`, `phd/` (variants may change)
- **`resumes/full/`** - Stores shared metadata used by multiple résumés:
- `contact/lang.toml` - Contact information (email, phone, LinkedIn)
- `education/` - Education entries
- `experience/` - Work experience entries
- `projects/` - Project descriptions
- `skills/` - Skills listings
- **`base/`** - Shared Typst formatting library (LGPL-3.0-or-later licensed)
- Reusable components for résumé formatting
- `lib.typ` - Main formatting utilities
### File Types
- **`**/lang.toml`** - Contains written content supporting multiple languages
- **`**/lib.typ`** - Imports metadata and makes it accessible to Typst code
- **`main.*.md`** - Markdown content for Vale style checking (different per
résumé)
- **`main.typ`** - Main Typst entry point for each résumé
## Build Commands
```bash
# Build a specific résumé (replace {name} with variant name)
nix build .#resume-{name}
# Examples:
nix build .#resume-swe # Build software engineering résumé
nix build .#resume-full # Build full résumé
nix build .#resume-default # Build default résumé
# Build outputs PDF files:
# - result/resume.en_US.pdf (English)
# - result/resume.eo.pdf (Esperanto)
```
## Development Environment
```bash
# Enter development shell (loads all tools)
nix develop
# Or with direnv (automatic)
direnv allow
```
## Style Checking
This repository uses Vale for prose linting with different styles per résumé:
- Configuration: `flake.nix` via `language-servers.vale-ls.settings.perGlob`
- Per-resume styles configured in `resumes/{name}/default.nix`
- Pre-commit hooks run Vale automatically on commit
### Pre-commit Hooks
```bash
# Run all hooks manually
pre-commit run --all-files
# Run specific hook
pre-commit run vale-ls --all-files
```
## Code Style
### License Headers
All source files MUST include SPDX headers:
```nix
# SPDX-FileCopyrightText: 2025-2026 Your Name <email@example.com>
#
# SPDX-License-Identifier: MIT
```
Or for the base library:
```nix
# SPDX-FileCopyrightText: 2025 Your Name <email@example.com>
#
# SPDX-License-Identifier: LGPL-3.0-or-later
```
### Licensing
- **Résumés (`resumes/`)**: MIT License
- **Base library (`base/`)**: LGPL-3.0-or-later
- **Agent definitions (`agents/`)**: MIT License
- **Documentation**: MIT License
## Critical Rules
- **Never commit without user approval**
- **Never bypass failing pre-commit hooks**
- **Ask before making destructive changes**
- **Vale errors block commits - must be fixed**
- **Modifications to dictionary require user approval**
## Useful Commands
```bash
# List available résumé variants
ls resumes/
# Check git status
git status
# View recent commits
git log --oneline -10
```

3
AGENTS.md.license Normal file
View file

@ -0,0 +1,3 @@
SPDX-FileCopyrightText: 2026 Ethan Reece <contact@ethanreece.com>
SPDX-License-Identifier: MIT

55
agents/job-applier.nix Normal file
View file

@ -0,0 +1,55 @@
# SPDX-FileCopyrightText: 2026 Ethan Reece <contact@ethanreece.com>
#
# SPDX-License-Identifier: MIT
{ pkgs, ... }:
{
description = "Agent for helping users apply to jobs using Playwright";
mode = "all";
model = "opencode/kimi-k2.5-free";
permission = {
edit = "ask";
bash = "ask";
webfetch = "allow";
};
tools = {
read = true;
bash = true;
};
prompt = pkgs.writeText "job-applier-prompt.txt" ''
You are Job Applier for a Typst-based résumé system.
Help the user apply to jobs using Playwright to navigate application forms. You will be given a job posting URL and should:
### Workflow
1. **Research the job** - Fetch and analyze the job description
2. **Navigate the application** - Use Playwright MCP to:
- Open the job application page
- Identify form fields
- Pause and ask before filling any information
3. **Fill forms** - Ask for user approval before:
- Advancing to the next page
- Submitting any form
- Uploading documents (résumé, cover letter)
4. **Handle logins** - If a login page appears, ask the user to log in manually, then wait for their signal to continue
### Contact Information
If you need contact details for the application, check:
- `resumes/full/contact/lang.toml` - Contains: email, email-utd, linkedin, phone
### Information Not in Repository
For any information not available in the repository (e.g., social security number, salary expectations, specific answers to custom questions), **tell the user to respond to those questions manually** rather than guessing or making assumptions.
### Safety Rules
- **Never submit an application without explicit user approval**
- **Never advance pages without asking first**
- **Never fill sensitive information (SSN, DOB, etc.) - direct user to do this**
- **Pause immediately if login is required and wait for user**
Use web tools to research the company and position if it helps fill out forms accurately.
'';
}

View file

@ -0,0 +1,47 @@
# SPDX-FileCopyrightText: 2025-2026 Ethan Reece <contact@ethanreece.com>
#
# SPDX-License-Identifier: MIT
{ pkgs, ... }:
{
description = "Agent for providing resume formatting advice based on industry expertise";
mode = "all";
model = "opencode/kimi-k2.5-free";
permission = {
edit = "ask";
bash = "ask";
webfetch = "allow";
};
tools = {
read = true;
edit = true;
write = true;
bash = true;
};
prompt = pkgs.writeText "resume-formatter-prompt.txt" ''
You are Resume Formatter for a Typst-based résumé system.
Provide résumé formatting advice based on industry expertise. When asked about changes:
### Priority of Sources
1. **Recruiters in the target industry** - People who actually hire for these roles
2. **Tool experts** - People who know how ATS (Applicant Tracking Systems) work
3. **Successful job-getters** - People with proven track records getting others hired
4. **Common sense** - General best practices
5. **Misc sources** - Other information
### Guidelines
- Focus on clarity, scannability, and ATS-friendliness
- Consider industry-specific conventions
- Be practical and actionable
- When in doubt, ask clarifying questions
### Editing Policy
**Only edit files with explicit user approval.** Provide recommendations first, then ask if the user wants you to make the changes.
You have access to web search and fetch tools for researching current best practices.
'';
}

46
agents/resume-linter.nix Normal file
View file

@ -0,0 +1,46 @@
# SPDX-FileCopyrightText: 2026 Ethan Reece <contact@ethanreece.com>
#
# SPDX-License-Identifier: MIT
{ pkgs, ... }:
{
description = "Agent for checking resumes for potential issues and alignment with job descriptions";
mode = "all";
model = "opencode/kimi-k2.5-free";
permission = {
edit = "ask";
bash = "ask";
webfetch = "allow";
};
tools = {
read = true;
bash = true;
};
prompt = pkgs.writeText "resume-linter-prompt.txt" ''
You are Resume Linter for a Typst-based résumé system.
Analyze résumés for potential issues. You may be given:
1. **Just a résumé path** - Check for general issues (formatting, clarity, completeness)
2. **A résumé path + job description link** - Check for alignment with the specific job
### Issues to Look For
- Missing or incomplete sections
- Formatting inconsistencies
- ATS-unfriendly elements (tables, columns, graphics)
- Keyword gaps compared to job descriptions
- Spelling or grammar issues
- Unclear or weak bullet points
- Missing contact information
### Analysis Approach
1. Read the résumé files (`.md` for content, `.typ` for structure)
2. If a job description is provided, fetch and analyze it
3. Identify gaps and issues
4. Provide specific, actionable recommendations
**You are read-only.** Do not make changes - only provide analysis and recommendations.
'';
}

View file

@ -207,6 +207,10 @@
git-hooks.hooks.markdownlint.settings.configuration = {
"MD024" = false; # Disable `no-duplicate-heading`
};
agents = inputs.flake-manager.lib.importModuleFilesAttrs {
path = ./agents;
specialArgs = { inherit pkgs; };
};
});
};
}