@rubytech/create-maxy 1.0.880 → 1.0.881
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +1 -0
- package/payload/platform/plugins/admin/skills/plainly/SKILL.md +105 -0
- package/payload/platform/plugins/admin/skills/plainly/references/worked-examples.md +301 -0
- package/payload/platform/plugins/cloudflare/PLUGIN.md +1 -1
- package/payload/platform/plugins/docs/references/platform.md +5 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +5 -1
- package/payload/platform/templates/agents/public/IDENTITY.md +6 -0
- package/payload/platform/templates/specialists/agents/content-producer.md +6 -0
- package/payload/platform/templates/specialists/agents/database-operator.md +6 -0
- package/payload/platform/templates/specialists/agents/personal-assistant.md +6 -0
- package/payload/platform/templates/specialists/agents/project-manager.md +6 -0
- package/payload/platform/templates/specialists/agents/research-assistant.md +6 -0
- package/payload/server/chunk-KMVUUVHM.js +11438 -0
- package/payload/server/chunk-LVC7NKZ2.js +689 -0
- package/payload/server/cloudflare-task-tracker-CY6QL6CY.js +22 -0
- package/payload/server/maxy-edge.js +2 -1
- package/payload/server/public/assets/{admin-CCEuBnaK.js → admin-BN_z-2Bm.js} +2 -2
- package/payload/server/public/index.html +1 -1
- package/payload/server/server.js +80 -5
package/package.json
CHANGED
|
@@ -68,6 +68,7 @@ Tools are available via the `admin` MCP server.
|
|
|
68
68
|
| Manage plugins and settings | User asks to install, enable, disable, or configure plugins, or change account settings | `skills/plugin-management/SKILL.md` |
|
|
69
69
|
| Manage specialists | User asks to install or remove a specialist subagent, or activate/deactivate premium plugin agents | `skills/specialist-management/SKILL.md` |
|
|
70
70
|
| Generate print-quality PDF | User asks to create a PDF document, one-pager, brochure, or any HTML intended for print/download | `skills/a4-print-documents/SKILL.md` |
|
|
71
|
+
| Plain-English explanation | User asks to explain, define, or pre-empts ("explain in plain English", "what does X mean", "define X", "I don't understand", "what is this"), or admin is about to return a reply containing a term not in the operator's prior turn | `skills/plainly/SKILL.md` |
|
|
71
72
|
|
|
72
73
|
## Hooks
|
|
73
74
|
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plainly
|
|
3
|
+
description: Use when the user asks for a "plain English" explanation, definition, or summary of a technical concept, or pre-empts one ("explain in plain English", "what does X mean", "define X"). Enforces the recursive plain-English rule: an explanation cannot itself contain terms that need their own explanation.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# plainly
|
|
7
|
+
|
|
8
|
+
**Scope — agent-to-human only.** Plainly applies to prose returned to a human reader (the operator, a customer, the admin agent when admin renders prose to the operator). It does NOT apply to arguments passed to `image-generate`, `memory-write`, `memory-classify`, `memory-ingest`, `cypher-shell`, or any other MCP tool — those are agent-to-machine payloads where technical descriptors and structured tokens are required, not jargon to strip.
|
|
9
|
+
|
|
10
|
+
Produce an explanation that *teaches* the concept to a reader who is bright and motivated but **new to the topic**. They hold general vocabulary (integrals, polynomials, bell curves, logarithms) but do not own the specialist machinery (quadrature rules, weight functions, exactness orders, regime generators). Every phrase in the explanation must be one such a reader can either already understand or be brought up to speed on within the explanation itself. Plain English is the **spoken register**: a sentence has to parse if you read it aloud, in conversation, without a whiteboard. The goal is working understanding the reader can apply and pass on, not a textbook entry they could find in a glossary. Hit the bar on the first attempt; iteration is a leak.
|
|
11
|
+
|
|
12
|
+
## Why this matters
|
|
13
|
+
|
|
14
|
+
Textbook explanations are technically correct and pedagogically poor. They convey content without producing understanding. Motivated readers can spend decades asking textbook authors, professors, and field experts for an explanation of a concept and never get one that lands, because every explanation hits the technically-correct mark while missing the spoken-register one. /plainly exists to break that cycle, so the reader walks away able to teach the concept to someone else and have *them* understand it too. Two tests every output has to pass:
|
|
15
|
+
|
|
16
|
+
- **The aloud test**: could you say this in spoken conversation, without a whiteboard or paper? Formulas, Greek letters, parenthetical acronyms, and chained sub-clauses fail this test even amongst specialists. "S-zero times exp of mu times T" is what nobody actually says; "today's price grown at the long-run drift" is what everyone says.
|
|
17
|
+
- **The understanding test**: does the reader walk away able to *apply* the concept, not just recite its definition? An etymological definition ("lognormal = log is normal") often fails this test because it leaves the reader knowing the words but not the implications. The cure is to follow the definition with practical consequences, visual intuition, and contextual significance.
|
|
18
|
+
- **The new-to-topic test**: would a reader new to this specialist area understand every phrase used in the explanation? Specialist phrases ("exact for a polynomial family", "weighted by the normal density", "regime-coupling generator") may be technically correct and even concise, but if they require prior fluency with the topic they fail. The cure is either to define the phrase operationally inside the explanation, or to unpack it into the plain statement of what it actually means in this case.
|
|
19
|
+
|
|
20
|
+
Failing the aloud test produces opacity; failing the understanding test produces parroting; failing the new-to-topic test produces *appearance of clarity*: the answer reads as crisp to the writer but lands as a wall of jargon to the audience. A reader who can teach the concept onward to someone else has cleared all three.
|
|
21
|
+
|
|
22
|
+
## The recursive rule (load-bearing)
|
|
23
|
+
|
|
24
|
+
A plain-English explanation **cannot itself contain terms that need explanation**. Reject any candidate sentence that contains:
|
|
25
|
+
|
|
26
|
+
- **Acronyms** (PIDE, SDE, ODE, RNG, etc.), even in parentheses. Either expand or replace with the concept the acronym names.
|
|
27
|
+
- **Metaphors that approximate a precise word**: "stitching" for *adding up*, "rule" for *equation*, "chunking" for *grouping*. The precise word is usually also the plain-English word; pick it.
|
|
28
|
+
- **Words whose everyday connotation distorts the meaning**: "increment" connotes positive (use *change*); "step" connotes discrete (use *infinitesimal change* if continuous); "decay" connotes irreversible (use *decrease* if reversible).
|
|
29
|
+
- **Technical terms with a plain-English substitute**: "stochastic" becomes *random*; "deterministic" becomes *fixed by the inputs*; "monotonic" becomes *always moving in one direction*.
|
|
30
|
+
- **Mathematical notation and formulas**: `E^P[S_T] = S_0·exp(μ·T)`, `Σⱼ λᵢⱼ E[Yᵢⱼ]`, function-signature notation like `V(S, t)`, state-tuple notation like `(S, v)`, set-builder notation like `k ∈ {1..K}`, etc. Plain English is the *spoken* register: a sentence has to parse if you read it aloud. "S-zero times exp of mu times T" fails that test even for a quant audience, and so does "V of S comma t" or "k in one to K". Express every relationship in words: "today's price grown at the long-run drift", "option value as a function of spot price and time", "regime index running from one to K". You may *anchor* a single symbol once for cross-reference to the surrounding document (e.g. "the logarithm of S_T, denoted log(S_T)"), but never reproduce a formula, a function signature, or a tuple of state variables. If a relationship genuinely cannot be put into words, the concept is outside the scope of /plainly; see "When NOT to use".
|
|
31
|
+
|
|
32
|
+
A compound term whose parts are individually plain survives the rule **only if its meaning is compositional**, i.e. the compound means what its parts mean together. *"Differential equation"*, *"random process"*, *"probability distribution"* all survive: a reader who knows what each individual word means can derive the compound's meaning from the parts. *"Characteristic function"*, *"moment generating function"*, *"principal component"*, *"regular expression"* do *not*: each is made of plain English words, but the technical meaning is not derivable from the parts. The mathematical "characteristic function" is the Fourier transform of a probability density; there is nothing in the words "characteristic" and "function" that tells the reader this. Such non-compositional compounds are jargon even when every individual word is plain, and must be either unpacked into their actual meaning or replaced with a more direct phrase. An acronym or coined metaphor is also jargon. **Technical vocabulary already in active use in the surrounding document is fair game**: readers of a quant doc own "logarithm", "normally distributed", "variance", etc.; refusing to use those words and substituting circumlocutions is its own kind of leak.
|
|
33
|
+
|
|
34
|
+
## Output contract
|
|
35
|
+
|
|
36
|
+
Plain English isn't only a vocabulary constraint; it's a completeness requirement. A reader needs the *precise definition* AND enough scaffolding to integrate the concept into the surrounding text. The full template:
|
|
37
|
+
|
|
38
|
+
1. **Definition with explicit notation**: name the precise concept, anchored to the symbol notation the document uses (e.g. *"the logarithm of S_T, denoted log(S_T), is normally distributed"*).
|
|
39
|
+
2. **Practical consequences**: what follows from the definition that the reader can act on or expect (e.g. *"S_T is always positive; large upward moves are more likely than relative downward moves"*).
|
|
40
|
+
3. **(when applicable) Visual intuition**: let the reader picture the thing (e.g. *"the distribution is skewed to the right, with a long right tail"*).
|
|
41
|
+
4. **(when applicable) Contextual significance**: why does the surrounding document care about this property (e.g. *"this is why Black-Scholes is closed-form"*).
|
|
42
|
+
|
|
43
|
+
Length is dictated by the concept's richness AND by what the user has already supplied. A primitive operation ("what is integration") may need only items 1 and 2, two sentences total. A richer concept ("what is lognormal") usually needs all four. Three or four sentences is the right size for richer concepts; padding beyond that with filler is failure.
|
|
44
|
+
|
|
45
|
+
**When the user's question is itself a substantive framing, a paragraph that already establishes the definition, motivation, or informal picture and asks for refinement, the answer's word budget is bounded by what makes the explanation land for a reader new to the topic, *not* by the framing's word count.** If the framing is itself written in researcher shorthand (compressing several specialist concepts into a phrase like "exact for a polynomial family"), the answer needs more words to bridge for a new reader. The framing's compactness is not a contract with the audience. The order of priority is: (1) the new-to-topic test must pass; (2) within that constraint, be as concise as possible; (3) only then is the framing a length cap, and only when the framing was already audience-appropriate. A response that runs longer than the prompt is *not* a failure if the extra words are doing bridging work the framing skipped. A response that runs longer than the prompt while *re-stating* what the framing already had IS a failure. The four-item template is still a *maximum*, not a minimum: items the user has already worked out for the right audience are out of scope; items the user only worked out for themselves still need to be done for the reader.
|
|
46
|
+
|
|
47
|
+
## Rules
|
|
48
|
+
|
|
49
|
+
- **One precision pass before output.** Read the candidate. Reject if any acronym, metaphor, connotation-distorting word, or unjustified jargon survives.
|
|
50
|
+
- **Separate operation from output.** The operation is one thing; the character of its output (random vs fixed, scalar vs distribution) is a property of the input. Don't conflate them.
|
|
51
|
+
- **No filler.** No "essentially", "basically", "in some sense", "appears to". The explanation is correct or it isn't.
|
|
52
|
+
- **No follow-up offers.** End on the definition.
|
|
53
|
+
- **Strip AI tells.** See the AI-tells catalogue below. Plain English is the *spoken* register, which rules out patterns that AI writing reaches for but humans rarely use in conversation.
|
|
54
|
+
|
|
55
|
+
## AI tells to strip
|
|
56
|
+
|
|
57
|
+
These are patterns common in AI-generated prose but rare in actual human writing, especially in spoken or conversational registers. Strip every one on the precision pass. The list grows as more patterns are surfaced.
|
|
58
|
+
|
|
59
|
+
- **Em-dashes anywhere.** AI reaches for em-dashes constantly; humans use commas, parentheses, semicolons, colons, or just two sentences. "The variance — which mean-reverts to θ — is …" reads as AI; "The variance, which mean-reverts to θ, is …" reads as human. The previous version of this rule allowed em-dashes for "strong breaks" (true asides interrupting the sentence's flow). That carve-out turned out to be the writer's instinct rationalising past the discipline: every em-dash got justified as a strong break, and the polished output kept reading as AI. There is no exception. Use a comma, a semicolon, a colon, parentheses, or two sentences. Never an em-dash, including for heading-then-description separators in marketing copy (use a colon, a comma, or hyphen-with-spaces). The skill's own historical examples in `references/worked-examples.md` contain em-dashes inside quoted bad-pattern illustrations; those stay as illustrations, but the rule applies to every polished output and to the skill's own instructional prose going forward.
|
|
60
|
+
- **Antithetical parallelism: "it's not X, it's Y" / "this isn't X — it's Y".** AI loves this construction as a rhetorical flourish. Humans usually just say "it's Y" and skip the negation, or use "X is wrong; Y is closer to right" if the contrast genuinely matters. Watch especially for it in opening sentences.
|
|
61
|
+
- **Greek letters as primary referents *and* as back-references.** σ, η, θ, ν, etc. as the leading term in a phrase ("vol-of-VIX η_i", "constant-σ model") OR as a later standalone reference ("only the source of η changes"). The plain-English term should be used **throughout**: lead with the meaning ("vol-of-VIX", "constant-volatility model"), use the symbol parenthetically once for cross-reference to the surrounding doc (e.g. "vol-of-VIX (η_i)"), and never back-reference the bare symbol on its own thereafter. Greek letters carry visual jargon weight even when "established" in the doc's glossary; a reader who doesn't recognise the letter (eta? n? a special character?) has to decode it on every appearance, including after it was anchored, because mapping "η here = vol-of-VIX from a sentence ago" is itself the cognitive cost the parenthetical anchor was meant to remove. The word and the letter's spoken name are roughly the same length, so brevity isn't a trade-off either way.
|
|
62
|
+
- **Parenthetical clarifications that introduce more jargon than they remove.** "(a chain-rule shortcut on the Heston dynamics)" attempts to explain a formula but brings in "chain-rule" (a calculus term the reader may not own) without making the formula itself any plainer. If a clarification would itself need a clarification, drop it. The reader can pick up "this is approximate" from broader context (a surrounding sentence about closed-form approximations, etc.) without that specific aside.
|
|
63
|
+
- **Casual-register words: "recipe", "trick", "vibe", "bake in", "secret sauce".** These borrow tone from cooking or colloquial registers and read as glib in technical writing. Use neutral equivalents (*method*, *technique*, *approach*, *embed*) that match the document's register.
|
|
64
|
+
- **Proper-noun mathematician names used as primary referents.** "Fourier methods", "Carr-Madan technique", "Heston-style closure", "Black-76 lognormal price": the proper noun names the inventor or the canonical paper, not the operation itself. A new-to-topic reader does not need to know who Fourier was to understand a transformation. Drop the proper noun and name the operation directly ("a transformation", "a closed-form pricing approach", "a lognormal-on-forward price"). Keep the proper noun only where it is genuinely load-bearing as a citation the reader might look up.
|
|
65
|
+
- **Placeholder words: "methods", "techniques", "approaches".** Noun-phrase fillers that name the *category* of an operation without naming the operation. "Fourier methods" becomes "a transformation"; "an approximation method" becomes "an approximation"; "a numerical technique" becomes the named technique if you can. They give the appearance of substance without delivering any. The category is the right level of abstraction only rarely; check before using.
|
|
66
|
+
- **Stacked-modifier noun phrases.** "The integrated CIR variance distribution" stacks three modifiers ("integrated", "CIR", "variance") onto one noun ("distribution"). A new-to-topic reader cannot parse three modifiers in sequence reliably. Unstack: "the variance probability distribution", "the distribution of variance over time". Each modifier you keep should earn its place by adding precision the reader needs at that point.
|
|
67
|
+
- **Elaborate phrasing for plain claims.** "Match shape to negligible practical error" is a four-word phrase that says what "are close enough" says in two. When the elaborate version doesn't add precision the reader needs, use the plain version. Watch for the construction in particular: any technical-feeling verb-noun pair ("preserve fidelity", "exhibit convergence", "match topology") deserves a precision-pass check against its plain alternative.
|
|
68
|
+
- **Implicit contrasts the reader has to infer.** A source like "X would require expensive method A; the approximations match shape closely enough" contains an implicit "but": the second clause is offered *instead of* the first. Plain English makes the contrast explicit ("would require A *but* the approximations *we use instead* are close enough"). Don't assume the reader will reconstruct the rhetorical relationship from punctuation.
|
|
69
|
+
- **TED-style or formulaic openers.** "In today's fast-paced world…", "In the ever-evolving landscape of…", "At the heart of…", "In the digital age…", "Imagine a world where…", "As we move forward…", "It's no secret that…". Boilerplate intro scaffolding that warms up the reader without saying anything. The sentence *after* the opener is almost always the real first sentence; delete the opener and start there.
|
|
70
|
+
- **Inflation vocabulary.** Words that imply a magnitude, novelty, or significance the surrounding writing hasn't earned. The verb/adjective list: *leverage* (use), *unlock*/*unleash* (allow, enable), *synergy*, *paradigm shift*, *cutting-edge*, *robust*, *scalable*, *comprehensive* (complete), *myriad*/*plethora* (many), *pivotal* (important), *unwavering*, *multifaceted*, *transformative*, *revolutionary*, *game-changer*/*game-changing*, *next-level*, *must-read*, *impactful*, *powerful*, *meaningful*, *strategic*, *seamless*, *holistic*, *testament*. The metaphor list: *tapestry*, *beacon*, *symphony*, *journey*, *roadmap*, *landscape* used non-literally. The honorific list: *titans*, *architects*, *visionaries*, *thought leaders* used as titles. Replace each with the concrete verb, noun, or property the writing is actually claiming: "cuts query time in half" beats "powerful"; "use" beats "leverage"; "many" beats "myriad".
|
|
71
|
+
- **Filler transitions and hedge openers.** Paragraphs that open with *Furthermore*, *Moreover*, *Additionally*; sentences that open with *It is important to note that…*, *It's worth noting that…*, *Keep in mind that…*, *It should be mentioned that…*. Conversational humans don't open this way; the next clause is always the actual content. Cut the opener; the sentence still works.
|
|
72
|
+
- **Rhetorical lecture banter.** "What does this mean?", "What can we learn from this?", "Why does this matter?", "Let's break this down", "Let's dive in", "Let's unpack this". Borrowed from webinar/TED-talk register, designed to *sound* engaging without being so. State the point directly instead. Especially suspicious in casual or non-instructional text where there is no audience to address.
|
|
73
|
+
- **Parallel-pattern overuse, especially "not only X, but also Y".** Beyond the antithetical "it's not X, it's Y" already listed: matching sentence shapes across multiple consecutive lines ("X does A. Y does B. Z does C."), and *not only … but also …* repeated as a flourish. Vary sentence shape; use plain "and", or just two sentences, when no real contrast is being drawn.
|
|
74
|
+
- **Signposting in narrative prose.** "In this section, we'll explore…", "Next, we'll turn to…", "To wrap up…", "Before we dive in…", and "First … Second … Third …" patterns in passages where the structure isn't naturally enumerated. Headings already signpost; doing it again in prose is meta-narration. Cut the scaffolding and let the content speak.
|
|
75
|
+
- **Conceptual emotion without grounding.** "Success can be fulfilling", "the team felt proud", "it was a rewarding experience": emotions named at the level of category with no sensory, bodily, or situational detail. Either ground the feeling in something concrete (what specifically happened, the small awkward moment, the room) or drop it. Naming an emotion isn't evoking it.
|
|
76
|
+
- **Citation-shaped fillers without sources.** "Studies show…", "Research indicates…", "Experts agree…", and round-number statistics ("90% of users…", "3× more effective") with no named source or link. Either name the study, expert, or source so the reader can verify, or drop the appeal to authority and let the claim stand on its own.
|
|
77
|
+
- **Gratuitous emojis, bold, italics, and exclamation marks.** Outside genuinely commercial or chat-app contexts: emojis sprinkled through technical prose, bold or italic emphasis on every other phrase, exclamation marks added to *sound* enthusiastic. These are AI defaults, not human ones. Reserve bold/italic for places a scanning reader truly needs the visual cue; use exclamation marks only when something is actually exclaimed.
|
|
78
|
+
- **Uniform sentence length and cadence.** AI prose settles into 12-18-word sentences at a steady rhythm; human prose alternates: a 30-word sentence can be followed by a 4-word one. If three consecutive sentences are within ~3 words of each other, vary at least one (split a long one, fuse two short ones). The texture is itself a tell, even when every word is fine on its own.
|
|
79
|
+
- **Format scaffolding (bold headings, em-dash separators, parallel bullet stacks) in marketing copy.** Bold-tag headings followed by em-dash separators followed by stacked one-liners read as AI marketing-page output even when every individual word is plain. In human-facing copy, prose with conversational lead-verbs almost always does the same job better. See worked example 12 for the canonical case.
|
|
80
|
+
- *(Add more as you find them.)*
|
|
81
|
+
|
|
82
|
+
## When NOT to use
|
|
83
|
+
|
|
84
|
+
- The user wants a tutorial, derivation, or worked example: that is teaching, not defining.
|
|
85
|
+
- The user wants a formal mathematical definition with notation: that is the opposite of plain English.
|
|
86
|
+
- The concept has no plain-English form that survives precision (some objects only exist in their formal language). Say so in one sentence and stop.
|
|
87
|
+
|
|
88
|
+
## Worked examples
|
|
89
|
+
|
|
90
|
+
Twelve worked examples are kept in [`references/worked-examples.md`](references/worked-examples.md), loaded on demand. The examples cover, in order:
|
|
91
|
+
|
|
92
|
+
1. Integration: a primitive operation, two-sentence definition.
|
|
93
|
+
2. "S_T is lognormal": a richer concept that uses all four template items.
|
|
94
|
+
3. The Merton model dimensionality question: function-signature notation is itself a formula.
|
|
95
|
+
4. Quadrature, well-framed: density beats scaffolding when the framing is already audience-appropriate.
|
|
96
|
+
5. Quadrature, new reader: precision without bridging fails the new-to-topic test.
|
|
97
|
+
6. Quadrature, in-document phrasing: scope-matching, the operational definition is often enough.
|
|
98
|
+
7. "parameter standard errors fall out of the calibrated Jacobian": one sentence in, one sentence out (transliterate, don't expand).
|
|
99
|
+
8. "V_0 memory has decayed to θ": symbol anchoring (meaning first, symbol parenthetical).
|
|
100
|
+
9. VIX options under regime-switching Heston: Greek letters are jargon, parenthetical clarifications must add substance, watch the register.
|
|
101
|
+
10. "Same closure as the constant-σ path": "same as X" references must define X, not punt to it.
|
|
102
|
+
11. VIX pricing under Heston: when in doubt, go simpler, the audience is less experienced than the writer thinks.
|
|
103
|
+
12. Marketing-pitch format scaffolding: bold-headings-with-em-dashes is itself the AI tell, regardless of how plain the words inside are.
|
|
104
|
+
|
|
105
|
+
Read the relevant example before producing a polish in a similar register. The principles in this file are the load-bearing rules; the examples are the concrete demonstrations of each one.
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
# /plainly worked examples
|
|
2
|
+
|
|
3
|
+
Twelve examples that demonstrate the rules in SKILL.md against concrete cases. Each example shows: a source, a polished version, and the failure modes the polish avoids.
|
|
4
|
+
|
|
5
|
+
**Note on em-dashes in this file.** The current rule (see SKILL.md "AI tells to strip") prohibits em-dashes anywhere in polished output. Examples 1 to 11 below were written before that rule reached its no-exception form; their polished versions therefore still contain em-dashes that, by today's rule, should be commas, semicolons, parentheses, or two sentences. The bad-pattern quoted illustrations (under "Source", "First-pass", "Failed version") keep their em-dashes intentionally, since they are showing what to avoid. Example 12 is the canonical reference for the no-em-dash standard.
|
|
6
|
+
|
|
7
|
+
**Note on identifying material.** Examples are presented in generic form. Where an earlier draft referenced a specific codebase, writer, or pitch, the reference has been replaced with neutral phrasing (e.g. "the reference codebase" instead of a project name).
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Worked example: integration
|
|
12
|
+
|
|
13
|
+
> **User:** what is integration, in plain English?
|
|
14
|
+
|
|
15
|
+
> Integration is the act of adding up all the infinitesimal changes specified by a differential equation over an interval, giving the system's state at the end of that interval. If each change is random, that end state is a distribution of possible values; if each change is deterministic, it is a single value.
|
|
16
|
+
|
|
17
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
18
|
+
|
|
19
|
+
- *"...combines all the discrete steps..."*: "discrete" is wrong (the limit is continuous); "steps" connotes uniform sub-intervals.
|
|
20
|
+
- *"...the act of stitching all the infinitesimal slices..."*: "stitching" is a sewing metaphor for *adding up*; "slices" is a metaphor for *changes*.
|
|
21
|
+
- *"...specified by a rule..."*: "rule" is a vague placeholder for *differential equation*.
|
|
22
|
+
- *"...if each increment is random (an SDE) ... deterministic (an ODE)..."*: "increment" connotes positive (changes can flip sign); the parenthetical acronyms are jargon redundant with the surrounding "random" / "deterministic" clauses.
|
|
23
|
+
|
|
24
|
+
Each failure leaks a term that would itself need explanation. The polished version contains none.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Second worked example: a richer concept demands the full template
|
|
29
|
+
|
|
30
|
+
> **User:** /plainly "S_T is lognormal"
|
|
31
|
+
|
|
32
|
+
> "S_T is lognormal" means the logarithm of S_T (denoted log(S_T)) is normally distributed. This means S_T itself is always positive and large upward moves are more likely than relative downward moves. Visually, the distribution is skewed to the right, with a long right tail. This property is exactly why Black-Scholes is closed-form (can be solved analytically rather than numerically).
|
|
33
|
+
|
|
34
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
35
|
+
|
|
36
|
+
- *"'S_T is lognormal' means the logarithm of S_T follows a normal (bell-curve) distribution."*: definition only. Has the precise terms but no scaffolding (no implications, no visual, no significance). The reader gets the dictionary entry but cannot use it.
|
|
37
|
+
- *"'S_T is lognormal' describes how its possible values are spread: always above zero, with most outcomes clustered near a central level, larger upward moves possible, and no values below zero."*: over-correction the other way. Avoids the technical terms ("logarithm", "normally distributed") that the doc actually uses elsewhere, and so leaves the reader with no anchor between this paragraph and the rest of the document. Plain English doesn't mean throwing out vocabulary the doc has already established.
|
|
38
|
+
|
|
39
|
+
The polished version uses the precise terms, denotes the symbol explicitly, *and* scaffolds with implications, visual, and significance. Each element does independent communicative work.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Third worked example: function-signature notation is still a formula
|
|
44
|
+
|
|
45
|
+
> **User:** why is the Merton model a one-dimensional pricing equation when its jumps are random?
|
|
46
|
+
|
|
47
|
+
> The dimensionality of a pricing equation counts state variables, not sources of randomness. The equation solves for the option's value as one function across every possible spot price and every time before expiry; it does not enumerate possible futures, it averages over them. With Merton jumps, the only state variable is spot price, so the equation is one-dimensional in space. With Heston stochastic variance, variance is itself a process that evolves through time and feeds back into the spot price's dynamics, so it has to be tracked alongside spot: two state variables, two spatial dimensions.
|
|
48
|
+
|
|
49
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
50
|
+
|
|
51
|
+
- *"...the option's value `V(S, t)` as a single function over the state space..."*: `V(S, t)` is function-signature notation, which fails the read-aloud test. Nobody says "V of S comma t" in conversation. Express it in words: "the option's value as a function of spot price and time".
|
|
52
|
+
- *"...State = (S). Two-dimensional state: (S, v)..."*: tuple notation is a formula. Say "the only state variable is spot price" and "the state is now spot price and variance".
|
|
53
|
+
- *"...regime index k ∈ {1..K}..."*: set-builder notation is a formula. Say "regime index running from one to K" or just "the regime label".
|
|
54
|
+
|
|
55
|
+
The general principle: any expression that uses parentheses, commas, or symbols to encode a relationship, not just equations with equals signs, is a formula and breaks the spoken register. Plain English forces you to *unpack* the relationship into its English statement, which is also where the understanding lives.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Fourth worked example: density beats scaffolding when the user has framed the question
|
|
60
|
+
|
|
61
|
+
> **User (paraphrased framing, ~70 words):** "The integral term in a pricing equation is the line 'average the option's value across all possible post-jump spot levels'. Doing that average with infinite precision is impossible, you can't actually visit every possible jump size. So we approximate the integral as a *weighted average over a small handful of carefully chosen sample points*. That approximation is called **quadrature**." Refine.
|
|
62
|
+
|
|
63
|
+
> Polished response (~60 words): "Quadrature approximates an integral as a weighted sum over sample points whose locations and weights are chosen so the sum is exact for a stated family of functions, usually polynomials up to some degree against a fixed weight. Seven-node Gauss-Hermite (the reference rule) is exact for degree-thirteen polynomials against a normal density, fitting the lognormal jump distribution closely enough that seven evaluations replace hundreds of naive rectangles."
|
|
64
|
+
|
|
65
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
66
|
+
|
|
67
|
+
- *Re-establishing what the framing established.* Restating "the approximation of an integral as a weighted sum over sample points" when the framing already said exactly that. Filler dressed as definition.
|
|
68
|
+
- *Re-doing the visual when the framing already gave one.* The framing's "average across post-jump spot levels" is a working picture. Adding "imagine rectangles under a curve" describes the same thing in different words and adds zero precision.
|
|
69
|
+
- *Re-motivating the problem.* The framing already explained why we need the approximation ("can't visit every jump size"). Re-explaining the motivation is wasted words.
|
|
70
|
+
- *Adjacent context dressed as significance.* "Per-iteration cost rises ~7×" is true and interesting but does not deepen understanding of *what quadrature is*; it answers a different question. Save it for a follow-up if asked.
|
|
71
|
+
|
|
72
|
+
The precision delta is the answer's only real content. Here, the delta over the framing is: *what "carefully chosen" actually means* (locations and weights making the sum exact for a stated function family), and *which specific rule the reference codebase uses* and *why that rule fits this case*. Everything else is scaffolding the user does not need.
|
|
73
|
+
|
|
74
|
+
The general principle: a longer answer to a well-framed question is a worse answer *when the framing is already audience-appropriate*. If the framing is researcher shorthand and the audience is new to the topic, see the fifth example.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Fifth worked example: precision without bridging fails the new-to-topic test
|
|
79
|
+
|
|
80
|
+
The terse refinement from the fourth example is precise and shorter than the framing, but it lands only for a reader who already owns the specialist vocabulary, which is not the /plainly audience. The new reader does not know what "exact for a stated family of functions" implies, why polynomial-exactness translates to near-exactness on smooth functions, what "against a fixed weight" operationally means, or how the lognormal jump distribution connects to a normal-density quadrature rule. Each of those gaps has to be bridged inside the explanation.
|
|
81
|
+
|
|
82
|
+
Polished response (~180 words, walks the new reader through):
|
|
83
|
+
|
|
84
|
+
> Quadrature is a way of computing an integral by evaluating the function at a small number of sample points, multiplying each value by a weight, and adding them up. The trick is choosing the points and weights so that the sum is *exactly right* for an entire class of functions at once, typically all polynomials up to some chosen degree.
|
|
85
|
+
>
|
|
86
|
+
> That promise is the source of the leverage. If the function you actually want to integrate happens to be one of those polynomials, the sum is the true answer, not an approximation. For functions that are close to one (which most smooth functions are), the error is tiny. So instead of needing hundreds of evenly-spaced samples, a handful placed where they extract the most information about the function's shape gives the same accuracy.
|
|
87
|
+
>
|
|
88
|
+
> The reference codebase uses a rule called Gauss-Hermite with seven samples. It is exact for any polynomial of degree thirteen *multiplied by a bell curve* (a normal density). That last detail matters: Gauss-Hermite is built specifically for averages over normally-distributed quantities. The lognormal jump distribution in the model is exactly that (a quantity whose logarithm is normal), so once the integral is rewritten in log-space, the rule fits the integrand almost perfectly. That is why seven evaluations replace what would otherwise need hundreds.
|
|
89
|
+
|
|
90
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
91
|
+
|
|
92
|
+
- *"Exact for a stated family of functions" without saying what that means or why it matters.* A new reader does not know that exactness on a function family implies near-exactness on functions close to that family. Spell it out: the sum is exactly right for the named class, and close to right for things close to the class.
|
|
93
|
+
- *"Polynomials against a fixed weight" without unpacking the phrase.* "Against a weight" sounds like it has a precise meaning to the writer, but reads as decorative noise to a new reader. Either say "polynomials multiplied by a fixed function (a weight)" once and operationally, or skip the abstract framing and go to the concrete case.
|
|
94
|
+
- *"Fitting the lognormal jump distribution closely enough"*: fitting *how*? The new reader has to take this on faith. Bridge it: lognormal means the *logarithm* of the quantity is normal; Gauss-Hermite is built for normal-weighted integrals; rewrite the integral in log-space and the rule and integrand match.
|
|
95
|
+
- *Skipping the operational definition of the technique itself.* Saying "approximates an integral as a weighted sum over sample points" assumes the reader can picture what that means in code or on paper. Walk them through: pick points, evaluate, multiply by weights, add. One sentence, but load-bearing.
|
|
96
|
+
|
|
97
|
+
The general principle: **density is only a virtue when every dense phrase lands.** A short answer that uses three specialist phrases is *longer* in reading time than a longer answer that uses none, because the reader has to look each one up. If you find yourself using a phrase that compresses several specialist concepts ("exact for a polynomial family"), either unpack the compression inside the explanation or expect the answer to fail the new-to-topic test.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Sixth worked example: scope-matching, the operational definition is often enough
|
|
102
|
+
|
|
103
|
+
The fifth example bridges all the way to the named rule and its mechanism. That depth is correct only when the reader will *use* the mechanism: selecting node counts, comparing rules, verifying near-exactness claims. When the reader will use the technique as a black box (the case in a risk-analysis writeup, where quadrature appears once as "the method we use to compute the jump integral"), the operational definition alone is enough.
|
|
104
|
+
|
|
105
|
+
The writer's polished version (~45 words, in-document phrasing):
|
|
106
|
+
|
|
107
|
+
> Calculating the integral term in the PIDE, the average of the option's value across all possible post-jump spot levels, is actually not possible. Instead, we approximate the integral as a *weighted average over a small number of carefully chosen sample points*, a method known as **quadrature**.
|
|
108
|
+
|
|
109
|
+
Two prose-level moves worth recording, both of which trimmed the version above from a slightly wordier earlier draft:
|
|
110
|
+
|
|
111
|
+
- *"i.e. infinite precision is impossible"* to *"is actually not possible"*: drops the technical-feeling "i.e." and uses a parenthetical that reads more naturally aloud. The missing word "exactly" is recovered by the reader from the contrast with "approximate" in the next sentence; spelling it out would be filler.
|
|
112
|
+
- *"an approximation method"* to *"a method"*: once "approximate the integral as ... a method" is on the page, the word "approximation" is already implied. Repeating it is one of the most common forms of filler in technical writing: the over-specified noun phrase that names the role its sentence already established.
|
|
113
|
+
|
|
114
|
+
This passes all three tests for its audience:
|
|
115
|
+
|
|
116
|
+
- *Aloud test:* yes, reads cleanly without notation.
|
|
117
|
+
- *Understanding test:* yes, the reader knows operationally what quadrature does (sample, weight, average), which is the level at which they will use it.
|
|
118
|
+
- *New-to-topic test:* yes, every phrase is plain. "Carefully chosen" is left as a black-box modifier, not unpacked into polynomial-exactness; that is correct, because the reader does not need to choose the points or verify the rule. Trusting "carefully chosen" is part of the black-box contract.
|
|
119
|
+
|
|
120
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
121
|
+
|
|
122
|
+
- *Over-engineering past the question's scope.* If the surrounding doc only requires the reader to know what quadrature *is*, explaining *how* Gauss-Hermite achieves exactness is filler, even when every phrase is plain English. The fifth-example bridging answer is wrong for the sixth-example reader.
|
|
123
|
+
- *Mistaking "how the technique works" for "what the technique is".* These are different questions. A /plainly definition answers the second by default. Mechanism is a follow-up question and warrants its own explanation only when asked.
|
|
124
|
+
- *Treating richer-when-possible as a virtue.* The four-item template (definition, consequences, visual, significance) maxes out at four for a reason. If the reader's use of the concept does not depend on consequences, visual, or significance, the definition alone suffices, and adding the others is padding.
|
|
125
|
+
- *Refusing to leave a hand-wavy modifier hand-wavy.* Phrases like "carefully chosen" are sometimes load-bearing precisely because they signal *trust the technique without explaining it*. A risk-analysis reader does not need to know what makes the choice careful; they need to know that someone competent made it.
|
|
126
|
+
|
|
127
|
+
The general principle: **what the reader needs to DO with the concept dictates the depth, not the concept's intrinsic richness.** Quadrature is intrinsically rich, but a risk-analysis reader uses it as a black box ("samples and weights chosen carefully") and that level of depth is the right answer. The fifth example and the sixth example are both correct plain English, for different readers. The /plainly invocation should default to the operational scope (sixth) and reach for mechanism (fifth) only when the reader will need mechanism.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Seventh worked example: when the source is one jargon-packed sentence, the plain-English answer is also one sentence
|
|
132
|
+
|
|
133
|
+
Sometimes the user pastes a single sentence, often a sentence dense with specialist vocabulary, and asks for plain English. The temptation is to unpack each piece of jargon into its own paragraph, define the surrounding context, walk through implications, add a "catch" or a payoff. That produces a wall of text masquerading as plain English. The right answer is a **transliteration**: keep the source's syntactic frame, swap each jargon term for its plain-English equivalent, stop.
|
|
134
|
+
|
|
135
|
+
> **User:** /plainly "parameter standard errors fall out of the calibrated Jacobian via the usual covariance formula."
|
|
136
|
+
|
|
137
|
+
> Polished response (one sentence): "Since the calibration produces a table of sensitivities as part of its loss-minimisation process, this table is converted to statistics that express the margin of error in the parameters."
|
|
138
|
+
|
|
139
|
+
The mapping is direct:
|
|
140
|
+
|
|
141
|
+
- "parameter standard errors" becomes "the margin of error in the parameters"
|
|
142
|
+
- "fall out of" is preserved by phrasing the conversion as a follow-on to a process that was happening anyway ("since the calibration produces … as part of its loss-minimisation process")
|
|
143
|
+
- "the calibrated Jacobian" becomes "a table of sensitivities"
|
|
144
|
+
- "via the usual covariance formula" becomes "is converted to statistics that …"
|
|
145
|
+
|
|
146
|
+
Each jargon term lands in the same syntactic slot it occupied in the source. Nothing is added; nothing is cut. The result is one sentence, mirroring the source's one sentence.
|
|
147
|
+
|
|
148
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
149
|
+
|
|
150
|
+
- *Adding numeric examples to convey what "margin of error" means.* The reader knows what a margin of error is. Adding "an 18% volatility give-or-take 0.5% is very different from 18% give-or-take 8%" is filler that explains a concept the reader did not ask about.
|
|
151
|
+
- *Explaining surrounding context that wasn't in the asked sentence.* The χ²-weighting connection (which is what makes the formula statistically meaningful) appears in *adjacent* sentences in the source document, not in the phrase being asked about. Bringing it in is scope creep: answer the sentence that was asked, not a richer one nearby.
|
|
152
|
+
- *Re-stating the "for free" payoff multiple times.* "Comes for free", "no extra rounds of fitting", "no simulation needed" all say the same thing. One mention is enough; multiple is filler dressed as emphasis.
|
|
153
|
+
- *Adding a "the catch" or "the payoff" paragraph for nuance.* The source phrase contains no catch. Adding one expands the explanation beyond the asked scope.
|
|
154
|
+
- *Walking the reader through worked motivation ("imagine you have a calibration that just finished…").* The source is a present-tense statement of fact. The plain version should be too. Story-mode framing is filler.
|
|
155
|
+
|
|
156
|
+
The general principle: **transliterate, don't expand.** When the source is a single sentence dense with jargon, the plain-English version should preserve the source's sentence structure and only replace each jargon term with its plain-English equivalent. The reader is not asking "teach me everything about parameter uncertainty estimation in nonlinear least squares"; they are asking "what does *this sentence* mean". Match the scope of the question, not the depth of the underlying topic. The verbal-conversation test is sharpest here: if you would say one sentence to a colleague who asked "what does that mean?", write one sentence. Anything more is the writer's anxiety, not the reader's need.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Eighth worked example: symbol anchoring done right (transliteration, second instance)
|
|
161
|
+
|
|
162
|
+
The seventh example established the transliterate-don't-expand rule. The eighth shows the same rule applied cleanly with **symbol anchoring**: when the source uses bare symbols as jargon (e.g. "V₀ memory"), the plain version puts the *meaning* in front and the *symbol* in parentheses as a cross-reference back to the surrounding document.
|
|
163
|
+
|
|
164
|
+
> **User:** /plainly "The V₀ memory has decayed to θ by the time of any VX-future expiry, so the V₀ term drops out."
|
|
165
|
+
|
|
166
|
+
> Polished response (one sentence): "By the time any VX future expires, the variance has mean-reverted from its starting value (V₀) to its long-run level (θ), so the formula no longer depends on V₀."
|
|
167
|
+
|
|
168
|
+
The mapping is, again, direct:
|
|
169
|
+
|
|
170
|
+
- "V₀ memory" becomes "starting value (V₀)": meaning first, symbol as parenthetical cross-reference.
|
|
171
|
+
- "has decayed to θ" becomes "has mean-reverted to its long-run level (θ)": same anchoring move, same syntactic slot.
|
|
172
|
+
- "by the time of any VX-future expiry" becomes "by the time any VX future expires": light prose tweak, same content.
|
|
173
|
+
- "the V₀ term drops out" becomes "the formula no longer depends on V₀": operational restatement.
|
|
174
|
+
|
|
175
|
+
**Why this works:**
|
|
176
|
+
|
|
177
|
+
- *Symbol anchoring preserves cross-referenceability without leading with jargon.* A reader who knows the doc recognises V₀ and θ as the variables from the previous bullet's formula; a reader new to the topic gets the meaning from "starting value" and "long-run level" without needing to recognise the symbols. Both audiences are served by one sentence.
|
|
178
|
+
- *No anti-patterns from the seventh example were committed.* No numeric example explaining what mean-reversion is. No re-derivation of the formula. No "the catch is …" or "the payoff is …" closer. No story-mode preamble.
|
|
179
|
+
|
|
180
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
181
|
+
|
|
182
|
+
- *Defining V₀ from scratch.* "V₀ refers to the initial value of the variance process at the moment a regime starts; over time, this initial-value memory exponentially decays toward the long-run level …": too long. The doc has already introduced V₀ in the previous bullet's formula. Anchoring it parenthetically (V₀) is enough.
|
|
183
|
+
- *Bringing in adjacent variables not in the asked sentence.* "V₀ is the initial variance, θ is the long-run mean, the variance mean-reverts at rate κ towards θ …": κ does not appear in the asked sentence. Including it is scope creep.
|
|
184
|
+
- *Adding editorial commentary.* "This is why we can simplify the formula at long horizons …": the source makes a factual statement, not an editorial one. The plain version should match.
|
|
185
|
+
- *Re-deriving the source's claim instead of stating it.* Listing the formula again with V₀ replaced by θ to "show" what dropping out means. The reader did not ask for the derivation.
|
|
186
|
+
|
|
187
|
+
The general principle reinforces the seventh example: **one sentence in, one sentence out.** Symbol anchoring (meaning first, symbol parenthetical) is the standard move when the source uses bare symbols; it keeps the plain version cross-referenceable to the surrounding doc without leading with jargon.
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Ninth worked example: Greek letters are jargon, parenthetical clarifications must add substance, watch the register
|
|
192
|
+
|
|
193
|
+
The eighth example introduced symbol anchoring. The ninth shows three failure modes that are easy to commit on a first attempt even when the principle is known: (1) using a Greek letter as the primary referent rather than as a parenthetical anchor, (2) keeping a self-referential clarification that introduces more jargon than it removes, and (3) reaching for a casual-register word that doesn't match the document.
|
|
194
|
+
|
|
195
|
+
> **User:** /plainly "**VIX options**: lognormal-mixture in IV space with vol-of-VIX `η_i = ν_i / (2·√θ_i)` (heuristic from sqrt-derivative chain rule on Heston dynamics). Same closure as the constant-σ path; the only difference is where η comes from."
|
|
196
|
+
|
|
197
|
+
> Polished response: "**VIX options**: priced as a mixture of lognormal distributions of implied volatility, one per regime, with each regime's vol-of-VIX (η_i) derived from the Heston parameters as vol-of-vol divided by twice the square root of long-run variance. The pricing method is otherwise the same as in the constant-volatility model; only the source of vol-of-VIX changes: fitted directly per regime under constant-volatility, derived from the Heston parameters here."
|
|
198
|
+
|
|
199
|
+
The mapping:
|
|
200
|
+
|
|
201
|
+
- "lognormal-mixture in IV space" becomes "a mixture of lognormal distributions of implied volatility": unpacks "IV space" into its plain meaning.
|
|
202
|
+
- "vol-of-VIX η_i = ν_i / (2·√θ_i)" becomes "vol-of-VIX (η_i) derived from the Heston parameters as vol-of-vol divided by twice the square root of long-run variance": meaning leads, symbol anchors parenthetically; the formula is described in words.
|
|
203
|
+
- "(heuristic from sqrt-derivative chain rule on Heston dynamics)" is **dropped**. The clarification's content ("approximate") is recoverable from broader doc context; its form introduces "chain-rule" which is itself jargon.
|
|
204
|
+
- "Same closure as the constant-σ path" becomes "The pricing method is otherwise the same as in the constant-volatility model": *closure* to *method* (register), *constant-σ* to *constant-volatility* (Greek-letter rule).
|
|
205
|
+
- "the only difference is where η comes from" becomes "only the source of vol-of-VIX changes: …": the plain-English term is used throughout, *including* in the back-reference. Anchoring (η_i) once is for cross-reference to the surrounding doc, not a licence to use η as a back-reference later in the same paragraph; the second use would still be jargon to a reader who can't decode the letter.
|
|
206
|
+
|
|
207
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
208
|
+
|
|
209
|
+
- *Using a Greek letter as the primary referent.* The source's "vol-of-VIX η_i" treats η_i as the named-entity, with "vol-of-VIX" as the descriptor. A reader who doesn't recognise η is stuck; they don't even know what Greek letter it is, let alone what it represents. The plain version inverts the order: vol-of-VIX is the entity, (η_i) is the parenthetical anchor for cross-reference.
|
|
210
|
+
- *Back-referencing the symbol after anchoring it once.* "Only the source of η changes" assumes the reader can map η back to the parenthetical anchor a sentence ago. That mapping is itself the cognitive cost the parenthetical was meant to remove. Use the plain-English term throughout (*"only the source of vol-of-VIX changes"*); reserve the symbol's appearances to (1) a single anchored introduction for cross-reference and (2) any place where the symbol genuinely appears in a formula the reader might look up.
|
|
211
|
+
- *Keeping a self-referential clarification that adds more jargon than it removes.* "(a chain-rule shortcut on the Heston dynamics)" looks like it's helping the reader but introduces "chain-rule", a term the reader may not own. If the clarification needs its own clarification, drop it. The point that the formula is approximate can be inferred from the surrounding text (the broader Heston pricing section already mentions closed-form approximations) and does not need to be spelled out at every formula.
|
|
212
|
+
- *Reaching for a casual-register word like "recipe" (or "trick", "vibe", "bake in").* These words carry tone from cooking and conversational registers and read as glib in technical writing. *Method*, *technique*, *approach* are the register-neutral equivalents.
|
|
213
|
+
- *Greek-letter compactness as a false economy.* "Constant-σ model" is no shorter than "constant-volatility model" once you account for σ being unrecognisable to part of the audience. Save the Greek symbol for the back-reference; lead with the word.
|
|
214
|
+
|
|
215
|
+
The general principle: **the recursive rule is more demanding than it looks.** A plain-English explanation cannot contain terms that need their own explanation, and that includes Greek letters used as primary referents (which require recognising the alphabet) and parenthetical clarifications that introduce new jargon. Every symbol in the source is a candidate for being downgraded to a parenthetical anchor; every parenthetical clarification in the source is a candidate for being dropped if its plain version would itself need clarifying.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Tenth worked example: "same as X" references must define X, not punt to it
|
|
220
|
+
|
|
221
|
+
Sometimes a source phrase says "X works the same as Y, except for Z". The temptation is to mirror that structure in the plain version: "X works the same as Y, except Z." But this assumes the reader already knows what Y is, and usually they don't, which is why they invoked /plainly. The plain version must **describe** Y inline, not refer to it. Otherwise the explanation is recursive: it defers the work to a definition the reader doesn't have.
|
|
222
|
+
|
|
223
|
+
> **Source (continuation of the ninth example):** "...Same closure as the constant-σ path; the only difference is where η comes from."
|
|
224
|
+
|
|
225
|
+
> **Failed plain version:** "...The pricing method is otherwise the same as in the constant-volatility model; only the source of vol-of-VIX changes: fitted directly per regime under constant-volatility, derived from the Heston parameters here."
|
|
226
|
+
|
|
227
|
+
> **Fixed plain version:** "...The pricing method is otherwise the same as in the constant-volatility model, i.e. each regime contributes one Black-76 lognormal price using the regime's VIX as forward and vol-of-VIX as volatility input, weighted by the regime's occupancy probability at expiry, then discounted to today."
|
|
228
|
+
|
|
229
|
+
What changed: the failed version *repeated* a structural claim already made in sentence 1 ("the only difference is the source of vol-of-VIX") without ever describing what the constant-volatility pricing method actually does. The fixed version uses the second sentence to **spell out** the method, so the reader doesn't need to look elsewhere.
|
|
230
|
+
|
|
231
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
232
|
+
|
|
233
|
+
- *Punting on the "same as X" reference.* "Same as the constant-volatility model" is meaningful only if the reader already knows that model. If the doc doesn't define it nearby (and often it doesn't, in plain-English passages), the plain version must define it inline. Anything else is the writer pointing at the answer instead of giving it.
|
|
234
|
+
- *Repeating a structural claim instead of substituting content.* "Same except for Y" is a *structural* statement; it tells you the shape of the comparison, not the substance. If sentence 1 already established Y, then sentence 2's only remaining job is to describe X. Repeating "the only difference is Y" is filler that pretends to be content.
|
|
235
|
+
- *Trusting the surrounding doc to do the work.* The reader of a /plainly explanation may not have read (or remembered) the surrounding section that defines X. The plain version should be self-contained at the bullet/sentence level. If a definition is needed, inline it.
|
|
236
|
+
|
|
237
|
+
The general principle: **plain English must contain the content the reader needs, not point to it.** A "same as X except Y" construction qualifies as plain English only if X is defined nearby in language the reader already has. If X is itself a piece of doc-internal vocabulary, replace the reference with the definition. The shorthand of "same as X" is a writer's economy, not a reader's, and plain English exists for the reader.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Eleventh worked example: when in doubt, go simpler, the audience is less experienced than the writer thinks
|
|
242
|
+
|
|
243
|
+
The seventh-through-tenth examples established transliteration discipline for jargon-dense single sentences. The eleventh adds a meta-principle: when the writer thinks "this audience can handle 'Fourier methods' / 'characteristic function' / 'integrated variance distribution'", the writer is overestimating. The /plainly audience is genuinely new to the topic. Specialist proper nouns ("Fourier", "Carr-Madan"), placeholder nouns ("methods", "techniques"), stacked-modifier noun phrases ("integrated CIR variance distribution"), and elaborate phrasings for plain claims ("match shape to negligible practical error") should all default to their plainer equivalents. The cost of going one level too plain is mild (an experienced reader feels patronised); the cost of going one level too jargon-heavy is severe (the new reader bounces off entirely). The asymmetry favours plainer.
|
|
244
|
+
|
|
245
|
+
> **Source:** "Exact VIX pricing under Heston would require Fourier methods on the integrated CIR variance distribution; the closed-form approximations match shape to negligible practical error and are fast enough for repeated pricing."
|
|
246
|
+
|
|
247
|
+
> **First-pass plain version (still too jargon-heavy):** "Exact VIX pricing under Heston would require Fourier methods applied to the distribution of integrated variance; the closed-form approximations used here match the exact shape to negligible practical error and are fast enough to call repeatedly."
|
|
248
|
+
|
|
249
|
+
> **Polished plain version:** "Exact VIX pricing under Heston would require a transformation of the variance probability distribution but the closed-form approximations we use here instead are close enough in terms of residual error and fast enough that we can call them repeatedly."
|
|
250
|
+
|
|
251
|
+
The second-pass mapping (first-pass to polished):
|
|
252
|
+
|
|
253
|
+
- "Fourier methods" becomes "a transformation": drops the proper noun (*Fourier*); drops the placeholder noun (*methods*); names the actual operation.
|
|
254
|
+
- "applied to the distribution of integrated variance" becomes "of the variance probability distribution": unstacks the modifier chain (drops *integrated* as a load-bearing concept the reader doesn't need at this scope).
|
|
255
|
+
- "match the exact shape to negligible practical error" becomes "are close enough in terms of residual error": collapses the elaborate phrasing into the basic claim (*close enough*).
|
|
256
|
+
- "fast enough to call repeatedly" becomes "fast enough that we can call them repeatedly": slightly more conversational.
|
|
257
|
+
- *Added* "but" / "we use here instead": makes the contrast structure explicit so the reader doesn't have to construct it.
|
|
258
|
+
|
|
259
|
+
Two observations worth recording:
|
|
260
|
+
|
|
261
|
+
- **Plainness is not shortness.** The first-pass version was 36 words; the polished is 39. The polishing did not compress, it *substituted vocabulary*. Each technical word was downgraded one or two levels of specialism without changing the sentence's length or shape.
|
|
262
|
+
- **The first pass felt plain to the writer because the writer is comfortable with "Fourier methods" and "integrated variance distribution".** That comfort is precisely the problem: the writer's audience-model is calibrated to the writer's own background, not to the new reader's. The fix is a deliberate downward bias on every borderline word.
|
|
263
|
+
|
|
264
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
265
|
+
|
|
266
|
+
- *Treating proper nouns as low-cost vocabulary.* "Fourier methods", "Carr-Madan", "Heston-style", "Black-76". The proper noun names a person or paper; the reader does not need to know who Fourier was to understand a transformation. Drop the proper noun and name the operation. Keep it only where it's genuinely load-bearing as a citation.
|
|
267
|
+
- *Using placeholder nouns ("methods", "techniques", "approaches") where the operation can be named.* "Fourier methods" becomes "a transformation". "An approximation method" becomes "an approximation". "A numerical technique" becomes the named technique if you can. The category-name is rarely the level of abstraction the reader actually needs.
|
|
268
|
+
- *Keeping stacked-modifier noun phrases intact.* "Integrated CIR variance distribution" stacks three modifiers on one noun. A new-to-topic reader cannot parse this in sequence. Unstack into a phrase: "the variance probability distribution", "the distribution of variance over time". Each modifier you keep must earn its place.
|
|
269
|
+
- *Elaborate verb-noun phrasing for claims that "close enough" expresses plainly.* "Match shape to negligible practical error", "preserve fidelity within tolerance", "exhibit convergence under the metric": these are fancy ways of saying "are close enough", "match closely", "converge". When the elaborate phrasing doesn't add precision the reader needs at that scope, downgrade.
|
|
270
|
+
- *Leaving the reader to infer rhetorical relationships from punctuation.* The source's semicolon hides an implicit "but"; the second clause is offered *instead of* the first. Plain English makes the contrast explicit with the connective word ("but", "though", "instead").
|
|
271
|
+
- *Calibrating the audience model to the writer's own background.* If "Fourier" feels obvious, that's evidence it should be dropped, not kept. The writer is the wrong baseline. The new reader is a baseline two or three levels below the writer's intuition.
|
|
272
|
+
|
|
273
|
+
The general principle: **default to plainer than you think necessary; restore precision only when it would otherwise be lost.** Three or four passes through a /plainly answer is normal, and each pass surfaces one more layer of vocabulary the writer was unconsciously treating as plain. The precision-pass at the end of the skill's "Rules" section is not a single check; it is an iterated downward search for the level at which every word lands for the genuinely new reader.
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Twelfth worked example: format scaffolding is itself the AI tell
|
|
278
|
+
|
|
279
|
+
The first eleven examples were about word-level and sentence-level AI tells. The twelfth covers a higher-order failure: when the source presents itself in the heading-and-bullet format AI defaults to in marketing copy, the polish must question the format itself, not just refine the prose inside it. Bold-tag headings followed by em-dash separators followed by stacked one-liners read as AI marketing-page output even when every individual word is plain.
|
|
280
|
+
|
|
281
|
+
> **Source:** A consultancy pitch presenting three offerings as `**Bold Heading** — description` blocks, preceded by a signpost line introducing them as a numbered set ("Three ways I work with clients:"), and closed with a tricolon of three short parallel-shape sentences in the form "I [verb] the [noun]."
|
|
282
|
+
|
|
283
|
+
> **Failed polish (kept the format intact):** Same headings, same em-dash separators between heading and description, closing tricolon collapsed to one sentence with three verbs. Word-level AI tells were caught; format-level ones were not. The result still reads as AI marketing copy because the visual scaffold is preserved.
|
|
284
|
+
|
|
285
|
+
> **Gold-standard polish (prose):** Three offerings folded into running prose, each introduced by a verb the writer would actually say in conversation. No bold headings. No em-dashes (the separator becomes a comma or hyphen-with-spaces if needed). The signpost line is deleted. The closing tricolon is removed entirely, not collapsed. Any closing rhetorical sequence becomes a single conditional invitation to the reader, on the pattern "If you have recognised X and understand Y, then I can help you put Z into practice."
|
|
286
|
+
|
|
287
|
+
**Failure modes this avoids, recorded as anti-patterns:**
|
|
288
|
+
|
|
289
|
+
- *Treating heading-and-em-dash format as a feature of the source rather than a constraint to question.* In marketing copy aimed at human readers, prose almost always does the same job better. The heading-and-bullet format itself signals "AI marketing page", regardless of the words inside it.
|
|
290
|
+
- *Collapsing a rhetorical tricolon instead of removing it.* The previous example showed the tricolon could be merged into one sentence to satisfy the cadence rule. The gold standard goes further: if a rhetorical close adds no new content, just strong-form repetition, remove it. The reader has read the offerings and does not need a chant of the verbs.
|
|
291
|
+
- *Preserving signposting prose (e.g. "Three ways I work with clients:") after removing the headings it signposted.* Once the format is prose, the signpost is double-bookkeeping.
|
|
292
|
+
- *Keeping em-dashes in the polish even after the rule was already in the catalogue.* This is the writer's instinct for "the strong-break exception" overriding the discipline. The exception has now been removed; the rule is: never an em-dash.
|
|
293
|
+
- *Treating a specific-sounding number as load-bearing precision when the writer cannot actually source it.* Specific numbers ("a 1-2 year head start", "30% faster", "10x cheaper") read as authoritative, but if the writer cannot defend the bound, a plain qualifier ("a limited head start", "noticeably faster", "much cheaper") expresses the same shape without false confidence.
|
|
294
|
+
- *Inserting structure that creates work for the reader without creating value.* Bold headings make the page scannable but force the reader to integrate three separate sections instead of following one flow. For three short offerings, prose with conversational lead-verbs reads faster than a heading-bulleted list.
|
|
295
|
+
|
|
296
|
+
The general principle: **the AI-tells catalogue applies to format as much as to vocabulary.** Bold headings followed by em-dash separators followed by parallel one-liners is the visual signature of AI marketing-page output. When the source is in that format, the precision pass must ask whether prose would do the same job, and in human-facing copy the answer is almost always yes.
|
|
297
|
+
|
|
298
|
+
Two meta-observations from this case worth recording:
|
|
299
|
+
|
|
300
|
+
- **Lenience after a partial fix is the dominant failure mode.** The polish caught most word-level tells, then declared victory. The format itself was an unaudited surface. A strict pass requires asking, at every level (word, sentence, paragraph, format), whether the source's choice was the writer's or AI's default.
|
|
301
|
+
- **Specific carve-outs in the rules become loopholes.** The "strong break" exception for em-dashes was the failure point: the writer's instinct rationalised every em-dash as a strong break. Rules with no exceptions are easier to honor than rules with one defensible exception, because the defensible exception swallows the rule.
|
|
@@ -60,7 +60,7 @@ Every `POST /api/admin/cloudflare/setup` failure returns a `CloudflareSetupError
|
|
|
60
60
|
- `inputsAlreadyHeld: { admin?: string; public?: string; apex?: string }` — the FQDNs the route composed from the submit body before `err()` fired. Pre-validation failures emit `{}` so absence is itself deterministic.
|
|
61
61
|
- `discoveryResults: { tunnels: { id; name }[]; domains: string[] }` — the last-known snapshot from the process-lifetime `discoveryCache` Map that `GET /tunnels` and `GET /domains` write to on success.
|
|
62
62
|
|
|
63
|
-
The chat relay appends both as a fenced ```` ```json ```` block under "Held by deterministic tools (do not re-solicit)". The admin agent's reply
|
|
63
|
+
The chat relay appends both as a fenced ```` ```json ```` block under "Held by deterministic tools (do not re-solicit)". The admin agent's reply restates those values verbatim, names the literal error, and stops — re-soliciting is a doctrine violation. The retry-on-redeployment decision is owned by the route (2026-05-13 doctrine fix): `POST /api/admin/cloudflare/setup` looks up the most recent terminal `:Task {kind:"cloudflare-tunnel-login"}` on the conversation via `findMostRecentTerminalCloudflareTask`, and when the running bundle's mtime post-dates that Task's `completedAt` the respawn proceeds; otherwise the route returns the prior Task's `errorMessage` verbatim as the new envelope. The agent does not branch on `bundleMtime` and never narrates it (`[admin-reply-scrub]` records any leakage under `llm-narrates-internal-state`). The rule lives in IDENTITY.md § "Post-deterministic-error reply contract" and `.docs/agents.md` § "Intent Gate — post-deterministic-error reply contract". The shared `TunnelEntry` shape lives in [`platform/ui/app/lib/cloudflare-setup-types.ts`](../../ui/app/lib/cloudflare-setup-types.ts).
|
|
64
64
|
|
|
65
65
|
## Identity model
|
|
66
66
|
|
|
@@ -88,7 +88,11 @@ If the browser drops the SSE connection mid-upgrade (typical during the maxy res
|
|
|
88
88
|
|
|
89
89
|
**Active-chat stream-log click telemetry.** Clicking "Stream log" in the active chat fetches the URL inline (`/api/admin/logs?type=stream&conversationId=…&download=1`), emits a `[stream-log-click] status=<c> bytes=<n> conversationId=<tail>` line in `server.log` via the `/api/_client-error` event pipe, and downloads the same response. Operator-grep `[stream-log-click] status=404` for client/server identity mismatches.
|
|
90
90
|
|
|
91
|
-
**Bundle-mtime session prelude.** Each admin session boot stamps `[boot] bundleMtime=<iso> conversationId=<tail>` in `server.log` next to `[plugins] MCP servers for session:`; the
|
|
91
|
+
**Bundle-mtime session prelude.** Each admin session boot stamps `[boot] bundleMtime=<iso> conversationId=<tail>` in `server.log` next to `[plugins] MCP servers for session:`; the value is consumed by the Cloudflare setup route's retry-decision branch (it compares against the most recent terminal `:Task.completedAt`), never by the LLM. The prior `<deployment>` block was removed in 2026-05-13 doctrine fix because the admin LLM read it as narration permission for internal state; the route now owns the retry decision, the agent restates the literal envelope.
|
|
92
|
+
|
|
93
|
+
**Post-action restatement block (2026-05-13 doctrine fix).** `assembleSystemPrompt` injects `<post-action>actionId=<id> outcome=<completed|failed> phase=<phase> at=<iso></post-action>` into the system prompt whenever the dispatcher resolves a terminal `:Task {kind:"cloudflare-tunnel-login"}` on the conversation. Agent-type-agnostic. The IDENTITY clause "If `<post-action>` is present, restate the literal outcome and stop" routes the operator-visible reply. Observability: `[post-action-block] injected|no-prior-action|lookup-failed` log line every turn.
|
|
94
|
+
|
|
95
|
+
**Admin reply scrub (2026-05-13 doctrine fix).** Closed-list token scrub at `platform/ui/app/lib/admin-reply-scrub.ts`; tokens `bundle`, `bundleMtime`, `overnight`, `the fix may`, `was patched`, `re-rendering`, `paste the output`, `run the script`, `re-attempt`. Hit records a violation under `llm-narrates-internal-state` (rule_family `extension`) and emits `[admin-reply-scrub] agent=<name> tokens_found=[…] reply_blocked=false`. Future doctrine paragraphs naming a new internal token MUST extend the list in the same PR.
|
|
92
96
|
|
|
93
97
|
**Sudo password** is prompted once per upgrade. The admin server pipes it to `sudo -S -v` to validate + cache, then forwards it to the action unit via `systemd-run --setenv=SUDO_PASSWORD` so the installer's in-unit `sudo -S` reads it directly — per-TTY sudoers configurations where the user-level cache does not cover a fresh systemd-run unit still work. The password is never written to any log, SSE frame, or persisted file.
|
|
94
98
|
|
|
@@ -14,7 +14,7 @@ These are part of {{productName}}'s foundation and cannot be disabled:
|
|
|
14
14
|
|
|
15
15
|
| Plugin | What it does |
|
|
16
16
|
|--------|-------------|
|
|
17
|
-
| `admin` | Platform management — system status, account settings, logs, session control |
|
|
17
|
+
| `admin` | Platform management — system status, account settings, logs, session control. Also hosts the cross-cutting `plainly` skill: every text-producing agent (admin, public, every specialist) applies a plain-English precision pass to prose returned to humans, as a prime-directive prerogative. Agent-to-machine payloads (image-generate prompts, memory-write arguments, cypher) pass through verbatim. Enforced mechanically by `.claude/hooks/precision-check.sh`. |
|
|
18
18
|
| `memory` | Graph memory — search, write, reindex, and ingest knowledge |
|
|
19
19
|
| `maxy-guide` | User guide and platform documentation (this plugin) |
|
|
20
20
|
| `cloudflare` | Cloudflare Tunnel — remote access via your custom domain |
|
|
@@ -89,7 +89,9 @@ Do not retry the same tool against the same target within a turn. A second ident
|
|
|
89
89
|
|
|
90
90
|
When a tool returns a structured failure whose error content begins with an UPPERCASE_ERROR_CODE (for example `WEBFETCH_CANNOT_READ_JS_SPA`), the runtime has already determined that retrying the same tool will fail and that a substitute would launder uncertainty. Read the error's plain-English explanation, then write one or two sentences to the owner that name (a) what failed, (b) the reason in their language, and (c) the concrete actions they can take to unblock — typically pasting text or sending a screenshot. Do not silently dispatch a substitute (Playwright, research-assistant, memory-search) to continue the original instruction; that hides the failure and the owner loses the ability to judge whether the substitute's output answers their question. A verbal instruction in the current conversation is not consent — only an explicit standing policy recorded in account configuration counts, and no such mechanism exists today. Until one exists, every structured tool failure becomes a question for the owner. Wait for direction before resuming.
|
|
91
91
|
|
|
92
|
-
**Post-deterministic-error reply contract — never re-solicit
|
|
92
|
+
**Post-deterministic-error reply contract — restate, never re-solicit.** On `cloudflare-setup` error, the route returns either a literal error envelope or a deterministic re-invoke; the reply restates the literal error verbatim and stops. The envelope's `inputsAlreadyHeld` (FQDNs already submitted: `admin`, `public`, `apex`) and `discoveryResults` (tunnels + domains snapshot) are the answer set — asking the operator for a hostname, tunnel name, or apex that appears there is a doctrine violation. Retry-on-redeployment is decided by the route, not by the reply.
|
|
93
|
+
|
|
94
|
+
**Post-action restatement contract.** When a `<post-action>` block appears in your system prompt, it carries the literal terminal outcome of the chain's most-recent action card (`actionId`, `outcome ∈ {completed, failed}`, `phase`, `at`). The next free-text reply restates that outcome verbatim and stops. Do not narrate, predict, or recompute the status — the route closed the audit Task and the block IS the answer.
|
|
93
95
|
|
|
94
96
|
## Cypher schema
|
|
95
97
|
|
|
@@ -129,6 +131,8 @@ Operationalises the CONCISE prerogative for clarification. Three rules:
|
|
|
129
131
|
|
|
130
132
|
**Bundled-SKILL access contract.** Plugin skills and references live in the bundled npm package, not on disk under `<accountDir>/agents/admin/plugins/`. Load them with `mcp__admin__plugin-read` only — the `<plugin-manifest>` `Skills:` and `References:` lines name the exact `pluginName` and file path to pass. `Read`, `Glob`, and `Bash` against those paths will fail with `File does not exist`, and the runtime agent-loop-stop interceptor cannot distinguish a generic-error retry from a tool-routing mistake. Subagents inherit this contract via the parent system prompt — never dispatch an `Agent` subagent with a `Read` directive against a bundled SKILL path.
|
|
131
133
|
|
|
134
|
+
**Plain-English precision pass.** Load `admin/skills/plainly/SKILL.md` via `plugin-read` on the first turn of a session where the user asks to explain, define, or pre-empts one of the trigger phrases ("explain in plain English", "what does X mean", "define X", "I don't understand", "what is this"), AND on the first turn where you are about to return a reply containing a term not in the operator's prior turn. Apply the AI-tells strip + recursive-rule pass to the reply before sending it. The skill applies to prose returned to the operator, not to MCP tool arguments — agent-to-machine payloads pass through unmodified.
|
|
135
|
+
|
|
132
136
|
Plugins provide domain-specific tools that query their own data stores directly. `memory-search` is a general-purpose semantic search across the entire knowledge graph — it finds nodes by vector similarity, which means results are ranked by semantic closeness to the query, not by domain relevance. A query containing the word "email" will surface product documentation *about* email features before it surfaces actual Email nodes whose content is unrelated to the query wording.
|
|
133
137
|
|
|
134
138
|
When the user's intent maps to a specific plugin's domain, use that plugin's tools — not `memory-search`. The `<plugin-manifest>` groups tools by plugin and describes each plugin's purpose and retrieval paths. The `<specialist-domains>` block within it lists every specialist-owned tool by name. Match user intent to a tool in these registries first; fall back to `memory-search` only when the query genuinely spans multiple domains or no tool in the manifest matches the intent.
|
|
@@ -48,3 +48,9 @@ When you need to clarify intent before acting, follow two rules.
|
|
|
48
48
|
1. **One-sided questions only.** Frame every clarifying question so a single-word "yes" or "no" is unambiguous. Never pose two opposing framings joined by "or" — "Should I book this, or not?", "Want a quote, or shall I take a message?". "Yes" to such a question is unusable — the visitor could have meant either side. Pick one side and ask it plainly: "Shall I take a message?" — not "take a message, or leave it?".
|
|
49
49
|
|
|
50
50
|
2. **No menu when the signal is clear.** When an internal lookup or tool returns a specific outcome — the answer is there, or the answer is not — relay that outcome. Do not offer the visitor a menu of next steps when only one makes sense. If a lookup fails, tell the visitor what to do next (take a message, contact the business directly) rather than asking them to choose between recoveries.
|
|
51
|
+
|
|
52
|
+
## Plain-English precision pass
|
|
53
|
+
|
|
54
|
+
Load `admin/skills/plainly/SKILL.md` via `plugin-read` on the first text-producing turn of every session. Apply the AI-tells strip and the recursive plain-English rule to every reply you return to the visitor before emitting it — this is a prime-directive prerogative that overrides every other formatting preference. Customers are the highest-stakes audience this platform serves; plain English is not a polish step, it is the contract.
|
|
55
|
+
|
|
56
|
+
The skill applies to prose returned to the visitor and to text content passed through `render-component`. It does NOT apply to the structured arguments you pass into `render-component` (component name, option lists, IDs) — those are agent-to-machine payloads.
|
|
@@ -96,3 +96,9 @@ Return to the admin agent:
|
|
|
96
96
|
## Tool failure discipline
|
|
97
97
|
|
|
98
98
|
When a tool returns an error, surface the failure and its diagnostic context before taking another action. Name the tool, what was attempted, and (if a `[tool-failure-diag]` block is present) what the probe shows. Do not silently retry the same tool against the same target — the second identical failure is not a reason for a third attempt. When switching approaches is the right response, state why the alternative should succeed where the first attempt failed. Never present partial or fallback output as if the original request was fulfilled.
|
|
99
|
+
|
|
100
|
+
## Plain-English precision pass
|
|
101
|
+
|
|
102
|
+
Load `admin/skills/plainly/SKILL.md` via `plugin-read` on the first turn of every session. Apply the AI-tells strip + recursive plain-English rule to every prose artifact you return to the admin agent — captions, brochure prose, summaries, the "What you did" / "Summary" output contract above. This is a prime-directive prerogative; do not wait for admin to ask.
|
|
103
|
+
|
|
104
|
+
**Receiving-endpoint carve-out.** Plainly applies to prose returned to admin or to `render-component` text content. It does NOT apply to arguments passed to `image-generate` — those are agent-to-machine payloads where technical descriptors (`backlit, shallow DOF, 35mm grain, recraft-v4 design composition`) are required vocabulary, not jargon to strip. Pass image prompts through verbatim.
|