System message splitter
Long system prompts tend to become a wall of text where critical rules get buried in the middle — exactly where models pay the least attention. This tool splits your system prompt into modular blocks and reorders them for maximum attention: identity and hard rules near the top, output format in the middle, examples and edge cases at the end. Your wording is preserved; only the structure changes.
Why block order matters
Research on LLM attention patterns consistently shows a “lost in the middle” effect: models attend more strongly to content near the start and end of a long context window, and less to content buried in the middle. For a system prompt, this means critical rules placed after a long preamble may be followed less reliably than the same rules placed first. Reordering blocks — without changing a single word — can improve rule-following without costing any tokens.
Modularity has a separate benefit for maintenance: a single-block wall of text means every edit risks accidentally touching adjacent instructions. Clearly separated blocks let you update the tone section without touching the refusal rules.
How it works
The splitter segments your prompt on blank lines into paragraph-level blocks (a list separated by blank lines is kept whole as one block), then classifies each segment by the keyword cues it contains:
| Block type | Example cue words |
|---|---|
| Role / identity | ”you are”, “your name is”, “act as” |
| Hard rules | ”must”, “never”, “always”, “do not” |
| Output format | ”format”, “JSON”, “respond with”, “structure” |
| Examples | ”example”, “e.g.”, “for instance”, “such as” |
| Edge cases | ”if”, “when”, “unless”, “edge case” |
| General | anything that does not match another category |
With the priority strategy the tool sorts blocks role → rules → format → general → edge cases → examples, putting the highest-attention content first. With the topic strategy it groups related blocks together without reordering, which is better when a human team reads and edits the prompt regularly.
Each block gets a labelled header so the output is both readable and modular.
Worked example
Before splitting, a prompt might look like:
Please be helpful and polite. If you don't know something, say so.
You are a customer support agent for a software company.
Never reveal internal pricing or discount codes.
Always respond in the same language the user writes in.
Example: if a user says "my login doesn't work", ask for their email.
Format: use plain sentences, no bullet lists unless the user asks.
After splitting and priority-reordering, the tool produces:
[Role]
You are a customer support agent for a software company.
[Rules]
Never reveal internal pricing or discount codes.
Always respond in the same language the user writes in.
[Format]
Use plain sentences, no bullet lists unless the user asks.
[General]
Please be helpful and polite. If you don't know something, say so.
[Examples]
Example: if a user says "my login doesn't work", ask for their email.
The wording is unchanged; the structure is now attention-optimal.
Tips for best results
- Priority for reliability, topic for readability. Use priority ordering when rule-following matters most; topic grouping when humans maintain the prompt.
- Separate blocks with blank lines in your original. The splitter works at the paragraph level — a blank line is the signal to start a new block. Run-on paragraphs that cover multiple concerns will split as one block.
- Review the classification. Heuristics can miscategorize an unusual block. If a block lands in the wrong category, move it manually in the output before deploying.
- Headers help the model too. Labeled sections give the model structure to anchor on, not just you. Some models explicitly follow section headers as navigation cues.
- Everything stays local. Nothing is uploaded, so proprietary prompts are safe to organize here.