generated from me/nix-flake-typst-template
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:
parent
9193176fb9
commit
669c0a6a02
7 changed files with 278 additions and 0 deletions
1
.envrc
1
.envrc
|
|
@ -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
122
AGENTS.md
Normal 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
3
AGENTS.md.license
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
SPDX-FileCopyrightText: 2026 Ethan Reece <contact@ethanreece.com>
|
||||
|
||||
SPDX-License-Identifier: MIT
|
||||
55
agents/job-applier.nix
Normal file
55
agents/job-applier.nix
Normal 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.
|
||||
'';
|
||||
}
|
||||
47
agents/resume-formatter.nix
Normal file
47
agents/resume-formatter.nix
Normal 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
46
agents/resume-linter.nix
Normal 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.
|
||||
'';
|
||||
}
|
||||
|
|
@ -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; };
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue