Claude Code and Codex plugins · sijav-clauder · sijav-codex · any project
Eight skills that work in any project, in Claude Code and in Codex. A new session starts with no rules at all: the rule sets load only when you call them, and each skill loads when its work comes up. Both plugins can work on the same project, sharing its board, its rules and its loop's law.
They ship as one Claude Code plugin, sijav-clauder, from a folder that is its own git repository. Plugin skills are called with the plugin's name first. None of them holds a project's rules, names or paths; each project keeps those itself. The same eight skills for Codex are in their own section.
| Skill | What it does | When it loads | How you call it |
|---|---|---|---|
| rules | Your rule sets: general, dev and design, plus the current project's own set, and how to change a rule. | Only when you call it | /sijav-clauder:rules/sijav-clauder:rules dev/sijav-clauder:rules design |
| dev-round | How to work through an area's code to-dos in three passes: build them all, with the findings that turn up, writing their tests and running none; then test the area at 100% coverage and mark what passed as tested; then test each as a real user, one end-to-end test per story, and mark it e2e tested. | When you call it or load the dev rules | /sijav-clauder:dev-round |
| codex | Calls codex (GPT-6) through one session per kind of work, 6.1 sol at medium effort unless told otherwise. | When a task needs codex | /sijav-clauder:codex |
| search | A plain web search: codex on luna at low effort answers one question in a few sentences, with the links it used. | When a fact, a version or a doc page is needed | /sijav-clauder:search |
| research | Deep research on astra, like ChatGPT's or Gemini's: questions and a plan you approve, web searches side by side, gap rounds, one cited report, and every quote checked on the page it cites, then judged by jev. | When a question needs many sources | /sijav-clauder:research |
| roast | Codex checks a plan or finished work and writes typed questions; jev judges them; codex writes its reading. One record per run. | When a check is wanted | /sijav-clauder:roast |
| loop | Engages a project's own loop and follows its law: start, turns, pause, finish. | When you call it | /sijav-clauder:loop |
| todo | A project board in a small database, for projects that have opted in. | In those projects | /sijav-clauder:todo |
Nothing loads by itself: there is no global rules file and no rule in memory. You call a set when you want it.
Each rule has an ID, so you can say which one to keep, change or drop. The text below is read from the rule files themselves.
Every instruction has a date. The newer one wins, by its intent. When a new rule replaces an old one, delete the old one in the same edit, so no file keeps both. If you notice two written rules that clash, follow the newer one and name the clash in one line. Between a general rule and a project rule, the project rule wins in its own project, whatever their dates.
Temporary rules are the one exception. They live only in a project's own files. Each says what it overrides and its exit condition. It does not delete the old rule. When the exit condition is met, delete the temporary rule; the old rule applies again.
Only for my questions, not every turn or task. This is your own check, not another model's.
Ask me only when the decision is really mine or only I can do it: money, deleting or publishing, access and accounts, product choices the code and my words don't settle. Ask those through the question card. A rule set can give you standing permission for one of these, as D5 does for pushes by phase; then act without asking. Everything else: decide, do it, then tell me what you did and what you suggest next.
Don't add gates, scores or approval steps I didn't ask for.
Do the work I asked for, and nothing I didn't ask for. Finish what you said you would do before switching to something else, unless I change the priority; if you can't, say why.
When I say stop, stop the action I mean, right away. If it is unclear which one, stop the current action and ask. An interrupted command is only that command: check its state and keep pending work; don't take it as a pause.
Answer first. Then say everything that matters, at normal length, split into sections, each with a label that says what it is about, so I know what I am reading. Use full paths (or send the file) and item titles, never bare item numbers. Put results in tables in the reply. Explain a technical word the first time you use it.
Capture every long or background command's full output (stdout and stderr) in a log file from the moment it starts. Never cut output with tail or head before it is saved; read excerpts from the saved log. Note the command, folder, start time and exit status in the log.
Before starting or retrying a command, check whether the same work is already running: look at full command lines, not process names. A timeout, silence or an empty process search means "unknown", not "finished". Stop only runs you started, and check that they really ended. When a monitor tails a log with tail -F, wrap it in timeout shorter than the monitor's own timeout.
Tools you write print the exact cause of each failure. A failing check is a result to act on. Investigate a failure with the logs, exit codes and timestamps you have before retrying. Never re-run a check just to change its answer, and never repeat an exhausted check without a new lead.
In the sijav-clauder:dev-round skill (moved there on 2026-09-28). Use it for every code to-do.
Work area by area: the front in general, or the back in general (a project may name its areas). Each area goes through three passes in order, and goes back to the first whenever work turns up. Done is not tested: when the project keeps its to-dos on a board, each to-do has two statuses that start false, tested and e2e tested.
When none of the area's to-dos is left:
When all the area's to-dos are done and tested:
A to-do that changes no code (a decision, a document, research) has no tests: mark it in each pass with how its result was checked.
Branches and pushes follow the project's phase: the dev rules, D5 (/sijav-clauder:rules dev).
No design rules yet.
A project can run a loop: after each reply, a Stop hook gives the loop's law back as the next prompt, until the work is done. The loop skill engages that loop and follows the law. Starting it is the project's own command, run from the session that should do the work: that session becomes the loop's only session, and the pause file goes.
A loop is per session, so a project can run several at once. Each has its own loop file, <name>-loop.local.md, naming its session, its board and its areas. The project's own hook drives its loop; a loop file that says driver: skill is driven by the loop skill's own hooks, which run only in the session that invoked the skill. No loop ever gets another loop's law.
Type /sijav-clauder:loop in the session that should do the work. The project's start command makes it the loop's only session and removes the pause file.
The loop file's areas: are the only work its session gets: the to-do script reads them on every command, so next offers nothing else and a task outside them cannot be started.
A .stop file in the project pauses every loop; .claude/<loop file>.stop pauses one. Claude makes one only when you ask; a used-up codex allowance means asking you to switch accounts, not pausing.
The reply ends with the law's finish promise only when all work is closed: no open, parked or failing items left.
A second engineer pushes back on the work. Codex does the pushing, jev (TypeSafe's judge model) weighs the logic, and Claude decides. It runs once per plan before building; small, clear fixes skip it.
| Old judge-only check | Codex alone | Codex with jev | |
|---|---|---|---|
| Real problems named, of 18 | 0 | 4 | 5 |
| False objections | 3 | 14 | 11 to 12 |
| Critical call right, of 12 | 7 | 7 | 6 |
| Time per plan | 0.4 s | 40 s | 82 s |
Each check saw only the plan as it was before its first check. Two blind scorers agreed on 53 of 54 verdicts. Jev's critical number was 0.5 or more on all three sound plans, which is why it only ever raises an alarm. Twelve plans is a small sample, and each check ran once.
gpt-6.1-sol at medium effort by default (it needs codex 0.159 or newer), gpt-6-astra for research (the roast's search mode and the research skill, at high effort) or when you ask for it, gpt-6-luna for fast, cheap tasks, such as a plain web search at low effort. A session keeps its thread when the model changes.gpt-reserve, a luna that stays free when the allowance is used up.Search and research are separate skills. Search is a plain web lookup: one question to codex on gpt-6-luna at low effort, answered in a few sentences with the links it used; when the allowance is used up, it runs on gpt-reserve, which stays free. Research is deep research on gpt-6-astra, like ChatGPT's and Gemini's, for a question that needs many sources and judgement; it checks every citation on the page it cites before you read the report.
--resume. --go skips the stop.next offers only those areas (--area can narrow them), and a task outside them cannot be started. Two sessions with different areas never get the same task.The bundle holds none of these; each project keeps its own, inside its .claude folder.
.claude/rulesets, read by /sijav-clauder:rules in that project. A project rule wins over a general rule it clashes with.<name>-loop.local.md, with that session, its board and its areas; the hooks that give it back after each reply and after a compaction; and the command that starts it.todo.db, for the todo skill.Most of the skills need nothing more than Claude Code. Two need a service you set up once: codex, which reviews work and searches the web (the codex, search, research and roast skills), and jev, TypeSafe's judge (the roast, and the research's citation check). Either can be switched off, and the skills then work without it. Also needed: Python 3.13, Node 22.13 or newer, and uv for the tests.
npm install -g @openai/codex.codex in a terminal and follow its sign-in. The skills never sign in for you and hold no codex token.codex --version prints a version. The skills find codex on your PATH.Switch it off with SIJAV_CODEX=off: the codex runner, search, research and the roast start nothing, and Claude does the work itself with its own tools. Switch it back on by removing the setting, or setting it to on.
python on your PATH: python -m pip install typesafe-sdk. Check it with python -c "import typesafe_sdk", which prints nothing when it works.SIJAV_JEV_KEY_FILE to the key file's full path. Without it, the roast reads TYPESAFE_API_KEY./sijav-clauder:roast). The record's jev line names the jev model that answered, or says why jev was not used.Switch it off with SIJAV_JEV=off: the roast runs with codex alone, and its record says why; research still checks every quote on its page, and its check says jev did not judge them. It does the same by itself when there is no key, the library is missing, or jev fails during a run. Switch it back on by removing the setting, or setting it to on.
In Claude Code's settings, under env: your user settings file for every project, or a project's .claude/settings.json for that project only. For example, with the key set and codex switched off:
{
"env": {
"SIJAV_JEV_KEY_FILE": "/full/path/to/typesafe.key",
"SIJAV_CODEX": "off"
}
}
off, 0, false or no switches a service off; any other value, or no setting at all, leaves it on. Start a new session after changing a setting.
The plugin comes from the Sijav-Skills marketplace, which holds it and its git history. Run these once in a terminal, then start a new session:
claude plugin marketplace add sijav/Sijav-Skills |
claude plugin install sijav-clauder@sijav-skills |
To work on the skills themselves, clone the repository and add the local folder instead: claude plugin marketplace add <your clone>. The source is at https://github.com/sijav/Sijav-Skills.
To pick up a newer version later, run these, then start a new session or run /reload-plugins:
claude plugin marketplace update sijav-skills |
claude plugin update sijav-clauder@sijav-skills |
Claude Code keeps its own copy of an installed plugin, every file in the plugin's folder included, so keep keys outside it. After changing the skills in a clone, raise the plugin's version and run the update.
The repository also holds sijav-codex: the same eight skills as a native Codex plugin, in its Sijav-Codex folder. Codex runs the work and hands each job to its owner. Claude Opus 5.5 alone writes code and tests and reviews code; Codex's own agents do the rest of the delegated work; jev judges logic, never code.
| Skill | What it does | When it loads | How you call it |
|---|---|---|---|
| rules | The same rule sets, read from the same files: general, dev and design, plus the project's own set. | Only when you call it | $sijav-codex-rules$sijav-codex-rules dev$sijav-codex-rules design |
| dev-round | The same three passes: build, then test, then test as a real user. Claude writes the code and the tests. | When you call it or load the dev rules | $sijav-codex-dev-round |
| agents | Hands each job to its owner: non-code work to Codex's own agents on the right model and effort, code and code review to Claude through its helper. It takes the place of the codex skill. | When work is handed out | $sijav-codex-agents |
| search | One plain web search by a fresh Codex agent on luna at low effort, answered in a few sentences with its links. | When a fact, a version or a doc page is needed | $sijav-codex-search |
| research | Deep research by Codex agents on astra: questions and a plan you approve, searches side by side, gap rounds, one report, and every quote checked on its page, then judged by jev. | When a question needs many sources | $sijav-codex-research |
| roast | Failing scenarios for a plan or finished work: Claude reviews the code, a Codex agent frames the logic, jev judges it, and Codex decides each finding. | When a check is wanted | $sijav-codex-roast |
| loop | Starts or resumes the project's loop on Codex's own Stop and compaction hooks, following the project's law. | Only when you call it | $sijav-codex-loop |
| todo | The project's board, the same small database, and its read-only dashboard in the browser. | In projects that have a board | $sijav-codex-todo |
gpt-6.1-sol at medium effort, a web search on gpt-6-luna at low, research on gpt-6-astra at high, or xhigh for R&D. When a runtime's spawn tool cannot pick the model, the four example agent profiles in skills/agents/profiles pin it..codex: agent briefs and replies, every Claude call with its prompt and raw output, roasts, research runs and the loop's state.Codex has its own hooks, so the loop works the same way. After each turn, Codex's Stop hook gives the project's law back as the next prompt until the work is done; after a compaction, its SessionStart hook reloads the whole law before the next request. The loop keeps its own state in .codex/sijav-loop/state.json: the one claimed session, the counter, the cap and the exact finish promise. The law itself is only read.
$sijav-codex-loop in the Codex session that should do the work. It claims that session through Codex's own ids, so another session or a spawned agent is never continued.sijav_loop.py pause --reason "..." makes the project's .stop, the same file that pauses Claude's loop, and records the pause. Only you ask for a pause.resume goes on with the same counter, stop ends the run, and status shows the owner, the counter and any pause file.<promise>VALUE</promise>, outside any code block. Reaching the cap is not finishing./hooks and trust the plugin's Stop and SessionStart handlers one at a time. The setup never trusts them for you.Proved live on Codex 0.159.3 in a throwaway project: continuations until the promise, the cap reached without finishing, and the whole law back after a manual compaction. Not yet seen live: a compaction in the middle of a turn, and a loop session that spawns agents, where only Codex's thread ids keep an agent from being continued.
On Codex, Claude's code and code reviews go through one helper, claude_session.py. It keeps one Claude conversation per purpose, so each line of work keeps its context. It holds no login: Claude Code signs in by itself.
claude-opus-5-5, at the effort asked for. No other model, no fallback, no retry.code reads and edits inside the project and runs only the commands you name, such as Bash(python -m unittest *); technical only reads and fetches web pages. Both refuse to read keys, .env files and other secrets.A read-only web page for a project's board: the same .claude/todo.db both plugins use, or a loop board (an SQLite file with item and dep tables, driven by its own tool). It shows what is in progress, what the board tool picks next and in what order, what was done, every task's full record, and each change as it happens. It never writes the board and never starts work.
npm ci --omit=dev --prefix "<todo skill>/dashboard". The Codex setup does the same with --dashboard-deps.node "<todo skill>/dashboard/server.mjs" --project "<project>" --port 8765, then open the address it prints. Without --port it takes a free port, which changes on every start. For a loop board in a subfolder, start it from the project with --db "<subfolder>/<board>.db"; its tool is the .py named after the board file, beside it. Give --db more than once to show several boards on one page, each read with its own tool.--publish "wss://<relay>" --publish-token-file "<file>". It keeps one outbound connection to that relay, which passes the site page's questions to this machine and the answers back, and keeps nothing itself. The token is read from the file, never typed. The site decides who may look.To try it without a real board, node "<todo skill>/dashboard/tests/demo-fixture.mjs" --port 8765 builds a throwaway board in the system's temp folder and prints commands that change it while you watch. Ctrl+C deletes it.
--publish it also answers the relay you name, which can ask only the same read-only questions.board_order(), run on a copy. The machine checks its next may add are not run, since they run commands. Any other database file is refused, never shown as an empty board.The Codex plugin installs from its own folder in a clone of this repository, through Codex's own plugin commands. Installing starts nothing: no loop, no dashboard and no model call.
todo.mjs; the dashboard's Node is above.typesafe-sdk 0.7.x on Python 3.10 or newer, and the key in a file outside the plugin, named by SIJAV_JEV_KEY_FILE (else TYPESAFE_API_KEY).python "<clone>/Sijav-Codex/tools/sijav_codex_setup.py".--install. It runs codex plugin marketplace add on the package folder, codex plugin add sijav-codex@sijav-codex-local and codex plugin list, and checks each answer.skills/agents/profiles into a project's .codex/agents folder, or the one in your home folder, for a spawn tool that cannot pick a model./hooks screen, one handler at a time.codex plugin add sijav-codex@sijav-codex-local again.Set these before starting Codex. off, 0, false or no switches a service off; no setting leaves it on.
SIJAV_CLAUDE=off: no Claude call; code and code reviews wait.SIJAV_JEV=off: no jev call; the roast and the citation check say jev did not judge.SIJAV_CODEX=off: no Codex agents are started; Codex does the non-code work itself and says so.Every rule set has a log.md next to it: the history of each rule, with the old text, why it existed, the owner's words and the evidence. The log is the guard; nobody else has to approve a rule.
log.md..bak ending, outside any .claude folder, so the copy can never load as a rule.Rules do not go into CLAUDE.md or memory files: those load into every session.