{"id":"pacing-intensity-evaluator","title":"Plot a prose intensity curve per sentence and flag where a tense passage loses velocity","description":"Scores each sentence of narrative prose for pace from sentence length, share of one-syllable words, exclamation and question marks and, if you supply a word list, action-word share; smooths the scores into an intensity curve; and reports stalls, the spans where intensity falls well below an earlier peak. For a writing tool or editor agent checking an action or tension scene. A fixed-weight heuristic, not a model of reader experience: the weights are authored and unvalidated against human ratings, English only, and action words match exactly (no stemming, no built-in verb list). It does not rewrite text or judge quality.","roi":"Locates the sentences where a scene sags so a model or editor reads only those; no model call, 100,000 characters per $0.005.","audience":"agent-infra","package":"context-evidence-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/pacing-intensity-evaluator","path":"/api/v1/pacing-intensity-evaluator","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":100000,"minLength":1,"description":"Prose to score."},"actionWords":{"type":"array","items":{"type":"string","maxLength":40,"minLength":1,"description":"Exact word, matched case-insensitively."},"maxItems":500,"description":"Your own action-word list. Without it the action component is left out and the other weights are renormalized."},"expect":{"type":"string","enum":["any","tense"],"description":"tense: fail if the curve never reaches peakThreshold. any (default): only stalls after a peak can fail."},"window":{"type":"integer","minimum":1,"maximum":20,"description":"Sentences in the trailing moving average. Default 3."},"stallDrop":{"type":"number","minimum":0.05,"maximum":0.9,"description":"Fall below the running peak that counts as a stall. Default 0.25 on the 0-1 intensity scale."},"peakThreshold":{"type":"number","minimum":0.1,"maximum":0.95,"description":"Smoothed intensity a passage must reach before a later fall can be a stall. Default 0.55."},"minSentences":{"type":"integer","minimum":2,"maximum":100,"description":"Fewer scored sentences is unknown. Default 8."}}},"resultSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"summary":{"type":"object","additionalProperties":false,"properties":{"sentences":{"type":"integer"},"mean":{"type":"number"},"peak":{"type":"number"},"peakSentence":{"type":"integer","description":"Index of the sentence with the highest smoothed intensity, -1 if none."},"reachedPeak":{"type":"boolean"},"syllableCoverage":{"type":"number","description":"Share of words whose syllable count the rules could decide; the rest are left out of the one-syllable share."}}},"curve":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"index":{"type":"integer"},"start":{"type":"integer","description":"UTF-16 offset."},"end":{"type":"integer"},"words":{"type":"integer"},"intensity":{"type":"number"},"smoothed":{"type":"number"}}},"maxItems":3000},"stalls":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"startSentence":{"type":"integer"},"endSentence":{"type":"integer"},"start":{"type":"integer"},"end":{"type":"integer"},"peak":{"type":"number"},"trough":{"type":"number"},"recovered":{"type":"boolean"}}},"maxItems":200},"truncated":{"type":"boolean","description":"True when the curve was cut to its first 3000 sentences; stalls and summary cover the whole text."},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"outputSchema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"summary":{"type":"object","additionalProperties":false,"properties":{"sentences":{"type":"integer"},"mean":{"type":"number"},"peak":{"type":"number"},"peakSentence":{"type":"integer","description":"Index of the sentence with the highest smoothed intensity, -1 if none."},"reachedPeak":{"type":"boolean"},"syllableCoverage":{"type":"number","description":"Share of words whose syllable count the rules could decide; the rest are left out of the one-syllable share."}}},"curve":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"index":{"type":"integer"},"start":{"type":"integer","description":"UTF-16 offset."},"end":{"type":"integer"},"words":{"type":"integer"},"intensity":{"type":"number"},"smoothed":{"type":"number"}}},"maxItems":3000},"stalls":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"startSentence":{"type":"integer"},"endSentence":{"type":"integer"},"start":{"type":"integer"},"end":{"type":"integer"},"peak":{"type":"number"},"trough":{"type":"number"},"recovered":{"type":"boolean"}}},"maxItems":200},"truncated":{"type":"boolean","description":"True when the curve was cut to its first 3000 sentences; stalls and summary cover the whole text."},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]},"example":{"text":"He ran. The door slammed behind him! Boots hit the stairs, two at a time. Who was following? Glass broke somewhere above. He did not look back. The corridor stretched on for what seemed like an eternity, lined with portraits of ancestors whose names he had never learned and whose faces told him nothing at all. Eventually the hallway opened onto a wide and quiet room full of old furniture covered in sheets, where dust hung in the afternoon light and nothing at all moved.","expect":"tense"},"openapiOperation":{"operationId":"pacing_intensity_evaluator","summary":"Plot a prose intensity curve per sentence and flag where a tense passage loses velocity","description":"Scores each sentence of narrative prose for pace from sentence length, share of one-syllable words, exclamation and question marks and, if you supply a word list, action-word share; smooths the scores into an intensity curve; and reports stalls, the spans where intensity falls well below an earlier peak. For a writing tool or editor agent checking an action or tension scene. A fixed-weight heuristic, not a model of reader experience: the weights are authored and unvalidated against human ratings, English only, and action words match exactly (no stemming, no built-in verb list). It does not rewrite text or judge quality.\n\nPrice: 0.005 USDC on Base (x402).","x-x402-price-usdc":"0.005","x-x402-amount":"5000","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-audience":"agent-infra","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/pacing-intensity-evaluator","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text"],"properties":{"text":{"type":"string","maxLength":100000,"minLength":1,"description":"Prose to score."},"actionWords":{"type":"array","items":{"type":"string","maxLength":40,"minLength":1,"description":"Exact word, matched case-insensitively."},"maxItems":500,"description":"Your own action-word list. Without it the action component is left out and the other weights are renormalized."},"expect":{"type":"string","enum":["any","tense"],"description":"tense: fail if the curve never reaches peakThreshold. any (default): only stalls after a peak can fail."},"window":{"type":"integer","minimum":1,"maximum":20,"description":"Sentences in the trailing moving average. Default 3."},"stallDrop":{"type":"number","minimum":0.05,"maximum":0.9,"description":"Fall below the running peak that counts as a stall. Default 0.25 on the 0-1 intensity scale."},"peakThreshold":{"type":"number","minimum":0.1,"maximum":0.95,"description":"Smoothed intensity a passage must reach before a later fall can be a stall. Default 0.55."},"minSentences":{"type":"integer","minimum":2,"maximum":100,"description":"Fewer scored sentences is unknown. Default 8."}}},"example":{"text":"He ran. The door slammed behind him! Boots hit the stairs, two at a time. Who was following? Glass broke somewhere above. He did not look back. The corridor stretched on for what seemed like an eternity, lined with portraits of ancestors whose names he had never learned and whose faces told him nothing at all. Eventually the hallway opened onto a wide and quiet room full of old furniture covered in sheets, where dust hung in the afternoon light and nothing at all moved.","expect":"tense"}}}},"responses":{"200":{"description":"Paid result with provenance","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"summary":{"type":"object","additionalProperties":false,"properties":{"sentences":{"type":"integer"},"mean":{"type":"number"},"peak":{"type":"number"},"peakSentence":{"type":"integer","description":"Index of the sentence with the highest smoothed intensity, -1 if none."},"reachedPeak":{"type":"boolean"},"syllableCoverage":{"type":"number","description":"Share of words whose syllable count the rules could decide; the rest are left out of the one-syllable share."}}},"curve":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"index":{"type":"integer"},"start":{"type":"integer","description":"UTF-16 offset."},"end":{"type":"integer"},"words":{"type":"integer"},"intensity":{"type":"number"},"smoothed":{"type":"number"}}},"maxItems":3000},"stalls":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"startSentence":{"type":"integer"},"endSentence":{"type":"integer"},"start":{"type":"integer"},"end":{"type":"integer"},"peak":{"type":"number"},"trough":{"type":"number"},"recovered":{"type":"boolean"}}},"maxItems":200},"truncated":{"type":"boolean","description":"True when the curve was cut to its first 3000 sentences; stalls and summary cover the whole text."},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]}}}},"400":{"description":"Invalid request (no payment consumed)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Invalid X-API-KEY","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Payment required or invalid","content":{"application/json":{"schema":{"type":"object","description":"x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"code":{"type":"string"},"resource":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}},"extensions":{"type":"object"}}}}}},"502":{"description":"Upstream failure; the payment is released or not settled","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"links":{"docs":"https://agents.writerslogic.com/docs/pacing-intensity-evaluator/","docsJson":"https://agents.writerslogic.com/docs/pacing-intensity-evaluator.json","sample":"https://agents.writerslogic.com/api/v1/samples/pacing-intensity-evaluator","openapi":"https://agents.writerslogic.com/openapi.json","catalog":"https://agents.writerslogic.com/api/v1/catalog","verifyProvenance":"https://agents.writerslogic.com/api/v1/verify-provenance","index":"https://agents.writerslogic.com/docs/index.json"}}