← Back to Skills Marketplace
occupythemilkyway

Anubis

by OccupyTheMilkyWay · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
42
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install anubis
Description
Anubis Standard -- Career Application Engine. Full resume rewrite + cover letter tailored to a specific job. ATS-optimised. Saved to files.
README (SKILL.md)

Anubis Standard -- Career Application Engine

Full resume rewrite tailored to a job description. ATS-optimised. Complete cover letter. All saved to files ready to submit.


Step 1 -- Install

pip3 install rich --break-system-packages --quiet

Step 2 -- Validate and load documents

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]\
\
"
        "Get your key at: [bold cyan]ko-fi.com/occupythemilkyway[/bold cyan]\
\
"
        "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("\
")[0].strip()[:80]

console.print()
console.print(Panel.fit(
    f"[bold magenta]🐺 Anubis Standard -- Career Application Engine[/bold magenta]\
"
    f"Role:   [cyan]{role_line}[/cyan]\
"
    f"Exp:    [white]{exp_req}[/white]\
"
    f"Tone:   [white]{COVER_TONE}[/white]\
"
    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"\
=== CURRENT RESUME ===\
{resume_text}\
=== END RESUME ===")
print(f"\
=== JOB DESCRIPTION ===\
{JD}\
=== END JD ===")

Step 3 -- Generate tailored application

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:

  • Reorder and rewrite ALL bullet points using action verbs from the JD
  • Add/emphasize every ATS keyword found in the JD that legitimately applies
  • Rewrite the summary/objective to match the role exactly
  • Restructure sections if needed for this role type
  • Preserve all true facts -- only reframe, never fabricate
  • Format cleanly in markdown

Document 2: COVER_LETTER.md Write a complete cover letter in the {COVER_TONE} tone:

  • Opening: specific hook referencing something about the company or role
  • Body paragraph 1: your strongest alignment with their top 2-3 requirements
  • Body paragraph 2: a specific achievement that proves you can do the job
  • Body paragraph 3: why THIS company specifically (research the company from JD clues)
  • Closing: confident call to action
  • Sign off with {YOUR_NAME} or "[Your Name]" if not provided

Both documents must be submission-ready. No placeholders unless genuinely unknown.


Step 4 -- Save and confirm

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]\
\
"
    "Upgrade to [magenta]Anubis Pro ($9)[/magenta] for interview Q&As, follow-up email templates, and application tracking.\
"
    "-> [cyan]ko-fi.com/occupythemilkyway[/cyan]",
    border_style="green"
))

Save both files to OUTPUT_DIR using your file writing tool, then display the confirmation.

Usage Guidance
Install only if you are comfortable with the agent displaying your full resume and job description in the console and potentially using external research to personalize the cover letter. Avoid using this in shared terminals, logged sessions, synced output folders, or with resumes containing information you would not want exposed.
Capability Assessment
Purpose & Capability
The core purpose is coherent: it rewrites a resume and cover letter from a user-provided resume and job description. However, it also prints the full resume and job description to the console and asks the agent to research the company from job-description clues, which expands handling of sensitive career data beyond a simple local rewrite workflow.
Instruction Scope
The instructions do not include clear user control or opt-in before echoing full personal documents in plaintext or before doing external company research for the cover letter.
Install Mechanism
The only dependency action is `pip3 install rich --break-system-packages --quiet`; this is not malicious, but it is a broad environment mutation for a display dependency and should be visible to users.
Credentials
Requiring a resume path, job description, and license key is consistent with the stated purpose, but plaintext console exposure of the resume and job description is not clearly disclosed in the manifest or summary.
Persistence & Privilege
The skill writes tailored resume and cover-letter files to `OUTPUT_DIR`, which is disclosed in the description and environment variable metadata. There is no background persistence or privilege escalation, though same-day filenames could overwrite prior outputs depending on execution behavior.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install anubis
  3. After installation, invoke the skill by name or use /anubis
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
- Initial release: Anubis Standard Career Application Engine. - Full resume rewrite tailored to a specific job description, with ATS keyword optimization. - Generates a submission-ready cover letter in a selectable tone, personalized to the job. - Outputs both documents (resume and cover letter) to a chosen directory. - License key required for usage; user guidance and rich CLI output provided. - Includes built-in ATS analysis and clear step-by-step instructions.
Metadata
Slug anubis
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is Anubis?

Anubis Standard -- Career Application Engine. Full resume rewrite + cover letter tailored to a specific job. ATS-optimised. Saved to files. It is an AI Agent Skill for Claude Code / OpenClaw, with 42 downloads so far.

How do I install Anubis?

Run "/install anubis" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Anubis free?

Yes, Anubis is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Anubis support?

Anubis is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Anubis?

It is built and maintained by OccupyTheMilkyWay (@occupythemilkyway); the current version is v1.0.0.

💬 Comments