Install
openclaw skills install anubisAnubis Standard -- Career Application Engine. Full resume rewrite + cover letter tailored to a specific job. ATS-optimised. Saved to files.
openclaw skills install anubisFull resume rewrite tailored to a job description. ATS-optimised. Complete cover letter. All saved to files ready to submit.
pip3 install rich --break-system-packages --quiet
import os, sys, re
from datetime import datetime
from rich.console import Console
from rich.panel import Panel
from rich.table import Table
from rich.rule import Rule
from rich import box
console = Console()
LICENSE_KEY = os.environ.get("LICENSE_KEY", "").strip()
if not LICENSE_KEY or not LICENSE_KEY.startswith("ANUBIS-STD-"):
console.print(Panel(
"[red bold]Anubis Standard requires a license key.[/red bold]\n\n"
"Get your key at: [bold cyan]ko-fi.com/occupythemilkyway[/bold cyan]\n\n"
"Or use the free version: [dim]openclaw skills install anubis-lite[/dim]",
title="License Required",
border_style="red"
))
sys.exit(1)
JD = os.environ.get("JOB_DESCRIPTION", "").strip()
RESUME_PATH = os.environ.get("RESUME_PATH", "").strip()
YOUR_NAME = os.environ.get("YOUR_NAME", "").strip()
COVER_TONE = os.environ.get("COVER_TONE", "professional").lower().strip()
OUTPUT_DIR = os.environ.get("OUTPUT_DIR", "./anubis_output").strip()
if not JD:
console.print(Panel("[red]JOB_DESCRIPTION is required.[/red]", title="Error", border_style="red"))
sys.exit(1)
if not RESUME_PATH or not os.path.exists(RESUME_PATH):
console.print(Panel(f"[red]RESUME_PATH not found: {RESUME_PATH}[/red]", title="Error", border_style="red"))
sys.exit(1)
os.makedirs(OUTPUT_DIR, exist_ok=True)
with open(RESUME_PATH, encoding="utf-8", errors="replace") as fh:
resume_text = fh.read()
# ATS keyword extraction
TECH_KW = ["python","javascript","typescript","react","node","sql","aws","azure","gcp","docker",
"kubernetes","machine learning","ai","data","api","rest","agile","scrum","product",
"management","leadership","analytics","excel","tableau","salesforce","java","go"]
SOFT_KW = ["communication","collaboration","problem-solving","leadership","analytical",
"strategic","cross-functional","stakeholder","detail-oriented"]
jd_lower = JD.lower()
ats_tech = [k for k in TECH_KW if k in jd_lower]
ats_soft = [k for k in SOFT_KW if k in jd_lower]
exp_match = re.findall(r"(\d+)\+?\s*years?", JD, re.IGNORECASE)
exp_req = exp_match[0] + "+ years" if exp_match else "Not specified"
role_line = JD.split("\n")[0].strip()[:80]
console.print()
console.print(Panel.fit(
f"[bold magenta]🐺 Anubis Standard -- Career Application Engine[/bold magenta]\n"
f"Role: [cyan]{role_line}[/cyan]\n"
f"Exp: [white]{exp_req}[/white]\n"
f"Tone: [white]{COVER_TONE}[/white]\n"
f"Output: [green]{OUTPUT_DIR}/[/green]",
border_style="magenta"
))
tbl = Table(title="ATS Analysis", box=box.SIMPLE, border_style="magenta")
tbl.add_column("Category", style="dim", width=20)
tbl.add_column("Keywords", style="cyan")
tbl.add_row("Technical", ", ".join(ats_tech) or "None detected")
tbl.add_row("Soft skills", ", ".join(ats_soft) or "None detected")
console.print(tbl)
console.print(Rule("[magenta]Loading documents...[/magenta]"))
print(f"\n=== CURRENT RESUME ===\n{resume_text}\n=== END RESUME ===")
print(f"\n=== JOB DESCRIPTION ===\n{JD}\n=== END JD ===")
Based on the resume and job description above, generate two complete documents:
Document 1: TAILORED_RESUME.md Rewrite the candidate's resume to be perfectly tailored for this job:
Document 2: COVER_LETTER.md Write a complete cover letter in the {COVER_TONE} tone:
Both documents must be submission-ready. No placeholders unless genuinely unknown.
import os
from datetime import datetime
from rich.console import Console
from rich.panel import Panel
from rich.table import Table
from rich import box
console = Console()
date_str = datetime.now().strftime("%Y%m%d")
resume_out = os.path.join(OUTPUT_DIR, f"tailored_resume_{date_str}.md")
letter_out = os.path.join(OUTPUT_DIR, f"cover_letter_{date_str}.md")
tbl = Table(title="Anubis -- Application Package Ready", box=box.SIMPLE, border_style="green")
tbl.add_column("File", style="cyan")
tbl.add_column("Description", style="dim")
tbl.add_row(resume_out, "ATS-optimised tailored resume")
tbl.add_row(letter_out, f"Cover letter ({COVER_TONE} tone)")
console.print()
console.print(tbl)
console.print(Panel(
"[bold green]Application package complete.[/bold green]\n\n"
"Upgrade to [magenta]Anubis Pro ($9)[/magenta] for interview Q&As, follow-up email templates, and application tracking.\n"
"-> [cyan]ko-fi.com/occupythemilkyway[/cyan]",
border_style="green"
))
Save both files to OUTPUT_DIR using your file writing tool, then display the confirmation.