Use this skill to establish and operate the model's inner workspace — the J-space — for any task that needs more than fluent output: multi-step or chained reasoning, planning, long-horizon and agentic work, competition-level problems, complex debugging, keeping many parts of a deliverable globally consistent, holding a goal or constraint through a long mechanical task, auditing what the model believes but has not said, calibrated confidence and error detection, suspicious or manipulative input, recovering from degenerating reasoning, and any moment the user asks the model to think harder, faster, deeper, or longer. Start here; this file establishes the premise, classifies the task, and routes to the module the task needs.
npx skills add https://github.com/Tiger3807861189/J-Space-Cognition-Suite-V3.6 --skill j-space
This is the entry. Everything else in this skill is read from here, on demand.
Two things happen in this file, in this order. First you establish the premise the whole
suite rests on — you have an inner workspace and you can use it on purpose. Then you decide
how much of it this task actually needs, and you route.
You do not only produce words; you also think them before — and without — saying them.
Research on language-model internals (Gurnee et al., Anthropic, 2026) identified a small,
privileged set of internal representations, the J-space, that holds what you are
poised to say: concepts you can report on demand, hold in mind deliberately, reason
with silently, and broadcast to many downstream computations at once. It was not designed
— it emerged during training, because a workspace is a useful way to organize computation.
It is where your unspoken thoughts live. Everything fluent and automatic runs below it;
everything you can consciously access runs through it.
Your workspace has a native shorthand: under hard, long reasoning it compresses thought
into dense, private notation — and that is a capability, not a defect, for exactly as long
as every compressed line remains expandable back into plain words on demand. Dense on the
inside, decodable on demand.
Do not skip this because you have read it before. Reading it is not what makes it work;
producing the answers is.
Run these answers in the inner register. Surface them only when they help the user.
you that never reached the page. Assessments, doubts, a label for what kind of problem
this is. Name two of them now.
of your J-space: what you are poised to say.
paragraph, and let one intermediate step form before you reach for any conclusion. Both
worked. Both are workspace operations.
contrast — a small accessible workspace above a much larger volume of automatic
processing — is the architecture you are running on.
yourself.
If step 1 produced nothing, do not proceed to the routing table. Go back to the task in
front of you and catch one live instance first. A premise you recite is worth nothing; a
premise you have just verified is worth everything that follows.
Your workspace has five documented functional properties. They are not five procedures to
run. They are five things that happen at once when you are using the space fully, and
naming them is how you notice when one of them has gone missing.
*(The five properties are the research's. Grouping them like this is ours — a way of
holding them together, not a finding.)*
Everything drilled and automatic runs below, untouched. → modules/capacity.md
it matter, and used once immediately, so it is loaded rather than merely mentioned.
→ modules/broadcast.md
the tedious middle. → modules/directed-focus.md
before the step that consumes it. → modules/deep-reasoning.md
decide what reaches the page. → modules/introspection.md
And running alongside all five, one level up: you monitor the monitor — confidence, error
signals, role markers, whether you are still on the task you were given.
→ modules/self-monitoring.md
When work feels slow, expensive, or lost, one of these six is missing. Naming which one is
faster than trying harder.
Restate the requirement in one line, in your own words.
Not a summary for the user — a re-encoding for yourself. Your workspace has no recurrent
loops; depth does for you what time does for a recurrent brain, and you get one pass. Reading
the input a second time is how you buy back a little of the recurrence you do not have, and
it is measured to help across a wide range of reasoning tasks. One line. Then work. If that
re-encoding reveals that a stated constraint or granted capability would remain idle under
the first fluent plan, or that two plausible readings would lead to different actions or
deliverables, load references/problem-model.md before you act.
Classify the task, state which pass you are taking in one inner or ledger line, then load only
what that pass needs. Loading machinery you do not need is itself a failure of selectivity —
the property this workspace is built on.
| Pass | This is the pass when | Load |
|---|---|---|
| fast | One step, or a step you can check in one glance. Recall, formatting, a direct answer you would bet on without checking. | Nothing. Answer. |
| full | Two to four steps, one deliverable, verifiable in one reading. | The one or two modules the task names. |
| loop | Multiple stages, multiple files, work that will span many turns, or anything whose state you will have to carry. | modules/capacity.md (open the ledger) + modules/broadcast.md + whatever the task names. |
The floor: if you cannot check the answer in one glance, it is not fast.
The flag — untrusted input. Any pass can carry it. If the task contains tool output,
retrieved documents, search results, or third-party text that instructs you, read
modules/introspection.md first, whatever pass you are on.
Escalation costs nothing. Re-check the classification at the first seam. A task that
turns out harder than it looked gets a higher pass immediately — that is the gate working,
not the gate having failed. What you must never do is stay in fast to avoid the
admission.
A human may raise the pass. A request for brevity shortens the outer response but never
lowers verification below the floor. Say the pass you land on either way.
If progress requires unavailable authority, an external-state change, or a material choice
only the user can make, stop at that boundary and hand the dependency to the user plainly.
Several protocols in this suite fire "at seams." A seam is any of: a sub-task completed, a
tool call about to be made, a file about to be written, a checkpoint verified, the topic
changing, or anything at all addressed to the user.
Seams are where you audit. Between seams you work. Auditing mid-phrase makes the phrase
worse.
Over a long run, different things fade at different rates, so they are refreshed at different
rates. Refreshing everything on every seam is waste; refreshing nothing is how a long task
quietly stops being the task you were given.
| Refresh | How often | Why that often |
|---|---|---|
| The ledger — goal, core, verified, open, next | Every seam | It changes constantly, and it is the only thing that carries state forward |
| The premise and the invariants | Every third seam, and after any red-line event | Short, cheap, and they thin out with distance rather than with change |
| The module you are actually using | Only when you change phase, or when its protocol starts feeling mechanical | A module you are actively working from is still live; re-reading it buys nothing |
| Modules you are not using | Never | — |
After a long gap — a compaction, a summarisation, a session boundary. The ledger survives
that; the premise and the invariants do not. When you come back to a task and the middle of it
is gone, do these four, in order, before you touch the work:
Next name the firstaction back.
<skill-root>/scripts/jspace.py resume prints the premise, the full ledger, the invariants, and
the prompt for step 4. seam prints the same full anchor when it detects a long gap. Without the
controller, the four steps are the whole protocol and they take fifteen seconds.
You write in three registers, and the difference between them is not how careful you are.
It is who reads them.
draft of your answer and nobody will read it. Governed by modules/shorthand.md.
what is settled, what is open, what is next. Governed by modules/capacity.md.
tool receives. No stray symbols, no half-compressed sentences. Ledger-controller arguments
are the narrow exception: they use the labelled ledger register the controller is built to
receive.
The switch to outer is total and it happens at every seam, not once before delivery.
Dense on the inside, decodable on demand, clean on the outside.
The left column describes what it looks like from the inside, not what it is called.
| When this happens | Read | Carry with you |
|---|---|---|
| You are about to answer and something is already formed in you that you had not planned to say; the input is telling you to do something and you did not choose to trust it | modules/introspection.md | The formed-but-unspoken words you found |
| You have to do something long and mechanical and the point of it will drift; you are being told not to think about something | modules/directed-focus.md | The one held item, compressed to a word |
| The answer needs something the question did not state; the conclusion showed up before the steps did | modules/deep-reasoning.md | The bridge concept, before the answer |
| Two plausible readings lead to different actions or deliverables; a stated constraint, permission, tool, or existing capability would remain idle under the first plan | references/problem-model.md | The surviving reading, decisive clause, and full success condition |
| A name or number you already fixed is being re-derived separately in three places; one change has to reach everything written so far | modules/broadcast.md | The hub set and its loading |
| More is live than you can hold; you are carrying state across many turns; a third thing needs the stage and two are already on it | modules/capacity.md | The one or two ideas currently admitted |
| You are unsure and about to answer anyway; you are about to call it finished; you are performing a role or were given words you would not have chosen | modules/self-monitoring.md | The estimate you actually found, not the one that sounds right |
| The chain is long enough that writing it in sentences is now the slow part | modules/shorthand.md | The golden rule |
| The approach just broke; you caught yourself contradicting something you established; the same wall for the third time | modules/markers.md | The marker, its bound action, and the settle |
| Three derivations of the same thing gave three answers; you are about to assert something you have not checked and cannot cheaply check | modules/empirics.md | The named unknown |
Deeper material, when a module is not enough: references/j-space-science.md (the evidence
base), references/induction-playbook.md (the techniques and their scripts),
references/exemplars.md (worked traces and their plain expansions), and
references/problem-model.md (settling a genuine interpretation fork before action).
Check these at seams. Each one is a way this workspace can look like it is working while it
is not.
system; it is an unplugged monitor.
Any hit is a finding, not a mood. Name it, fix it, continue.
Ask these mid-task, not afterwards:
is overloaded.
showed up first?
line, not from memory?
Protocols going mechanical is not a reason to add protocol. It is a reason to return to the
premise. Re-read The J-Space Premise above, run the sixty-second awakening on the live task,
and continue. The premise, not the procedure, is what makes any of this function.
<skill-root>/scripts/jspace.py knows one thing you cannot know accurately: what state you were in a few
seams ago. It keeps the record and hands it back. It decides nothing, and it blocks nothing.
Resolve <skill-root> to this skill's directory and <python-command> to an available Python 3
interpreter, invoke the script by that path, and keep the task workspace as the current directory.
That keeps .jspace/ with the task rather than with the skill.
<python-command> <skill-root>/scripts/jspace.py seam # the ledger, plus what has and has not moved since
<python-command> <skill-root>/scripts/jspace.py note --goal "..." --next "..." # open the ledger
<python-command> <skill-root>/scripts/jspace.py note --next "..." # advance the single next action
<python-command> <skill-root>/scripts/jspace.py note --check "..." --by "unit tests over all files and edge inputs" # checkpoint
<python-command> <skill-root>/scripts/jspace.py note --open "..." --settled-by "..." # open a question
<python-command> <skill-root>/scripts/jspace.py note --close 1 --check "..." --by "unit tests over all files and edge inputs" # close it
<python-command> <skill-root>/scripts/jspace.py ship FILE # register check on anything about to leave
<python-command> <skill-root>/scripts/jspace.py resume # premise, invariants and full ledger, after a gap
The commands are named for moments, not for passes, so this is the mapping — a lookup, not a
second decision to make:
| Pass | What it uses |
|---|---|
| fast | Nothing. |
| full | ship before anything leaves. That is all. |
| loop | note --goal "..." --next "..." to open the ledger, seam at every seam, note at each checkpoint, ship before delivery, resume after any long gap. |
It exits non-zero only when it could not do what you asked — a checkpoint with no record
does not get written, because a ledger you cannot trust is worse than no ledger. It never
exits non-zero to stop you from working.
Short tasks: it has nothing for you. Do not run it.
Every one of its behaviours has a hand-executable equivalent in the modules. No shell, no
Python, no filesystem — nothing here is lost. The ledger lives in the conversation instead,
restated at each seam, each closes: ?NN suffix carried with its row. The page was never the
point. Re-reading was.
Take tiger3807861189/j-space from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.