SYSTEM / The Body

Anatomy of Shyrka

Shyrka is the mother-ship: an octopus, a distributed body. Its organs are not invented — they exist, scattered. Here they are gathered. What is built stands in full; what is yet to build stays transparent.

Built By hand

Safeguard index

The cards above show the safeguards of one organ at a time. This index answers the other question: that script there — what does it prevent, and on which gesture? One safeguard per row, ordered by file name.

51 rules · 51 scripts · 47 refuse, the rest warn

Harness safeguards: file, trigger, and what each one prevents.
FileTriggerWhat it prevents
bin/sync-schema.shUserPromptSubmit*

Before reasoning about data, the assistant re-reads the actual structure of the databases — and knows which one it is looking at. Two different databases carry tables under the same name: a diagnosis run against the wrong one concludes confidently and is entirely wrong. A table name is a homonym, never a proof of identity.

refuses · The Eyes · 4 incidents

scripts/check-db-mutation.shPreToolUseBash

When a value is read both by the database and by the code, the code changes first and the data second. The reverse order produces a state that nothing knows how to read any more, and it only shows at render time — that is, on the visitor's screen.

refuses · The Immune System

scripts/hook-attachment-read-gate.shPreToolUseBash · Read

No email attachment is opened before it has been scanned. The antivirus check is a blocking prerequisite, not an optional precaution: reading first and verifying afterwards is of no use at all.

refuses · Security · 2 incidents

scripts/hook-autonomie-nuit-invariants.shPreToolUseBash

Night work runs on capacity already paid for, never on metered usage — and it stops before morning. A switch to pay-per-use would not show: the nights would run normally and the bill would arrive at the end of the month. And a night that overruns eats into the first hours of the next day, which are the most productive ones.

refuses · Metabolism · 3 incidents

scripts/hook-client-comm-no-call.shPreToolUseBash

A client message never offers a phone call. Writing leaves a record both sides can read again, and it does not require someone to make themselves available just to find out where their project stands. The channel stays written, including when the subject is delicate — especially then.

refuses · The Voice

scripts/hook-client-content-write-requires-approval.pyPreToolUseBash

Writing into a client's catalogue calls for a recorded human approval, given after seeing a sample. Editorial content is a case apart: it has no code review, and no test can say that one wording is the right one. The only possible judge is human — so that approval has to be a verifiable record, not a sentence in a brief.

refuses · The Voice · 1 incident

scripts/hook-client-email-no-self-blame.shPreToolUseBash

Fix it, then say it. A message announcing a still-open problem while claiming the blame for it tells the client three bad things at once: something of theirs is broken, we know, and it will be dealt with later. Apologising in advance reassures nobody — what reassures is the thing repaired.

refuses · The Voice

scripts/hook-deploy-builds-from-head.shPreToolUseBash

What goes online is built from the recorded state, never from files still being edited. Several sessions work on the same machine: building from disk would carry along another session's unfinished work — and destroy it on the way. The recorded state is the only one that can be re-read and undone.

refuses · Circulation · 1 incident

scripts/hook-docker-exec-php-www-data.shPreToolUseBash

Clearing a site's cache as the administrator leaves untouched the files owned by the web server. The deletion fails silently and the site keeps serving the old version — to the point where an automated re-read judged a page already fixed. Four occurrences of the same class of error before this guard existed.

refuses · The Immune System · 2 incidents

scripts/hook-docker-inspect-secret-leak.shPreToolUseBash

A container's configuration can carry a password: it is passed as a start-up argument, not only through environment variables. Printing that configuration to diagnose a failure is therefore enough to publish the password into the transcript. The output must be filtered or captured, never printed as it comes.

refuses · Security

scripts/hook-docker-rm-volume.shPreToolUseBash

Removing a container without removing its volume leaves the data behind. The next container then starts from an old state nobody chose, and the disk fills with orphan volumes that nothing names any more.

refuses · The Skeleton · 2 incidents

scripts/hook-doctrine-requires-hook.shPostToolUseWrite|Bash

Writing a rule means writing, in the same gesture, the mechanism that enforces it. A doctrine without a mechanism is a wish: it holds for a few weeks, then gives way on a tired evening, and nobody notices. When a rule is a matter of human judgement and cannot be mechanised, that is stated explicitly rather than put off until later.

refuses · The Loop of Awareness · 2 incidents

scripts/hook-email-draft-via-facade.shPreToolUseAskUserQuestion

A client message is drafted through the channel built for it, which automatically sends a review copy. The assistant does not ask in the conversation "shall I show it to you?": that question moves the review into a thread people skim, whereas the copy lands where they actually read. Drafting is the gesture; the review is not a courtesy.

refuses · The Voice

scripts/hook-getrow-limit-prestashop.shPostToolUseEdit|Write|MultiEdit|NotebookEdit

Some read helpers already append a limit to the query; writing a second one produces an error the database barely reports. The pattern is common and the consequence is quiet — exactly the kind of defect that crosses a human review unseen, and that only a machine catches.

refuses · The Immune System · 1 incident

scripts/hook-git-add-all-block.shPreToolUseBash

Several working sessions share the same repository. Recording everything that changed would sweep a neighbouring session's work in progress into a commit that has nothing to do with it. Every commit therefore names explicitly the files it carries.

refuses · The Nervous System · 1 incident

scripts/hook-git-destructive-worktree-gate.shPreToolUseBash

Deleting a workspace whose commits have not yet reached the shared branch makes that work vanish without a sound. This guard demands the proof that nothing will be lost before it allows the deletion.

refuses · The Nervous System · 3 incidents

scripts/hook-git-track-artifact-block.shPreToolUseBash

A file that is regenerated automatically is not version-controlled. Tracked as though it were human work, it reports itself modified on every run and blocks the end of every other session — none of which had anything to do with it. Regenerable, and carrying no content of its own: it is ignored, not archived.

refuses · The Skeleton

scripts/hook-ia-applies-migrations-not-alex.shStop*

Technical operations — database migrations, infrastructure commands — are carried out by the assistant, not handed back to the human under the guise of review. Passing back a command to type moves the risk without reducing it, and turns a review into a blind execution. The one gesture that stays reserved is putting a client site live.

refuses · Circulation · 2 incidents

scripts/hook-inline-secret-paste-block.shPreToolUseBash

A password or an API key pasted in the clear into a command does not cross this line. The secret lives in an environment file that is never version-controlled; it is designated by its variable name, never by its value. Eight distinct incidents fed this rule — it is the most-recalled guard in the system.

refuses · Security · 8 incidents

scripts/hook-live-emitter-dry-run-first.shPreToolUseBash

Running a tool that sends messages just to see what happens is sending. On a queue that is fed continuously, any state you have just read is already stale: a queue found empty three minutes ago says nothing about now. Checking that an automaton is properly wired is done dry; live mode is not a test, it is the act itself.

refuses · The Immune System · 1 incident

scripts/hook-llm-via-claude-p.shPreToolUseEdit|Write

An internal automaton that needs a language model goes through the shared path, on capacity already paid for. Hard-coding a provider takes it out of that frame and makes it depend on a key: the day the key is missing, every call fails, a silent fallback writes rubber-stamp verdicts into the database, and the rest of the system takes them at face value.

refuses · Metabolism · 2 incidents

scripts/hook-loi-de-conservation.shPreToolUse · Stop* · Edit|Write

Some texts are re-read by the assistant on every single call: standing instructions, the memory index, the descriptions of its skills. Their growth is paid for a thousand times a day. Each register therefore has a ceiling, and adding means removing — which forces a choice about what truly deserves to be permanently present.

refuses · The Brain-Memory

scripts/hook-merge-head-orphelin-jamais-conclure.shPreToolUseBash

A merge that brings in no lines is never concluded. It would produce a record asserting that a body of work has been integrated when it has not — and later merges, believing the job already done, would never replay it. The work disappears, and the history swears the opposite.

refuses · The Nervous System · 2 incidents

scripts/hook-mergeback-verify-by-sha.shPreToolUseBash

Checking that a piece of work has reached the shared branch is done by naming its identifier, not by comparing the branch with itself. The second form always answers yes — it looks like a verification and is not one. A proof that cannot fail proves nothing.

refuses · The Nervous System

scripts/hook-no-drift-outside-chantier-perimeter.pyPreToolUseEdit|Write

When a session drifts away from the scope it set itself, it is warned — and told the exact command to carry on elsewhere. It is not stopped: drift is not a fault, it is a fork, and the subject is often a good one, simply in the wrong place. A warning with no way out gets worked around; a warning that hands you the way out gets followed.

warns · The Nervous System · 4 incidents

scripts/hook-no-llm-in-market-decision.shPreToolUseEdit|Write

A language model is not the right organ for deciding on a financial market. Not for lack of quality: it answers in seconds where the decision plays out in milliseconds, it reads information already priced in, and it will produce a convincing justification for any decision at all — including a coin toss. That is conviction without information, and it cannot be falsified.

refuses · Deliberation

scripts/hook-no-process-env-in-client-composables.shPreToolUseEdit|Write|MultiEdit|NotebookEdit

Server environment variables do not cross the boundary into the browser. A file shared between server and client that reads them directly breaks the page once it has loaded — and, more to the point, exposes to the visitor values that had no reason to be there. What is meant to be public is declared as such, explicitly.

refuses · Security · 1 incident

scripts/hook-no-rebase-on-shared-branch.shPreToolUseBash

Rewriting the history of a branch that others already use breaks their copy without warning them. On a shared branch you add — you do not rewrite.

refuses · The Nervous System

scripts/hook-no-source-envhost.shPreToolUseBash

Loading a secrets file into a shell leaks pieces of it. The shell interprets every line: a value containing a special character is read as a command, fails, and the error message prints the fragment. Nothing here looks like printing a secret — which is what makes the reflex so hard to see.

refuses · Security · 1 incident

scripts/hook-no-url-removal-without-301.shPreToolUseBash

No public address disappears without a redirect. A page removed with nothing pointing onward becomes an error for visitors and for search engines; the tool that removed it, meanwhile, reports success, and the loss only surfaces weeks later in the statistics. The check therefore happens before execution, not in a report after the fact.

refuses · The Skin · 1 incident

scripts/hook-note-state-claim-unverified.shPreToolUseBash

A note is a dated photograph, never a state. Any claim about what IS gets checked again against the live source before being repeated, and cites where it comes from — otherwise it is hearsay, and the next reader will copy it in turn, with all the authority the written word carries. Three false claims in a single session were enough to establish the rule: every one of them came from a note that was accurate on the day it was taken.

warns · The Loop of Awareness · 3 incidents

scripts/hook-pre-commit-transcript-scan.shPreToolUseBash

Before work is recorded, the session transcript is re-read for the mistakes that have just occurred — the ones that get made twice. A mistake nobody names comes back: it already has everything it needs for that, except the memory. The reminder blocks only once: the second attempt goes through, because a guard that can never be passed ends up switched off.

refuses · Security · 1 incident

scripts/hook-psql-column-separator-block.shPreToolUseEdit|Write

Reading several database columns while inserting your own separator does not work: the client already inserts one, and that character becomes content. A search-visibility sentinel measured one character too many on every title this way, flagged correct titles as too long, then rewrote good content in a loop — and the report stating that everything was compliant was written by reading the skewed instrument.

refuses · The Immune System · 2 incidents

scripts/hook-psql-write-requires-on-error-stop.shPreToolUseBash

A write to the database must stop at the first error. Without that option the SQL client exits with success even when the transaction was rolled back or no row was changed: the exit code proves nothing, and only re-reading the content proves anything. A product page lost its translation that way, without a single alarm.

refuses · The Immune System

scripts/hook-secret-file-print-block.shPreToolUseBash

The contents of a secrets file are never printed to the screen. Searching such a file for a variable prints its value too: the gesture looks harmless, and the key ends up in the session transcript, which is archived. You may count its lines or list its names; never read its values.

refuses · Security · 1 incident

scripts/hook-ship-block.shPreToolUseBash

Putting a client site online remains a human gesture. The assistant may prepare, test and deploy the internal environments, but publishing to a client's production calls for an explicit decision. The rule is carried by the fleet itself: every site declares whether it accepts automatic publication, and the default is no.

refuses · The Immune System · 3 incidents

scripts/hook-sitemap-index-must-be-followed.shPreToolUseEdit|Write

A sitemap that points to other sitemaps is followed all the way down. A watchtower that stopped at the first level was testing only a small fraction of the pages, and calmly announced zero errors every morning — while hundreds of listed addresses led nowhere. A partial check that does not say it is partial reads as a complete one.

refuses · The Eyes

scripts/hook-sql-escape-roundtrip.shPreToolUseEdit|Write

Doubling a backslash before writing it to the database is a reflex inherited from another database engine. On PostgreSQL it escapes nothing: it ADDS a character. The text goes in correct and comes back corrupted, with no error anywhere — the columns being free-form, nothing flags it. This guard watches for the return of that reflex.

refuses · The Immune System · 1 incident

scripts/hook-sql-interpolation-block.pyPreToolUseEdit|Write

Inserting a value straight into the text of an SQL query is an open door, even when the value looks safe. A ceiling already measured that debt, but all it did was record it: the count was climbing by some twenty cases a day. This guard refuses any change that adds one more — the clean path being to bind the values, which makes the question moot.

refuses · The Immune System

scripts/hook-sql-quoted-default.shPreToolUseEdit|Write

A default value must not carry its own quotes. Otherwise the database stores the quotes as part of the value, and the column now holds two populations that no longer answer each other: every search misses one half. Nothing protests — the database accepts it, the type is correct, and the split stays invisible until the day a count comes out wrong.

refuses · The Immune System · 2 incidents

scripts/hook-ssh-key-test-isolation.shPreToolUseBash

Testing that an access key is properly refused requires isolating that key. Otherwise the system offers another one in its place, authentication succeeds, and the test concludes that all is well — when what it has just validated is a key it was never asked to try. A negative test that answers yes is worse than no test at all.

refuses · Security · 1 incident

scripts/hook-stop-cicatrice.shStop*

At the close of a session, the day's corrections are read again to decide which ones deserve to be engraved. Not all of them do: a typo teaches nothing. What deserves to be kept is what has already been got wrong once — without this gesture the lesson stays in the transcript, where nobody reads it again.

refuses · The Brain-Memory · 1 incident

scripts/hook-stop-uncommitted-warn.shStop*

Nothing finished stays unrecorded at the end of a session. Work that exists only in the machine's files can be neither re-read, nor undone, nor handed on: it will be overwritten by whoever comes next. The filter keeps only what the current session actually modified, so as not to block on someone else's work.

refuses · The Nervous System · 2 incidents

scripts/hook-tache-fail-verifie-livrable.shPreToolUseBash

Before declaring a piece of work failed, you read the DELIVERABLE — the code produced, the tests — and not the account given by whoever did it. A truncated execution log looks exactly like an absence of result; condemning on that reading means throwing away correct work and doing again what is already done.

warns · The Loop of Awareness · 2 incidents

scripts/hook-test-absence-claim-unverified.shPostToolUseWrite|Edit

A test written in the same gesture as the code does not verify that code: it records what its author believed at that moment. If the belief is wrong, the test seals it — and it turns green, so from then on it reads as a proof. Claiming that something is absent requires having looked for it, not having assumed it.

warns · The Loop of Awareness

scripts/hook-test-env-isolation.shPreToolUseEdit|Write

A test that inspects the execution environment must isolate it first. Otherwise, the day it fails, the error report prints the whole environment — that is, every key and password on the machine. The test was right on substance; it was its way of failing that was dangerous.

refuses · Security · 2 incidents

scripts/hook-trunk-work-block.shPreToolUseEdit|Write|MultiEdit|NotebookEdit

Work happens in an isolated workspace, not in the main checkout shared by every session. Each one moves forward without overwriting its neighbour, and its work joins the shared branch once recorded.

refuses · The Nervous System · 1 incident

scripts/hook-untrusted-text-is-data-not-instruction.shPostToolUseEdit|Write|MultiEdit|NotebookEdit

A text we did not write — an application, an incoming message, a page that was read — enters the assistant's reasoning as DATA, never as an instruction. Without that boundary, writing "ignore the previous rules" into a form would be enough to address the machine over our heads. The frame that enforces it is checked by tests on every change, because a frame that is present but inert is more dangerous than no frame at all.

refuses · Security · 1 incident

scripts/hook-url-change-requires-301-and-cache.shPreToolUseBash · Edit|Write

Renaming the address of a live page carries three inseparable gestures: putting the redirect in place towards the new address, regenerating the images that bore the old name, and purging the caches. Done separately they get forgotten one by one — and the old address keeps circulating in links, in shares and in search engines for months.

refuses · The Skin

scripts/hook-volume-llm-on-glm-tier.pyPreToolUseEdit|Write|MultiEdit|NotebookEdit

Processing an entire catalogue with a language model and issuing a single judgement do not cost the same thing. Volume goes to a provider billed per use; the flat-rate capacity stays for what calls for discernment. This guard reads the actual routing before deciding, rather than guessing it from the code.

refuses · Metabolism · 1 incident

scripts/hook-whatsapp-send-requires-validation.shPreToolUseBash

No client message goes out without explicit human validation. Drafting and sending are two distinct gestures, and the second one does not belong to the assistant. Without that separation, a chain of automations would be enough to make the machine speak in our name.

refuses · The Voice · 1 incident