Local-first job search workspace: sourcing, scoring, case tracking, applications and interview prep.
  • Python 98%
  • Shell 2%
Find a file
Kjell Tore Guttormsen 24768ef66b build(m1): pin toolchain and guard v1.3.0 in pyproject
Plan Step 2. Verify green: `bash scripts/bootstrap.sh && .venv/bin/python -m
pytest tests/test_toolchain.py` -> 3 passed, exit 0.

Test first, and the RED was demonstrated rather than assumed: run against a
venv carrying pytest and the guard but not pytest-socket, the third test fails
with ModuleNotFoundError while the other two pass. The test discriminates.

pyproject.toml declares the dependencies as a PEP 735 group rather than an
installable distribution -- nothing here needs a build backend, since the tests
import from scripts/ via pytest's pythonpath. Measured before choosing it: pip
26.2.1 on this machine supports `install --group`, and bootstrap upgrades pip
first, so a pip too old fails loudly instead of silently skipping the guard.

The guard is pinned to the exact tag v1.3.0 and is not vendored. Verified the
tag resolves and the package exposes __version__ == "1.3.0"; that equality is
what the test asserts, not the pip metadata.

addopts carries --disable-socket and --strict-markers, which is why the
`network` marker is declared: with strict markers an undeclared marker would
make `-m 'not network'` an error rather than a filter, and the offline
guarantee would quietly stop being tested.

bootstrap.sh builds under ${CLAUDE_PLUGIN_DATA} when set (survives a plugin
update) and falls back to the repo-root .venv for development -- risk H2. It
refuses an interpreter below 3.10 instead of building on it, because python3
here can resolve to 3.9.6 under a GUI-spawned process.

Exercised, not just written: re-running is idempotent (exit 0); --med-xlsx
installs the extra (openpyxl 3.1.5 importable); an unknown argument exits 2
with usage; a missing JOBBSOK_PYTHON interpreter refuses loudly. bash 3.2-clean
(system /bin/bash 3.2.57 -n passes) and ASCII-only.

.gitignore needed no change: `.venv/` was already on line 12 from the initial
commit, and `git check-ignore -v .venv` confirms it matches.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 17:26:20 +02:00
.claude-plugin feat: initial commit — plugin manifest and build brief 2026-09-03 20:27:23 +02:00
docs docs(m1): record Cowork probe results and degradation branch 2026-09-04 17:22:59 +02:00
scripts build(m1): pin toolchain and guard v1.3.0 in pyproject 2026-09-04 17:26:20 +02:00
tests build(m1): pin toolchain and guard v1.3.0 in pyproject 2026-09-04 17:26:20 +02:00
.gitignore chore: gitignore .claude/projects (local-only on public remote); brief validated 2026-09-03 21:17:47 +02:00
CHANGELOG.md feat: initial commit — plugin manifest and build brief 2026-09-03 20:27:23 +02:00
CLAUDE.md feat: initial commit — plugin manifest and build brief 2026-09-03 20:27:23 +02:00
LICENSE feat: initial commit — plugin manifest and build brief 2026-09-03 20:27:23 +02:00
pyproject.toml build(m1): pin toolchain and guard v1.3.0 in pyproject 2026-09-04 17:26:20 +02:00
README.md feat: initial commit — plugin manifest and build brief 2026-09-03 20:27:23 +02:00

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. Nothing is built yet beyond the manifest; the build brief in docs/build-brief.md is the contract, and milestones ship in order (M1–M6).

Install

Not installable yet. When released, the plugin is 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

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.

Changelog

See CHANGELOG.md.

License

MIT — see LICENSE.