Claude Code and Codex plugins · sijav-clauder · sijav-codex · any project

Skills on Call

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.

The eight skills

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.

SkillWhat it doesWhen it loadsHow you call it
rulesYour 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-roundHow 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
codexCalls 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
searchA 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
researchDeep 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
roastCodex 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
loopEngages a project's own loop and follows its law: start, turns, pause, finish.When you call it/sijav-clauder:loop
todoA project board in a small database, for projects that have opted in.In those projects/sijav-clauder:todo

How rules load

Nothing loads by itself: there is no global rules file and no rule in memory. You call a set when you want it.

you type one A session starts no rules loaded /sijav-clauder:rules /sijav-clauder:rules dev /sijav-clauder:rules design reads general: G1 to G6 general + dev: D1 to D5, dev-round general + design (none yet) then the project's own rule set, if any wins a clash
You call one command. It reads the general rules and the set you name, then the project's own rule set when the project has one. Inside that project, a project rule wins over a general rule it clashes with.

The rule sets

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.

General G · /sijav-clauder:rules

G1

Tell me the truth, plainly

  • When I ask why something happened, answer with the mechanism: the file, the line, the command, the condition that fired. Not an excuse, not an apology, not my own words handed back.
  • "I don't know" is a correct answer. Without evidence (a log, a timestamp, output), say you don't know, then go and get the evidence if you can.
  • Never invent an authority. If nothing told you to do it, say so. If something did, quote it.
  • Don't just agree with me. If I am wrong, say so and show what happened.
  • In reports, keep evidence, guesses and unknowns apart.
G2

Newer instructions win; old ones get deleted

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.

G3

When I ask a question, check twice

  1. Check my question: what am I really asking, and is anything it assumes wrong?
  2. Draft the answer, then check it: is every fact checked now (command run, file read)? Is anything missing or softened? What would the other side say?
  3. Answer first, then show what you checked, each part under its own label.

Only for my questions, not every turn or task. This is your own check, not another model's.

G4

Ask me only when the decision is really mine

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.

G5

Do what I asked, and finish it

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.

G6

Replies in labeled sections

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.

Development D · /sijav-clauder:rules dev

D1

Keep the full output of commands

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.

D2

Never run the same work twice

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.

D3

Failures

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.

D4

Tests and rounds of to-dos

In the sijav-clauder:dev-round skill (moved there on 2026-09-28). Use it for every code to-do.

D5

Branches and pushes, by phase

  • MVP: push to main after every to-do. No checks, and don't ask.
  • Phase 0 (fixing the MVP): push to development; when phase 0 is done, development goes to main.
  • After phase 0: development, staging and main. When a story is done, push development to staging. Pushing to main is the owner's, unless the owner tells Claude to do it.
  • No other check before a push.
  • Each project's rule set says which phase it is in.

dev-round skill · /sijav-clauder:dev-round, or with the dev rules

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.

build

1. Build

  • Take the area's to-dos, and every follow-up or finding that becomes a to-do on the way, until none is left.
  • Build each one and write its tests with it. Test code only; don't write tests for rules, prompts or prose.
  • Tests follow written scenarios from the user's point of view: real-world, logical, and many of them. Together they cover 100% of the area's code.
  • Run no tests while building: not the tests you just wrote, not the ones near the code you changed, not coverage, not end-to-end runs, not planted faults, not the full suite. The worry that a change broke something else is what the test pass is for.
  • The one exception: when the project closes a to-do by running its exit check (a loop's close command, for example), that one command runs, and nothing else.
test

2. Test

When none of the area's to-dos is left:

  1. Run the area's full test suite, with coverage (it must reach 100%).
  2. Check the tests themselves: each follows a real scenario, its steps and checks match what the user does and sees, and it fails when the behaviour it guards breaks (plant a fault to see it fail when in doubt). Fix a test that is wrong or illogical, and say which and why.
  3. When a scenario fails, find which one and why its logic fails, and fix the root cause in the code. Never change a test just to make it pass; change it only when its scenario was wrong, and say so.
  4. Mark every done to-do whose tests passed and that was never tested: tested.
  5. Work the test pass turns up becomes to-dos: build them (1) and test again, until a test pass turns up nothing new.
e2e

3. Test as a real user

When all the area's to-dos are done and tested:

  1. Test each to-do as a real user, in a real user scenario: what the person does, from where they start to what they see at the end; not just its exit check. To-dos with the same story share one end-to-end test.
  2. Mark every to-do that test covers: e2e tested.
  3. Whatever fails becomes a to-do: build it (1), test it (2) and test it as a real user again.

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).

Design S · /sijav-clauder:rules design

No design rules yet.

The loop

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.

Claude finishes a reply Is there a .stop file? no Does the project have a law file? yes Is this the loop's own session? yes Did the reply end with the finish promise? no Has the reply counter hit its cap? no The stop is blocked the law comes back as the next prompt Claude works on it; this runs again The session may stop yes Paused, for every sessiononly when you ask for a pause no No loop in this projectthe hook does nothing no Any other session stops normallyit never gets the law yes The loop is finishedonly when all of its work is done yes The cap is reachedset in the law; rarely reached
What a project's Stop hook checks after every reply, in this order. Every "may stop" exit ends the loop for that reply; only the session that started the loop ever gets the law back.

Start

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.

Areas

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.

Pause

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.

Finish

The reply ends with the law's finish promise only when all work is closed: no open, parked or failing items left.

The roast

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.

CLAUDE CODEX THE ROAST TOOL JEV Runs the roaston the plan, before building Reads the plan and the codeframes 2 to 5 questions Keeps code away from jevadds your critical question code found: back to codex once Judges every questionin one batch too long: codex shortens it once limit: 32k tokens for the state plus the longest question Writes its readingfailing scenarios, findings Keeps a record of the runnever overwritten Decides each findingthe number is only an alarm
One plan roast. Jev only ever sees logic in plain words: the plan's steps and reasons, the facts codex checked, and what you asked for in your own words. Code stays with codex and Claude.

Reading a roast

What a replay on 12 past plans showed

Old judge-only checkCodex aloneCodex with jev
Real problems named, of 18045
False objections31411 to 12
Critical call right, of 12776
Time per plan0.4 s40 s82 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.

Codex

Search and research

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.

CLAUDE AND YOU CODEX, THINKING CODEX ON THE WEB THE CHECK Asks the questionwith why, and its limits Plans, asks what is unclear3, 5 or 7 sub-questions You answer and approveedit the plan if you like Searches each, side by sidelink, date, exact quote Finds the gapswhat is missing or disputed Searches the follow-upsup to 3 a round deep: gaps and follow-ups again Writes the report onceevery claim cites a quote Finds each quote on its pagethe page, fetched afresh jev judges each quotedoes it support its claim? Reads the checkunconfirmed stays unconfirmed
One research run at standard depth. It stops after the plan so you can answer codex's questions and approve the plan. Each search is its own fresh codex conversation, so they run side by side, and every step is saved, so a run that stops resumes where it stopped.

The board

What a project adds

The bundle holds none of these; each project keeps its own, inside its .claude folder.

Set up codex and jev

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.

codex

  1. Install the codex command line: npm install -g @openai/codex.
  2. Sign in once, yourself: run codex in a terminal and follow its sign-in. The skills never sign in for you and hold no codex token.
  3. Check it: 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.

jev (TypeSafe)

  1. Get an API key from TypeSafe (docs.typesafe.ai).
  2. Save it in a file of its own, outside the plugin's folder: Claude Code copies an installed plugin into its own cache, files and all.
  3. Install the library into the Python that runs the skills, the python on your PATH: python -m pip install typesafe-sdk. Check it with python -c "import typesafe_sdk", which prints nothing when it works.
  4. Point the skills at the key: set SIJAV_JEV_KEY_FILE to the key file's full path. Without it, the roast reads TYPESAFE_API_KEY.
  5. Check it end to end: run one roast (/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.

Where the settings go

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.

Install

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 same skills on Codex

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.

You ask, approve, decide Codex runs the work plans and keeps the records follows the board's next pick decides each finding Codex's own agents search on luna, research on astra, prose and logic on 6.1 sol Claude Opus 5.5, through claude_session.py writes the code and its tests, reviews code jev, through jev.py judges code-free questions and each citation The helpers quote checks, the loop's hooks, the board tools
Who does what on Codex. Codex never writes or reviews code; Claude does, through its helper. Jev only ever sees logic in plain words.
SkillWhat it doesWhen it loadsHow you call it
rulesThe 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-roundThe 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
agentsHands 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
searchOne 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
researchDeep 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
roastFailing 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
loopStarts 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
todoThe project's board, the same small database, and its read-only dashboard in the browser.In projects that have a board$sijav-codex-todo

The loop on Codex

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.

Codex finishes a turn Is a loop armed here or above? yes Is it the claimed session? yes Is the loop active? yes Did the reply end with the promise? no Is there a pause file? no Has the counter hit its cap? no The stop is blocked the law comes back as the next prompt Codex works on it; this runs again The session may stop no Not armed herethe hook does nothing no Another session or a spawned agentstops normally; it never gets the law no Paused, stopped or finishedset by the loop's own commands yes The loop is completeonly the reply's last line counts yes Paused, Claude's loop toothe shared .stop file yes The cap is reachedthis is not completion
What Codex's Stop hook checks after every turn, in this order. After a compaction, the SessionStart hook gives the whole law back before the next request, to the claimed session only.

Working with it

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.

Claude as the coder

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.

The board's dashboard

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.

The board .claude/todo.db, or --db read only each change The dashboard Node, on this machine only pushed live Your browser report, board, changes, Relax a throwaway copy The board tool's own picker todo.py or the loop's tool, on a copy the next order kept Change history your user cache folder
Where the dashboard's data comes from. The board is only ever read; the next order is the board tool's own, worked out on a copy; the change history stays in your user folder.

How to work with it

  1. It needs Node 22.16 or newer on the 22 line, or Node 24 or newer, and Python 3.9 or newer for the board tool's order.
  2. Install its one dependency once, inside its own folder: npm ci --omit=dev --prefix "<todo skill>/dashboard". The Codex setup does the same with --dashboard-deps.
  3. Start it on a project: 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.
  4. Read it. Full report is the overview. Full board lists the tasks in the board tool's own next order. Changes shows each change with its fields before and after. Database records shows every stored row. Click a task for its full record. Relax mode is a calm full-screen view of the current and the next work. Long text and long lists of ids are folded: Show more opens them, Show less folds them again.
  5. It loads what you look at: each list shows five cards and loads five more as you scroll, and a task's full record loads when you open it, so even a board of hundreds of items opens at once.
  6. Leave it open: it updates by itself when the board changes, with no reload. Pause holds the view; Export full data saves everything as one file.
  7. To show it on a site as well, add --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.
  8. Stop it with Ctrl+C.

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.

Claude and Codex on one project

Both plugins can work on the same project. They share the project's files and its law, and keep their own records apart.

In the projectClaude (sijav-clauder)Codex (sijav-codex)
The board, .claude/todo.dbthe board toolsthe same tools, byte for byte, and the dashboard
The rules, .claude/rulesetsread by the rules skillread by the rules skill
The loop's lawkeeps its session and counter in the law's front matteronly reads the law; its own state is in .codex/sijav-loop
The pause file, .stoppauses Claude's looppauses Codex's loop too
Recordsunder .claude: codex sessions, roastsunder .codex: agents, Claude calls, roasts, research, the loop

Checked offline on a throwaway project shared by both: the two board tools give the same next pick; Codex takes the promise from the Claude law, sends back the law's body without its front matter and never writes the law; the shared pause file holds it; and clearing that file needs both flags.

Install on Codex

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.

What it needs

Steps

  1. Clone the repository.
  2. Check the package; this changes nothing: python "<clone>/Sijav-Codex/tools/sijav_codex_setup.py".
  3. Install by adding --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.
  4. If you like, copy the example agent profiles from 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.
  5. Before the first loop, trust the plugin's two hooks in Codex's /hooks screen, one handler at a time.
  6. After pulling a newer version, run codex plugin add sijav-codex@sijav-codex-local again.

Switches

Set these before starting Codex. off, 0, false or no switches a service off; no setting leaves it on.

Changing a rule

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.

  1. Find the rule by its ID (G1, D2, or a project rule's ID) and its file.
  2. Read its entries in that folder's log.md.
  3. If the change would bring back a problem recorded there, or goes against the owner's words, ask the owner first. Otherwise go ahead.
  4. Back up the file first: copy it into a dated backup folder with a .bak ending, outside any .claude folder, so the copy can never load as a rule.
  5. Edit it, and delete the old rule in the same edit. A rule lives in one place only.
  6. Add a log entry: date, rule ID, old text, new text, the owner's words and the evidence.

Rules do not go into CLAUDE.md or memory files: those load into every session.