Liber8 Career Agent

Workflows

Manage recurring personalized job searches, analyze CVs, generate tailored application packs, and deliver ranked opportunity pipelines with DOCX attachments.

Install

openclaw skills install liber8

Liber8

Liber8 is a recurring opportunity-discovery workflow for one person. The skill now includes its own runnable path:

  • scripts/bootstrap_liber8.py to create the user-local workspace
  • scripts/liber8_pipeline.py to run deterministic discovery, filtering, dedupe, and pack generation
  • scripts/render_recurring_prompt.py to generate the exact prompt used by a Liber8 recurring run
  • templates in assets/templates/ for profile, resume, and recurring-run notes

Credentials and environment model

Liber8 has no skill-specific API keys. It should use capabilities already available in the user's OpenClaw environment.

Expected environment:

  • OpenClaw web/search/fetch access for discovery and validation
  • an AI model if the host wants richer drafting later
  • an optional delivery channel if the host wants outbound summaries or attachments

If delivery or drafting capability is not configured, Liber8 should still work locally. Do not ask the user to paste secrets into prompts or store credentials inside the skill.

Scope and safety boundaries

Keep Liber8 scoped to the user-approved Liber8 workspace and its own recurring run. In scope:

  • the Liber8 skill folder
  • the bundled Liber8 scripts
  • the user-local Liber8 config/state/output paths created during bootstrap
  • the specific recurring run created for Liber8
  • user-provided role URLs, employer sites, and source lists relevant to discovery

Out of scope unless the user explicitly asks:

  • unrelated repos or scheduler entries
  • shell startup files or OS service config
  • cookies, browser stores, login/session secrets
  • broad crawling beyond role-relevant pages
  • writes outside the Liber8 workspace/config paths

Install and first-run checklist

  1. Bootstrap a local Liber8 workspace by running scripts/bootstrap_liber8.py.
  2. Fill in the generated profile JSON and resume text file.
  3. Run scripts/liber8_pipeline.py manually once.
  4. Inspect summary.txt, manifest.json, and generated pack files.
  5. Only then enable recurring automation if the user wants it.

Real execution path

Use this path instead of relying on an external proof-of-concept script:

  1. Run scripts/bootstrap_liber8.py --workspace <workspace> --skill-root <skill-root> once.
  2. Edit the generated profile at liber8/config/profiles/<name>.json.
  3. Edit the generated resume at liber8/config/resumes/<name>.txt.
  4. Run: python <skill-root>/scripts/liber8_pipeline.py --profile <profile-json> --resume <resume-txt> --state-dir <workspace>/liber8/state --output-dir <workspace>/liber8/output
  5. Read:
    • liber8/output/summary.txt
    • liber8/output/manifest.json
    • generated markdown pack files in liber8/output/
  6. If the user wants automation, generate the recurring-run prompt with: python <skill-root>/scripts/render_recurring_prompt.py --skill-root <skill-root> --workspace <workspace> --profile <profile-json> --resume <resume-txt> --state-dir <workspace>/liber8/state --output-dir <workspace>/liber8/output
  7. Create or update one Liber8-specific recurring run using that generated prompt.

Onboarding flow

When first setting up Liber8 for a user, make onboarding conversational and stepwise. Do not dump a large questionnaire all at once. Ask one question at a time, pause for the answer, then ask the next most relevant question.

Resume intake

Start by helping the user provide a resume/CV in whichever form is easiest for them:

  • file upload
  • a file placed in a known local directory
  • a URL to the resume/CV
  • pasted text

For the local-directory path, do not ask the user to invent a file path. Instead, tell them to use the fixed Liber8 intake folder:

  • liber8/inbox/

This inbox can be used for:

  • CVs / resumes
  • job descriptions
  • saved role adverts or exported role documents the user wants Liber8 to assess or apply against

Then ask them for the filename, or let them simply say "done" if there is only one obvious relevant file there.

If the user has not provided a resume yet, do not continue into deep search configuration. First resolve resume intake. If needed, help them populate the resume template incrementally.

Conversational sequence

After resume intake, gather the rest in small steps rather than one big form. A good order is:

  1. target role families and exclusions
  2. target seniority / level range
  3. geography, commute, and remote/hybrid/onsite preferences
  4. sectors to prioritise or avoid
  5. target employers and employers to avoid
  6. delivery preference: local-only or configured channel delivery
  7. if using delivery, collect channel, target, whether to attach packs, and preferred formats
  8. whether they want recurring automation after first-run validation

Write the answers into the generated profile file as you go. Then: 9. extract employer names from the user's resume 10. infer likely competitors of those employers 11. run scripts/search_source_candidates.py to discover candidate source sites from target employers, resume employers, and likely competitors 12. show those candidate sources to the user and let them exclude any they do not want, keep the ones they do want, and add any extra sources manually 13. add the selected sources to the profile/source registry 14. run a manual first pass 15. review the shortlist with the user before enabling automation 16. ask for feedback on the shortlist: which roles felt promising, which felt off-target, which employers/titles/locations/themes should be favoured or avoided 17. write that feedback into the profile so future runs sharpen ranking and source selection

Search design

Liber8 should search in layers.

  • start from the candidate's configured role families, sectors, location, work mode, target employers, preferred sources, and accumulated feedback
  • during onboarding, search for candidate source sites the user can choose from
  • use selected source URLs and employer careers pages as the primary discovery path
  • use broader search results only as fallback discovery inputs, not as final validation on their own
  • dedupe previously surfaced roles through the local state ledger
  • continuously sharpen ranking using explicit user reactions to previous shortlists

If a user shares a role URL:

  1. inspect it
  2. decide if it is live and relevant
  3. generate a pack if relevant
  4. add the domain/source only if it looks reusable

If a user drops a JD / role file into liber8/inbox/:

  1. read it
  2. assess whether it is relevant to the user's current ambitions
  3. generate or refine an application pack against it if useful
  4. ask whether this role or employer should influence future search preferences

If a user shares a target employer:

  1. add it to the profile
  2. use it in future discovery runs
  3. consider competitor employers and their careers sites during source discovery

After each meaningful shortlist review, ask brief feedback questions such as:

  • Which 1-3 roles were closest to what you want?
  • Which ones were clearly wrong, and why?
  • Are we under-targeting or over-targeting seniority?
  • Which employers, functions, sectors, or geographies should be favoured or avoided next time?

Use the answers to update the feedback section of the profile rather than keeping them as loose chat context.

Output contract

A successful Liber8 run should produce local files even with no outbound delivery configured:

  • summary.txt -> concise shortlist
  • manifest.json -> structured run output
  • one application-pack draft per shortlisted role in Markdown
  • plain-text and DOCX variants where generated

If the user configures delivery and the chosen channel supports attachments, Liber8 should prefer attaching generated pack files such as DOCX and Markdown. If the chosen channel does not support attachments, send the shortlist and include local file paths instead.

Drafting rule

If the host environment has a suitable AI model, Liber8 may use it for stronger cover-letter or CV refinement. If not, the bundled pipeline should still produce deterministic local draft packs. Do not require a model-specific credential owned by the skill. Do not invent facts.

Automation rule

Only create recurring automation when the user explicitly asks for it. That automation should call the bundled pipeline script with the user's profile/resume/state/output paths. Use scripts/render_recurring_prompt.py to generate the exact agent-turn text for the recurring run so the automation path stays consistent with the manual path. Default recurring behavior to local-only reporting unless the user has explicitly configured a delivery destination. Do not inspect or modify unrelated scheduler entries. Prefer sandbox or test-workspace validation before enabling recurring runs.

Files bundled with this skill

  • scripts/bootstrap_liber8.py
  • scripts/liber8_pipeline.py
  • scripts/render_recurring_prompt.py
  • scripts/search_source_candidates.py
  • assets/templates/profile.template.json
  • assets/templates/resume.template.txt
  • assets/templates/source-registry.template.json
  • assets/templates/recurring-run-notes.txt
  • assets/examples/sample-profile.json
  • assets/examples/sample-resume.txt
  • references/liber8-setup-and-ops.md

Example prompts

  • Set up Liber8 for me.
  • Bootstrap Liber8 in this workspace and show me which files to edit.
  • Use Liber8 to analyse my resume and build a first search profile.
  • Run Liber8 with my current profile.
  • Add these employers to Liber8: <list>
  • Update Liber8 to prioritise product roles in London with hybrid work.
  • Create a recurring Liber8 run every weekday at 07:30 after we validate the manual run.