jobbsok/README.md

4 KiB
Raw Blame History

jobbsok

Local-first job search workspace: sourcing, scoring, case tracking, applications and interview prep.

A read-only job search operating system for one person searching for their own job. It reads listings the operator is already looking at, scores them against a maintained candidate profile, records every accept/reject decision with a reason, keeps each case's full correspondence in one folder, drafts applications as files, and flags threads that have gone silent. It never submits, never sends, never stores a credential.

Solo-maintained, fork-and-own. This plugin is a starting point, not a vendor product. Issues are welcome as signals; pull requests are not accepted.

AI-generated: all code produced by Claude Code through dialog-driven development.

Version Platform License

Status: pre-release, milestone 1 of six. The candidate profile, the scoring script, two skills and the host tool server are built; case folders, ingestion, correspondence, drafting and learning are not. The build brief in docs/build-brief.md is the contract, and milestones ship in order (M1–M6).

Install

Read this first if you are not the author. The ingestion guard this plugin depends on is installed from a self-hosted Forgejo host, git.fromaitochitta.com, which a third party may not be able to reach. This repository is published as a working reference, not as a one-command install: if you cannot reach that host, everything here is readable and most of it runs, but the guarded ingestion path cannot be built. Saying so plainly is better than an install block whose first step fails for everyone but its author.

The plugin runs on two surfaces, and they install differently.

Claude Code — pinned by tag in the ktg-plugin-marketplace catalog:

claude plugin marketplace add https://git.fromaitochitta.com/open/ktg-plugin-marketplace.git
claude plugin install jobbsok@ktg-plugin-marketplace

Claude Cowork — there is no marketplace command. Build the archive from this repository's explicit include list, then upload it through Customize → Plugins:

bash scripts/package_plugin.sh     # writes jobbsok.plugin

Never build that archive with a recursive zip of the repository root: it would ship .git, the virtualenv, the local-only STATE.md and everything under .claude/. The script exists so that cannot happen by accident.

Then, once, on either surface — build the Python environment the scripts and the host tool server run on:

bash scripts/bootstrap.sh          # add --med-xlsx for the spreadsheet export

In an installed copy this builds the environment under $CLAUDE_PLUGIN_DATA, which survives a plugin update; the packaged archive deliberately excludes the virtualenv, so the bootstrap is the supported route there. Without it the jobbsok-tools server has no interpreter to run on and refuses to start rather than serving on whatever python3 the PATH offers. JOBBSOK_PYTHON overrides the interpreter choice.

Finally, the workspace — the plugin never guesses at a location:

export JOBBSOK_WORKSPACE=~/jobbsok-workspace   # or pass --workspace

The kandidatprofil skill scaffolds the tree on first run. The workspace is yours, lives outside this repository, and is never committed.

Non-goals

Submitting applications. Sending email. Any write to Finn.no or LinkedIn. Credential storage. Background jobs. Multi-user support. Recruiter-side features. Bulk listing harvest.

Security

The trust model, the boundaries and the risks this design accepts are in SECURITY.md. The short version: read-only against external sites, no credential handling, all data local, and every listing or email body passes the ingestion guard before it becomes a file.

Changelog

See CHANGELOG.md.

License

MIT — see LICENSE.