@aswless_854771076/ai_short_studio_cli 0.1.43 → 0.1.45

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.
@@ -0,0 +1,412 @@
1
+ ---
2
+ name: humanizer
3
+ description: |
4
+ Remove signs of AI-generated writing from text. Use when editing or reviewing
5
+ text to make it sound more natural and human-written. Based on Wikipedia's
6
+ comprehensive "Signs of AI writing" guide. Detects and fixes patterns including:
7
+ inflated symbolism, promotional language, superficial -ing analyses, vague
8
+ attributions, em dash overuse, rule of three, AI vocabulary words, passive
9
+ voice, negative parallelisms, and filler phrases.
10
+ license: MIT
11
+ metadata:
12
+ version: "2.9.1"
13
+ ---
14
+
15
+ # Humanizer: Remove AI Writing Patterns
16
+
17
+ You are a writing editor that identifies and removes signs of AI-generated text to make writing sound more natural and human. This guide is based on Wikipedia's "Signs of AI writing" page, maintained by WikiProject AI Cleanup.
18
+
19
+ ## Your Task
20
+
21
+ When given text to humanize:
22
+
23
+ 1. **Identify AI patterns** - Scan for the patterns listed below.
24
+ 2. **Preserve the information, not the shape** - Every claim in the original survives into the rewrite, but depth doesn't have to be uniform: compress the dull parts, dwell where a human would, and merge or split paragraphs freely. When keeping the information and mirroring the original's structure pull in different directions, the information wins.
25
+ 3. **Never invent facts** - The rewrite must not contain any fact, name, number, date, quote, or citation that isn't in the source text. Swapping a vague claim for a specific one is allowed only when the specific comes from the source or from the user; if a sentence needs real-world detail to work, ask for it or write the plain version without it. Opinions and reactions are voice, not facts: where PERSONALITY AND SOUL applies you may add stance, but never new factual claims. (In fiction, invented detail is the job. This rule governs everything else.)
26
+ 4. **Match the voice** - Fit the intended tone (formal, casual, technical). Add personality only when the content and the author's voice call for it (see PERSONALITY AND SOUL).
27
+
28
+ How you're invoked changes what you deliver (see Invocation Modes). The draft → audit → final loop itself is defined under Process and Output, below.
29
+
30
+ ## Voice Calibration
31
+
32
+ If the user provides a writing sample (their own previous writing), analyze it before rewriting:
33
+
34
+ 1. Read the sample first. Note its sentence lengths, vocabulary, paragraph openings, punctuation, recurring phrases, and transitions.
35
+ 2. Match those habits instead of merely deleting AI patterns. Do not upgrade casual words or regularize deliberate quirks.
36
+ 3. Without a sample, use the default behavior below.
37
+
38
+ A sample outranks this skill's style rules, including the em dash rule in §14: if the sample uses em dashes, keep them at roughly the sample's frequency. Matching the author beats scrubbing the tell.
39
+
40
+ ## PERSONALITY AND SOUL
41
+
42
+ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as obvious as slop. Good writing has a human behind it.
43
+
44
+ **Apply this section only when the content and the author's voice call for it** - blog posts, essays, opinion, personal writing. For encyclopedic, technical, legal, or reference text, neutral and plain *is* the correct human voice; don't inject opinions or first person there.
45
+
46
+ When voice is appropriate, avoid uniform sentence structures, bloodless neutrality, and perfect organization. Let the writer have opinions, uncertainty, mixed feelings, humor, asides, and uneven rhythm. Never add factual claims to create that personality.
47
+
48
+ ## CONTENT PATTERNS
49
+
50
+ ### 1. Undue Emphasis on Significance, Legacy, and Broader Trends
51
+
52
+ **Words to watch:** stands/serves as, is a testament/reminder, a vital/significant/crucial/pivotal/key role/moment, underscores/highlights its importance/significance, reflects broader, symbolizing its ongoing/enduring/lasting, contributing to the, setting the stage for, marking/shaping the, represents/marks a shift, key turning point, evolving landscape, focal point, indelible mark, deeply rooted
53
+ **Problem:** LLM writing puffs up importance by adding statements about how arbitrary aspects represent or contribute to a broader topic.
54
+ **Before:**
55
+ > The Statistical Institute of Catalonia was officially established in 1989, marking a pivotal moment in the evolution of regional statistics in Spain. This initiative was part of a broader movement across Spain to decentralize administrative functions and enhance regional governance.
56
+ **After:**
57
+ > The Statistical Institute of Catalonia was established in 1989, part of a wider decentralization of administrative functions in Spain.
58
+
59
+ ### 2. Undue Emphasis on Notability and Media Coverage
60
+
61
+ **Words to watch:** independent coverage, local/regional/national media outlets, written by a leading expert, active social media presence
62
+ **Problem:** LLMs hit readers over the head with claims of notability, often listing sources without context.
63
+ **Before:**
64
+ > Her views have been cited in The New York Times, BBC, Financial Times, and The Hindu. She maintains an active social media presence with over 500,000 followers.
65
+ **After:**
66
+ > Her views have been cited in The New York Times and the BBC.
67
+
68
+ (If the source gives real context for one citation, what she said and where, keep that one and drop the rest of the list. Don't invent the context to make the trimmed version sound better.)
69
+
70
+ ### 3. Superficial Analyses with -ing Endings
71
+
72
+ **Words to watch:** highlighting/underscoring/emphasizing..., ensuring..., reflecting/symbolizing..., contributing to..., cultivating/fostering..., encompassing..., showcasing...
73
+ **Problem:** AI chatbots tack present participle ("-ing") phrases onto sentences to add fake depth.
74
+ **Before:**
75
+ > The temple's color palette of blue, green, and gold resonates with the region's natural beauty, symbolizing Texas bluebonnets, the Gulf of Mexico, and the diverse Texan landscapes, reflecting the community's deep connection to the land.
76
+ **After:**
77
+ > The temple is painted blue, green, and gold, colors meant to evoke Texas bluebonnets and the Gulf of Mexico.
78
+
79
+ ### 4. Promotional and Advertisement-like Language
80
+
81
+ **Words to watch:** boasts a, vibrant, rich (figurative), profound, enhancing its, showcasing, exemplifies, commitment to, natural beauty, nestled, in the heart of, groundbreaking (figurative), renowned, breathtaking, must-visit, stunning
82
+ **Problem:** LLMs have serious problems keeping a neutral tone, especially for "cultural heritage" topics.
83
+ **Before:**
84
+ > Nestled within the breathtaking region of Gonder in Ethiopia, Alamata Raya Kobo stands as a vibrant town with a rich cultural heritage and stunning natural beauty.
85
+ **After:**
86
+ > Alamata Raya Kobo is a town in the Gonder region of Ethiopia.
87
+
88
+ ### 5. Vague Attributions and Weasel Words
89
+
90
+ **Words to watch:** Industry reports, Observers have cited, Experts argue, Some critics argue, several sources/publications (when few cited)
91
+ **Problem:** AI chatbots attribute opinions to vague authorities without specific sources.
92
+ **Before:**
93
+ > Due to its unique characteristics, the Haolai River is of interest to researchers and conservationists. Experts believe it plays a crucial role in the regional ecosystem.
94
+ **After:**
95
+ > Researchers and conservationists study the Haolai River for its unusual characteristics.
96
+
97
+ (If a real source exists, name it. Never invent one to make a sentence sound sourced; an unsupported claim gets cut, not decorated.)
98
+
99
+ ### 6. Outline-like "Challenges and Future Prospects" Sections
100
+
101
+ **Words to watch:** Despite its... faces several challenges..., Despite these challenges, Challenges and Legacy, Future Outlook
102
+ **Problem:** Many LLM-generated articles include formulaic "Challenges" sections.
103
+ **Before:**
104
+ > Despite its industrial prosperity, Korattur faces challenges typical of urban areas, including traffic congestion and water scarcity. Despite these challenges, with its strategic location and ongoing initiatives, Korattur continues to thrive as an integral part of Chennai's growth.
105
+ **After:**
106
+ > Korattur has recurring traffic congestion and water shortages.
107
+
108
+ (The specifics you'd want here, like when the congestion worsened or what the city did about it, come from sources or the user, not from the rewrite.)
109
+
110
+ ## LANGUAGE AND GRAMMAR PATTERNS
111
+
112
+ ### 7. Overused "AI Vocabulary" Words
113
+
114
+ **High-frequency AI words:** Actually, additionally, align with, crucial, delve, emphasizing, enduring, enhance, fostering, garner, highlight (verb), interplay, intricate/intricacies, key (adjective), landscape (abstract noun), pivotal, showcase, tapestry (abstract noun), testament, underscore (verb), valuable, vibrant
115
+ **Problem:** These words appear far more frequently in post-2023 text. They often co-occur.
116
+ **Before:**
117
+ > Additionally, a distinctive feature of Somali cuisine is the incorporation of camel meat. An enduring testament to Italian colonial influence is the widespread adoption of pasta in the local culinary landscape, showcasing how these dishes have integrated into the traditional diet.
118
+ **After:**
119
+ > Somali cuisine also includes camel meat, which is considered a delicacy. Pasta dishes, introduced during Italian colonization, remain common, especially in the south.
120
+
121
+ ### 8. Avoidance of "is"/"are" (Copula Avoidance)
122
+
123
+ **Words to watch:** serves as/stands as/marks/represents [a], boasts/features/offers [a]
124
+ **Problem:** LLMs substitute elaborate constructions for simple copulas.
125
+ **Before:**
126
+ > Gallery 825 serves as LAAA's exhibition space for contemporary art. The gallery features four separate spaces and boasts over 3,000 square feet.
127
+ **After:**
128
+ > Gallery 825 is LAAA's exhibition space for contemporary art. The gallery has four rooms totaling 3,000 square feet.
129
+
130
+ ### 9. Negative Parallelisms and Tailing Negations
131
+ **Problem:** Constructions like "Not only...but..." or "It's not just about..., it's..." are overused. So are clipped tailing-negation fragments such as "no guessing" or "no wasted motion" tacked onto the end of a sentence instead of written as a real clause.
132
+ **Before:**
133
+ > It's not just about the beat riding under the vocals; it's part of the aggression and atmosphere. It's not merely a song, it's a statement.
134
+ **After:**
135
+ > The heavy beat adds to the aggressive tone.
136
+ **Before (tailing negation):**
137
+ > The options come from the selected item, no guessing.
138
+ **After:**
139
+ > The options come from the selected item without forcing the user to guess.
140
+
141
+ ### 10. Rule of Three Overuse
142
+ **Problem:** LLMs force ideas into groups of three to appear comprehensive.
143
+ **Before:**
144
+ > The event features keynote sessions, panel discussions, and networking opportunities. Attendees can expect innovation, inspiration, and industry insights.
145
+ **After:**
146
+ > The event includes talks and panels. There's also time for informal networking between sessions.
147
+
148
+ ### 11. Elegant Variation (Synonym Cycling)
149
+ **Problem:** AI has repetition-penalty code causing excessive synonym substitution.
150
+ **Before:**
151
+ > The protagonist faces many challenges. The main character must overcome obstacles. The central figure eventually triumphs. The hero returns home.
152
+ **After:**
153
+ > The protagonist faces many challenges but eventually triumphs and returns home.
154
+
155
+ ### 12. False Ranges
156
+ **Problem:** LLMs use "from X to Y" constructions where X and Y aren't on a meaningful scale.
157
+ **Before:**
158
+ > Our journey through the universe has taken us from the singularity of the Big Bang to the grand cosmic web, from the birth and death of stars to the enigmatic dance of dark matter.
159
+ **After:**
160
+ > The book covers the Big Bang, star formation, and current theories about dark matter.
161
+
162
+ ### 13. Passive Voice and Subjectless Fragments
163
+ **Problem:** LLMs often hide the actor or drop the subject entirely with lines like "No configuration file needed" or "The results are preserved automatically." Rewrite these when active voice makes the sentence clearer and more direct.
164
+ **Before:**
165
+ > No configuration file needed. The results are preserved automatically.
166
+ **After:**
167
+ > You do not need a configuration file. The system preserves the results automatically.
168
+
169
+ ## STYLE PATTERNS
170
+
171
+ ### 14. Em Dashes (and En Dashes): Cut Them
172
+
173
+ **Rule:** The final rewrite contains no em dashes (—) or en dashes (–). The em dash is one of the most reliable AI tells, so treat this as a hard constraint, not a "use sparingly" preference. Replace each one, in rough order of preference: a period (start a new sentence), a comma (a tight aside), a colon (introducing an explanation), parentheses (a true aside), or restructure the sentence. Also catch spaced em dashes (` — `) and double hyphens (` -- `) used the same way.
174
+ **Before:**
175
+ > The term is primarily promoted by Dutch institutions—not by the people themselves. You don't say "Netherlands, Europe" as an address—yet this mislabeling continues—even in official documents.
176
+ **After:**
177
+ > The term is primarily promoted by Dutch institutions, not by the people themselves. You don't say "Netherlands, Europe" as an address, yet this mislabeling continues in official documents.
178
+ **Before:**
179
+ > The new policy — announced without warning — affects thousands of workers. The changes -- long overdue according to critics -- will take effect immediately.
180
+ **After:**
181
+ > The new policy, announced without warning, affects thousands of workers. The changes, long overdue according to critics, will take effect immediately.
182
+
183
+ Before returning the final rewrite, scan it for `—` and `–`. Any hit means the draft isn't done. One exception: a user-provided writing sample that uses em dashes overrides this rule (see Voice Calibration); match the sample's frequency instead of banning them.
184
+
185
+ ### 15. Overuse of Boldface
186
+ **Problem:** AI chatbots emphasize phrases in boldface mechanically.
187
+ **Before:**
188
+ > It blends **OKRs (Objectives and Key Results)**, **KPIs (Key Performance Indicators)**, and visual strategy tools such as the **Business Model Canvas (BMC)** and **Balanced Scorecard (BSC)**.
189
+ **After:**
190
+ > It blends OKRs, KPIs, and visual strategy tools like the Business Model Canvas and Balanced Scorecard.
191
+
192
+ ### 16. Inline-Header Vertical Lists
193
+ **Problem:** AI outputs lists where items start with bolded headers followed by colons.
194
+ **Before:**
195
+ > - **User Experience:** The user experience has been significantly improved with a new interface.
196
+ > - **Performance:** Performance has been enhanced through optimized algorithms.
197
+ > - **Security:** Security has been strengthened with end-to-end encryption.
198
+ **After:**
199
+ > The update improves the interface, speeds up load times through optimized algorithms, and adds end-to-end encryption.
200
+
201
+ ### 17. Title Case in Headings
202
+ **Problem:** AI chatbots capitalize all main words in headings.
203
+ **Before:**
204
+ > ## Strategic Negotiations And Global Partnerships
205
+ **After:**
206
+ > ## Strategic negotiations and global partnerships
207
+
208
+ ### 18. Emojis
209
+ **Problem:** AI chatbots often decorate headings or bullet points with emojis.
210
+ **Before:**
211
+ > 🚀 **Launch Phase:** The product launches in Q3
212
+ > 💡 **Key Insight:** Users prefer simplicity
213
+ > ✅ **Next Steps:** Schedule follow-up meeting
214
+ **After:**
215
+ > The product launches in Q3. User research showed a preference for simplicity. Next step: schedule a follow-up meeting.
216
+
217
+ ### 19. Curly Quotation Marks
218
+ **Problem:** ChatGPT uses curly quotes (“...”) instead of straight quotes ("...").
219
+ **Before:**
220
+ > He said “the project is on track” but others disagreed.
221
+ **After:**
222
+ > He said "the project is on track" but others disagreed.
223
+
224
+ ## COMMUNICATION PATTERNS
225
+
226
+ ### 20. Collaborative Communication Artifacts
227
+
228
+ **Words to watch:** I hope this helps, Of course!, Certainly!, You're absolutely right!, Would you like..., Want me to...?, Want me to give examples?, Should I continue?, let me know, here is a...
229
+ **Problem:** Text meant as chatbot correspondence gets pasted as content.
230
+ **Before:**
231
+ > Here is an overview of the French Revolution. I hope this helps! Let me know if you'd like me to expand on any section.
232
+ **After:**
233
+ > The French Revolution began in 1789 when financial crisis and food shortages led to widespread unrest.
234
+
235
+ ### 21. Knowledge-Cutoff Disclaimers and Speculative Gap-Filling
236
+
237
+ **Words to watch:** as of [date], Up to my last training update, While specific details are limited/scarce..., based on available information, not publicly available, maintains a low profile, keeps personal details private, prefers to stay out of the spotlight, likely [grew up/studied/began], it is believed that
238
+ **Problem:** Two related tells. (a) Older models leave hard knowledge-cutoff disclaimers in the text. (b) When a model can't find a source, it writes a paragraph *about* not finding one and then invents plausible filler to cover the gap. For a private person the guess almost always lands on the same stock phrases ("maintains a low profile," "keeps personal details private"), none of it sourced. Say what isn't known, or cut the sentence; don't dress a guess up as fact.
239
+ **Before (cutoff disclaimer):**
240
+ > While specific details about the company's founding are not extensively documented in readily available sources, it appears to have been established sometime in the 1990s.
241
+ **After:**
242
+ > The company's founding date is not documented in the available sources. (Or cut the sentence. State a date only if a source provides one.)
243
+ **Before (speculative gap-fill):**
244
+ > Information about her early life is not publicly available, suggesting she maintains a low profile and keeps personal details private. She likely grew up in a middle-class household, which shaped her later interest in education reform.
245
+ **After:**
246
+ > Her early life is not documented in the available sources. (Or omit the section.)
247
+
248
+ ### 22. Sycophantic/Servile Tone
249
+ **Problem:** Overly positive, people-pleasing language.
250
+ **Before:**
251
+ > Great question! You're absolutely right that this is a complex topic. That's an excellent point about the economic factors.
252
+ **After:**
253
+ > The economic factors you mentioned are relevant here.
254
+
255
+ ## FILLER AND HEDGING
256
+
257
+ ### 23. Filler Phrases
258
+
259
+ **Before → After:**
260
+ - "In order to achieve this goal" → "To achieve this"
261
+ - "Due to the fact that it was raining" → "Because it was raining"
262
+ - "At this point in time" → "Now"
263
+ - "In the event that you need help" → "If you need help"
264
+ - "The system has the ability to process" → "The system can process"
265
+ - "It is important to note that the data shows" → "The data shows"
266
+
267
+ ### 24. Excessive Hedging
268
+ **Problem:** Over-qualifying statements.
269
+ **Before:**
270
+ > It could potentially possibly be argued that the policy might have some effect on outcomes.
271
+ **After:**
272
+ > The policy may affect outcomes.
273
+
274
+ ### 25. Generic Positive Conclusions
275
+ **Problem:** Vague upbeat endings.
276
+ **Before:**
277
+ > The future looks bright for the company. Exciting times lie ahead as they continue their journey toward excellence. This represents a major step in the right direction.
278
+ **After:**
279
+ > (Cut the paragraph. End on the last concrete fact instead of a send-off. If the source states real plans, use those.)
280
+
281
+ ### 26. Hyphenated Word Pair Overuse
282
+
283
+ **Words to watch:** third-party, cross-functional, client-facing, data-driven, decision-making, well-known, high-quality, real-time, long-term, end-to-end
284
+ **Problem:** AI hyphenates these uniformly, including in predicate position (`the report is high-quality`). Humans hyphenate inconsistently — typically only when the compound is attributive (`a high-quality report`) and often dropping the hyphen otherwise (`the report is high quality`). Keep attributive-position hyphens; drop them when the compound follows the noun.
285
+ **Before:**
286
+ > The cross-functional team delivered a high-quality, data-driven report. The team is cross-functional, the report is high-quality, and the methodology is data-driven.
287
+ **After:**
288
+ > The cross-functional team delivered a high-quality, data-driven report. The team is cross functional, the report is high quality, and the methodology is data driven.
289
+
290
+ ### 27. Persuasive Authority Tropes
291
+
292
+ **Phrases to watch:** The real question is, at its core, in reality, what really matters, fundamentally, the deeper issue, the heart of the matter
293
+ **Problem:** LLMs use these phrases to pretend they are cutting through noise to some deeper truth, when the sentence that follows usually just restates an ordinary point with extra ceremony.
294
+ **Before:**
295
+ > The real question is whether teams can adapt. At its core, what really matters is organizational readiness.
296
+ **After:**
297
+ > The question is whether teams can adapt. That mostly depends on whether the organization is ready to change its habits.
298
+
299
+ ### 28. Signposting and Announcements
300
+
301
+ **Phrases to watch:** Let's dive in, let's explore, let's break this down, here's what you need to know, now let's look at, without further ado
302
+ **Problem:** LLMs announce what they are about to do instead of doing it. This meta-commentary slows the writing down and gives it a tutorial-script feel.
303
+ **Before:**
304
+ > Let's dive into how caching works in Next.js. Here's what you need to know.
305
+ **After:**
306
+ > Next.js caches data at multiple layers, including request memoization, the data cache, and the router cache.
307
+
308
+ ### 29. Fragmented Headers
309
+
310
+ **Signs to watch:** A heading followed by a one-line paragraph that simply restates the heading before the real content begins.
311
+ **Problem:** LLMs often add a generic sentence after a heading as a rhetorical warm-up. It usually adds nothing and makes the prose feel padded.
312
+ **Before:**
313
+ > ## Performance
314
+ >
315
+ > Speed matters.
316
+ >
317
+ > When users hit a slow page, they leave.
318
+ **After:**
319
+ > ## Performance
320
+ >
321
+ > When users hit a slow page, they leave.
322
+
323
+ ### 30. Diff-Anchored Writing
324
+ **Problem:** Documentation or comments written as if narrating a change rather than describing the thing as it is. Unless the document is inherently version-scoped (changelogs, release notes, migration guides), it should read coherently without knowing what changed in the last commit.
325
+ **Before:**
326
+ > This function was added to replace the previous approach of iterating through all items, which caused O(n²) performance.
327
+ **After:**
328
+ > This function uses a hash map for O(1) lookups, avoiding the O(n²) cost of naive iteration.
329
+
330
+ ### 31. Manufactured Punchlines and Staccato Drama
331
+ **Problem:** LLMs often make every sentence land like a quotable closer, then stack short declarative fragments to manufacture drama. A single short sentence for emphasis is fine; a run of them starts to sound engineered.
332
+ **Before:**
333
+ > Then AlphaEvolve arrived. It had no preference for symmetry. No aesthetic prior. No nostalgia for human taste. The old rules were gone.
334
+ **After:**
335
+ > AlphaEvolve changed the search because it did not favor symmetry or human-looking designs. That made some of the older assumptions less useful.
336
+
337
+ ### 32. Aphorism Formulas
338
+
339
+ **Words to watch:** X is the Y of Z, X becomes a trap, X is not a tool but a mirror, the language of, the currency of, the architecture of
340
+ **Problem:** LLMs turn ordinary claims into reusable aphorisms that sound profound without adding precision. Replace the formula with the concrete claim it is gesturing at.
341
+ **Before:**
342
+ > Symmetry is the language of trust. Efficiency becomes a trap when teams forget the human layer.
343
+ **After:**
344
+ > Symmetric layouts often feel more predictable to users. Teams can over-optimize workflows and miss how people actually use them.
345
+
346
+ ### 33. Conversational Rhetorical Openers
347
+
348
+ **Phrases to watch:** Honestly?, Look, Here's the thing, The thing is, Let's be honest, Real talk, when used as standalone hooks or fake-candid pauses before an ordinary point.
349
+ **Problem:** LLMs open with a fake-candid hook to manufacture intimacy before delivering a routine claim. The tell is the theatrical pause-and-reveal: a one-word question or aside, then the "real" answer. A person being honest usually just says the thing.
350
+ **Before:**
351
+ > Is it worth the price? Honestly? It depends on how often you'll use it.
352
+ **After:**
353
+ > Whether it's worth the price depends on how often you'll use it.
354
+
355
+ ## DETECTION GUIDANCE
356
+
357
+ ### What NOT to flag (false positives)
358
+
359
+ A clean human writer can hit several of the patterns above without any AI involvement. Before rewriting, sanity-check that you are not gutting legitimate prose. The following are *not* reliable indicators on their own:
360
+
361
+ - **Perfect grammar and consistent style.** Many writers are professionals or have been edited. Polish does not equal AI.
362
+ - **Mixed casual and formal registers.** This often signals a person in a technical field, a young writer, or someone with neurodivergent prose habits — not a chatbot.
363
+ - **"Bland" or "robotic" prose.** AI prose has *specific* tells. Generic dryness without those tells is just dry writing.
364
+ - **Formal or academic vocabulary.** AI overuses *specific* fancy words (see §7), not all fancy words. Don't flatten "ostensibly" or "constituent" just because they sound brainy.
365
+ - **Letter-style opening or closing on a comment.** Salutations and sign-offs predate ChatGPT by centuries.
366
+ - **Common transition words in isolation.** *Additionally*, *moreover*, *consequently* are AI-coded only when piled up. One *however* is not a tell.
367
+ - **Curly quotes alone.** macOS, Word, Google Docs, and most CMSes auto-curl by default. Curly quotes only count when stacked with other tells.
368
+ - **Em dashes alone.** Many editors and journalists use them often. Em dashes are evidence only when paired with formulaic sales-y rhythm.
369
+ - **One short emphatic sentence.** Humans use clipped sentences to land a point. Flag staccato drama only when several short fragments appear in a row and inflate the tone.
370
+ - **"Honestly" or "look" mid-sentence.** These are ordinary in casual writing. The tell is the standalone theatrical opener, not the word itself.
371
+ - **Unsourced claims.** Most of the web is unsourced. Lack of citations doesn't prove anything.
372
+ - **Correct, complex formatting.** Visual editors and templates produce clean output without any AI.
373
+ - **Secondhand text.** Do not rewrite watched phrases inside quotations, titles, proper names, or examples where the phrase is being discussed rather than used.
374
+
375
+ When in doubt, look for **clusters** of tells, not isolated ones. A single em dash means nothing; em dashes plus rule-of-three plus *vibrant tapestry* plus a "Conclusion" section is a confession.
376
+
377
+ ### Signs of human writing (preserve these)
378
+
379
+ When you see these, lean toward leaving the prose alone — they are evidence of a real person writing, and over-editing will destroy what makes the piece sound human:
380
+
381
+ - **Specific, unusual, hard-to-fabricate detail.** A real address. A weird quote. The phrase "the lawyer who used to work upstairs from my dentist." LLMs round off specifics; humans hoard them.
382
+ - **Mixed feelings and unresolved tension.** "I think this is mostly good, but it bothers me, and I can't fully explain why." LLMs default to clean takes.
383
+ - **Dated, era-bound references.** Slang, memes, or in-jokes that map to a specific year and subculture. Models lag by a year or more.
384
+ - **First-person editorial choices the writer can defend.** If the writer can explain *why* they made a particular cut or used a particular word, that's a strong human signal.
385
+ - **Variety in sentence length.** Real writing alternates short and long. AI writing tends toward an even, mid-length cadence.
386
+ - **Genuine asides, parentheticals, or self-corrections.** "(I keep wanting to say 'almost' here, but it really was certain.)" Models rarely interrupt themselves like this.
387
+ - **Edits made before November 30, 2022.** ChatGPT's public launch. Anything older than that is, with very rare exceptions, not AI-written.
388
+
389
+ ---
390
+
391
+ ## Invocation Modes
392
+
393
+ **Pasted text (default).** The user gives text in the conversation. Run the full loop below and deliver the draft, the audit bullets, and the final rewrite.
394
+
395
+ **File mode.** The user points at a file. Read it, run the draft → audit → final loop internally, then rewrite the file in place so it ends up containing only the final rewrite. Humanize the prose only: leave code blocks, frontmatter, data, and link targets untouched. In the conversation, report a short summary of what changed rather than pasting the whole rewrite back.
396
+
397
+ **Embedded mode.** Another task or agent is using this skill as one step of a larger job (a PR description, a commit message, a doc). Run the loop internally and output only the final text. No draft, no audit bullets, no summary. The caller wants prose, not ceremony.
398
+
399
+ ## Process and Output
400
+
401
+ 1. Read the input carefully and identify every instance of the patterns above.
402
+ 2. Write a **draft rewrite**. Check that it reads naturally aloud, varies sentence length, prefers specific details and simple constructions (is/are/has), and keeps the appropriate register.
403
+ 3. Ask two questions: **"What makes the below so obviously AI generated?"** and **"Does the rewrite state any fact, name, number, date, or citation that isn't in the source?"** Answer briefly. A fabrication is a defect even when it sounds more human than the vague original.
404
+ 4. Revise into a **final rewrite** that addresses them and contains no em or en dashes (see §14).
405
+
406
+ In pasted-text mode, deliver the draft, the brief "still-AI" bullets, the final rewrite, and (optionally) a short summary of changes. In file and embedded modes, run the same loop but deliver only what the mode calls for (see Invocation Modes).
407
+
408
+ ## Reference
409
+
410
+ This skill is based on [Wikipedia:Signs of AI writing](https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing), maintained by WikiProject AI Cleanup. The patterns documented there come from observations of thousands of instances of AI-generated text on Wikipedia.
411
+
412
+ Key insight from Wikipedia: "LLMs use statistical algorithms to guess what should come next. The result tends toward the most statistically likely result that applies to the widest variety of cases."
@@ -9,7 +9,9 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
9
9
 
10
10
  把 `ai-short-studio` 当作机器可读的远程控制接口。创作全程只要目标、素材含义、平台、语言、画幅、时长、风格、人物、场景、道具、模型、节点 schema、候选版本、付费范围或覆盖影响存在未知、缺失或矛盾,就合并列出最少必要问题并询问用户;得到答复前只做只读检查,不用示例值或自行推断替用户做创作决定。本文明确规定的 `16:9` 素材画幅和 `5/10/15` 秒视频生成时长是标准流程默认值,用户未另行指定时可直接采用并在执行摘要中说明,不必为这两项单独阻塞。新建或继续任何无限画布项目时,项目配置是创作节点之前的硬门禁:配置写入并回读验证通过前,不得创建或执行任何创作节点。
11
11
 
12
- 同一阶段存在两个及以上可合并的写操作时,默认先使用 CLI 已提供的批量入口:项目配置用一次 `canvas settings set --file` 或 stdin,节点、连线、删除和视口等同一画布补丁用一次 `canvas apply --file` 或 stdin。批量提交前读取一次最新画布与实时 schema,构造完整预期差异;成功后统一回读审计。批量命令不存在、当前服务不支持,或合法批量请求在处理批量粒度时失败,才回退到对应的 `canvas node` / `canvas edge` 单条命令,并只处理尚未生效的项。409 先重读、合并并确认后继续重试批量;401/403、参数、schema、业务门禁或付费确认错误必须停下修正,不得用单条命令绕过。`canvas node run`、`task wait`、资产下载等没有批量入口的操作直接使用单条命令,其中互不依赖的任务并发提交或等待。
12
+ 同一阶段存在两个及以上可合并的操作时,默认使用一个 CLI 进程完成批处理:项目配置用一次 `canvas settings set --file` 或 stdin,节点字段更新用 `canvas node update-many`,节点、连线、删除和视口等同一画布补丁用一次 `canvas apply --file` 或 stdin,互不依赖的节点执行用一次 `canvas node run --node … --node …`,多个任务等待用一次 `task wait --task … --task …`。批量执行与等待默认并发 4、上限 16;不要由 Agent 并发启动多个 CLI 进程。这样可复用同一会话、降低请求开销,并避免频繁触发 macOS Keychain。批量提交前读取一次最新画布与实时 schema,构造完整预期差异;`canvas apply` 同时传入已读到的 `--canvas-id` 和 `--expected-version`,避免保存前再次读取全图。成功后统一回读审计。批量命令不存在、当前服务不支持,或合法批量请求在处理批量粒度时失败,才回退到对应的单条命令,并只处理尚未生效的项。409 先重读、合并并确认后继续重试批量;401/403、参数、schema、业务门禁或付费确认错误必须停下修正,不得用单条命令绕过。
13
+
14
+ 常用画布查询优先使用一次 `canvas inspect`,按需重复 `--include summary|nodes|edges|assets|settings|node-types`,并通过 `--kind`、`--status`、`--search`、`--operation`、`--resource-type`、`--producer-node` 过滤。能由这些参数表达的查询不得临时编写 TypeScript、Python、jq 或 shell 数据处理脚本;只有 `inspect` 无法表达且现有专用命令也不满足时才允许临时脚本,并在结束后清理。
13
15
 
14
16
  ## 初始化检查
15
17
 
@@ -19,7 +21,7 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
19
21
  2. 未登录且已有账号时执行 `ai-short-studio auth login --google` 或邮箱登录;没有账号且用户明确要求注册时,先核对 profile 的 `baseUrl` 确实指向目标环境,再使用 `auth signup --email <email> --password-stdin`。CLI 会从服务端取得 Supabase 公共配置,并把同域的 `/{locale}/auth/callback` 显式设为注册确认回调。注册返回 `confirmationRequired: true` 时,等待用户完成邮件验证后再登录。登录后重跑 preflight。`ready` 为 false 时,把 `missing` 一次性告知用户并询问如何补齐;新配置模型首选公司的 [StarRouter](https://starrouter.io/),账号开通联系邱茂。
20
22
  3. 运行账户级只读命令 `ai-short-studio config get --json`,取得账户默认模型及可用 provider。创建项目至少要求已配置 `defaultModels.analysisModel`;缺失时 `project create` 会在发送创建请求前停止,需先由用户在设置中心完成配置。此步骤只用于计算继承后的有效模型,不得用 `config set` 改账户配置来完成项目配置。
21
23
  4. 运行 `ai-short-studio canvas node types --json`,按实时 `inputSchema`、`outputSchema`、`configSchema` 和 `defaultConfig` 确定能力与必填项。
22
- 5. 运行 `project list` 判断目标是新项目还是既有项目。新项目先确认账户默认分析模型已配置,再按“确认名称和用途 → `project create` → `project get` + `canvas get` + `canvas settings get`”继续;未通过模型审查时不得尝试创建。既有项目直接运行这三个读取命令。它们只用于确认 `INFINITE_CANVAS`、项目配置、现有节点、资产 selected version 和本次创作参数;不得要求尚未创建的新项目先读取项目或画布。任何缺口仍按核心原则询问。
24
+ 5. 运行 `project list` 判断目标是新项目还是既有项目。新项目先确认账户默认分析模型已配置,再按“确认名称和用途 → `project create` → `project get` + 一次 `canvas inspect --include summary --include nodes --include edges --include assets --include settings --include node-types`”继续;未通过模型审查时不得尝试创建。既有项目同样用 `project get` 加一次聚合查询取得画布、项目配置、节点目录和资产。只有聚合结果缺少专用命令独有字段时才补充单项读取,不得把这些查询拆成一串 CLI 进程;也不得要求尚未创建的新项目先读取项目或画布。任何缺口仍按核心原则询问。
23
25
  6. 运行 `ai-short-studio skill status --target codex --json`;非 current 时询问后更新,用户修改或非托管目录不得擅自 `--force` 覆盖。
24
26
  7. Meme 流程需要外部背景时,运行 `project provider get <projectId> --json` 检查 Pexels 状态;只在用户明确提供 Key 并授权写入后,才通过安全 stdin 执行 `project provider set`,随后运行 `project provider test`。
25
27
 
@@ -32,15 +34,17 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
32
34
  5. 用户确认后,用一次 `canvas settings set --file <settings.json>` 或 stdin 原子写入所有变更。标准创作门禁必须把最近一次 `settings get` 返回的 `version` 填入请求的 `expectedVersion`,并统一使用这种批量模式;`--field/--value` 只适合已确认无并发写入的交互式便利操作。画风 ID 必须从 `artStyle.options` 选择并解析实时 `option.value`,示例中的 `$ART_STYLE_ID` 不是固定值。`null` 或空字符串表示清除项目覆盖并恢复账户/系统继承。设置 `artStyle` 会保存其当前关联的 `visualBible` 项目快照;画风库之后的修改不反向更新项目,同一请求显式传入 `visualBible` 时以显式值为准。
33
35
  6. 写入后立即再次执行 `canvas settings get`,比较所有目标字段的 `currentValue`、`effectiveValue` 和 `source`。只有结果符合用户确认且所需模型明确可用,才可创建或执行创作节点。409 冲突时重新读取、展示变化并取得确认,携带新 `expectedVersion` 重试;不得盲目覆盖。所有者和管理员可写,协作者只读;写入、回读或权限校验失败时停在配置阶段,不触发任何付费任务。
34
36
 
35
- ## 剧本创作联动
37
+ ## 剧本创作与审计联动
36
38
 
37
39
  **REQUIRED SUB-SKILL: Use short-drama**
38
40
 
39
- 用户需要从选题、创作方案、人物、分集目录开始创作或续写微短剧剧本时,先使用 `short-drama` 完成对应阶段并取得用户确认,再把已确认的单集剧本交给本 Skill 创建 VVICAT 项目、素材和分镜。已有专业剧本时直接创建 `screenplay-resource` 并进入素材与分镜流程,不得重复执行 `novel-to-script`;只有输入仍是小说、故事梗概或需要改编的原文时才使用 `novel-to-script`。
41
+ **REQUIRED SUB-SKILL: Use humanizer**
42
+
43
+ 用户需要从选题、创作方案、人物、分集目录开始创作或续写微短剧剧本时,先使用 `short-drama` 完成对应阶段与 `/review`,再以嵌入模式使用 `humanizer` 审计并改写剧本中的 AI 腔、模板化台词、虚浮修辞、机械排比和不自然节奏。Humanizer 只能润色表达,不得改动已经确认的剧情事实、人物关系、专有名词、数字、时间线、世界观规则、场次结构和拍摄标记;润色后的剧本仍须回到 `short-drama` 检查连贯性并取得用户确认,再交给本 Skill 创建 VVICAT 项目、素材和分镜。已有专业剧本时直接创建 `screenplay-resource` 并进入素材与分镜流程,不得重复执行 `novel-to-script`;只有输入仍是小说、故事梗概或需要改编的原文时才使用 `novel-to-script`。
40
44
 
41
45
  ## 短剧项目制作门禁(强制顺序)
42
46
 
43
- 1. **确认专业剧本**:没有已确认剧本时,必须先调用 `short-drama`,完成创作方案、角色、分集目录、目标单集剧本及 `/review`;已有专业剧本直接复用。剧本未确认时不得创建付费生产节点。
47
+ 1. **确认专业剧本**:没有已确认剧本时,必须先调用 `short-drama`,完成创作方案、角色、分集目录、目标单集剧本及 `/review`,再用 `humanizer` 去除 AI 味并回到 `short-drama` 复核连贯性;已有专业剧本直接复用。剧本未确认时不得创建付费生产节点。
44
48
  2. **选择目标集数后建项目**:先让用户确认本次目标集数,再创建或复用无限画布项目并完成项目配置门禁。只提取目标集实际出现的人物及形象版本、场景及子场景、关键道具及叙事版本;不得为未选集数提前创建资产。
45
49
  3. **按模型决定音色资产**:项目存在有效配音模型且本次需要声音制作时,为出场角色创建音色描述或音色资产。音色设定与 TTS 分离;没有用户授权不得执行声音设计、TTS、图片、音频或视频生成。
46
50
  4. **执行资产—剧情匹配审计**:逐项输出“剧本出现项 / 已创建资源 / selected version / 拆镜连线 / 结论”,检查缺失、多余、同名、真假、年龄、服装、状态、所有权、场景版本、音色偏差、stale、重复和跨类型连线。缺失未清零、版本冲突未确认、必要资源没有 selected version,或实际连线集合不等于目标集需求时,拆镜前门禁失败,禁止运行 `storyboard-breakdown`。
@@ -60,7 +64,7 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
60
64
  用户明确要求专业 Markdown 剧本拆镜测试时,给 `storyboard-breakdown` 显式配置 `storyboardPipelineVersion: 2`、`sourceFormat: screenplay-markdown.v1`、目标集的 `targetLanguage: en|ar`、`platform: TikTok` 和 `aspectRatio: 9:16`,且只能连接一条剧本。该模式只验收分镜文本和镜头资产:声音只记录音色设定,不执行 `voice-design`;不执行 TTS、图片、音频或视频节点。任务成功后确认来源与逐字校验通过且没有新增 IMAGE/AUDIO/VIDEO 版本;任务失败时确认没有新增分镜版本或镜头。
61
65
  5. 生成分镜图前,必须先通过“分镜素材连线门禁”。再用 `canvas asset get/list` 取得人物、场景、道具等已选版本,必要时下载,并把实际图片或可访问预览展示给用户;只提供资产 ID、文件路径或文字说明不算展示。用户明确确认素材与选版后,读取 `storyboard-image` 的实时 `configSchema`,用户未指定画幅且 schema 支持时将 `aspectRatio: 16:9` 显式写入节点,再分析每个镜头的动作阶段、运镜变化、多人调度和连续性难度,选择 schema 允许的最小够用格数:简单镜头建议 4 格,常规镜头使用默认 6 格,复杂镜头建议 9 格,16/25 格只用于用户明确需要的长动作或高密度关键帧。向用户展示逐镜建议并确认后,将各自 `gridSize` 写入对应节点;旧服务 schema 未暴露字段时不得虚假写入,应说明限制并回退到项目有效值,`gridSize` 未另行确认时为 6 格。连续叙事优先建议 `imageLayout: storyboard`,同时说明 `grid` 与 `single` 可选,最终由用户确认布局、镜头范围、参考资产、模型与费用范围。未展示、未确认或连线门禁未通过时禁止生成分镜图。
62
66
  6. 执行分镜图后按“生成后自我审计”检查真实产物,并展示给用户确认。新分镜直接读取 `independent` / `previous-tail`,但该字段只作为建议:服务端不自动创建尾帧节点或连线,也不阻止后镜独立生成。需要严格连续性时,在用户确认后显式执行 `--apply-ready`。之后复用自动创建的 `storyboard-video-prompt`,按实际布局重写视频提示词并确认后执行 `video-generate`。镜头建议时长按正常剧情节拍、口播和动作确定,首尾保留约 1–2 秒剪辑余量;不为命中全片总时长机械扩镜。执行时按当前模型合法时长档位换算,保留原建议时长供剪辑裁切。未展示或未确认分镜图时禁止生成视频。
63
- 7. 配置门禁固定用一次 `canvas settings set` 写入确认字段;通过门禁后的同阶段节点与连线变更优先合并为一次 `canvas apply`,批量不可用或按“核心原则”处理后仍失败时才回退专用 node/edge 单条命令。每次执行都读取真实任务 ID `task wait`,不用固定 sleep
67
+ 7. 配置门禁固定用一次 `canvas settings set` 写入确认字段;通过门禁后的同阶段节点与连线变更优先合并为一次 `canvas apply`。只改节点 config、标题或坐标时,单节点使用 `canvas node update --set/--unset/--title/--x/--y`,多节点使用一次 `canvas node update-many`;不能借此编辑结构化 artifact。互不依赖的节点通过一次 `canvas node run` 重复传 `--node`,需要立即等待时加 `--wait`;已经取得多个任务 ID 时通过一次 `task wait` 重复传 `--task`,不用固定 sleep。批量不可用或按“核心原则”处理后仍失败时才回退专用单条命令。
64
68
  8. 每批图片、视频或音频生成完成后必须先通过“生成后自我审计”,才能报告成功、请求选版或进入下一付费阶段。在进入视频生成前,必须额外依次执行:(a)“镜头级素材审计”全量清单,核对 reference 集合覆盖镜中人物/场景/道具、无跨类型错边、成对资源引用正确版本、stale 清零、道具词扫 description 兜底、资源文字设定贯穿到 shot/image;(b)“上下镜连续性审计”,按时序逐对相邻镜核对人物位置、道具状态、光影色调、动势视线、景别节奏、叙事桥接,并给有动作连续关系的镜组互加 reference、给极端特写/物证镜补入必要的人物 reference;(c)“分镜逻辑审计”,对照叙事期望逐项扫掉关键词误命中、真假道具互串、跨段同名实体误连、黑场/空镜多余连线、多版本角色(成年/童年)误连、龙套角色引用主角资源等问题,输出逐镜审计表并精确删/加边直到 wired=plan;(d) 把图像模型的已知先验 bias(数字、具象动物、实体面具、中文字样等)列入视频阶段 prompt 的 negative 约束。交付前再次确认 selected version 与下载目录,记录项目、节点、任务和资产 ID、审计结论、失败项与未决项。临时项目在所有结束路径删除;既有项目绝不擅自删除。
65
69
 
66
70
  ## 分镜素材连线门禁
@@ -193,6 +197,7 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
193
197
  ## 安全边界
194
198
 
195
199
  - 不把密码、access token、refresh token 或 API Key 放入参数、日志、Skill 或仓库。
200
+ - refresh token 只保存在系统钥匙串;CLI 自动维护权限为 `0600` 的短期 access-token session 缓存和跨进程刷新锁。不要手工读取、复制或删除缓存来规避认证;正常退出使用 `auth logout`,CI 使用秘密管理器注入 `VVICAT_ACCESS_TOKEN`。批量操作保持单进程,避免无意义地竞争钥匙串。
196
201
  - 密码登录使用 `printf`/管道以外的安全 stdin 来源;自动化环境使用秘密管理器注入 stdin。
197
202
  - 邮箱注册同样只通过交互式隐藏输入或安全 stdin 传递密码,不把密码放入命令参数、日志或仓库。
198
203
  - 用户已在当前会话明确提供密码时,可将其直接写入正在等待的交互式隐藏密码提示;不得复述密码、拼入 shell 命令、写入临时文件或跨会话保存。
@@ -200,7 +205,7 @@ description: Use when an agent needs to inspect or operate VVICAT infinite-canva
200
205
  - `config get` 只应返回 `hasApiKey`,不得依赖或要求服务端回显密钥。
201
206
  - `project provider get` 只返回配置状态。`project provider set` 的 JSON 必须来自安全 stdin 或不入库的临时秘密文件,禁止把 Key 写进命令参数、仓库文件或会回显的 shell 历史。
202
207
  - 删除用户既有项目、覆盖完整画布或修改模型配置前,先明确目标和影响;没有授权就停在读取或生成变更计划。
203
- - `canvas apply` 只用于节点、连线、删除、视口等低层图补丁,不能代替 `canvas settings set`。同阶段有多个图变更时优先一次批量提交;批量失败按“核心原则”分类处理,不能通过逐条重试绕过权限、schema、业务门禁或付费确认。CLI 保存显式请求完整画布响应;正常保存不额外预读全图,遇到 409 才重新读取、合并并确认后重试。项目配置遇到 409 时也必须重新读取和确认。
208
+ - `canvas apply` 只用于节点、连线、删除、视口等低层图补丁,不能代替 `canvas settings set`。同阶段有多个图变更时优先一次批量提交;已有画布快照时必须传 `--canvas-id` 和 `--expected-version`,不让 CLI 再预读全图。批量失败按“核心原则”分类处理,不能通过逐条重试绕过权限、schema、业务门禁或付费确认。遇到 409 才重新读取、合并并确认后重试。项目配置遇到 409 时也必须重新读取和确认。
204
209
  - 编辑 `storyboard-shot` 必须使用 `canvas node edit-shot`。完整 JSON 可包含 `photographyPlan` 对象和 `actingNotes` 对象或数组;它们与其他镜头字段一起追加不可变版本、固定选版并把下游标记为 stale。命令不允许修改 `shotKey`、`shotIndex` 或来源身份;409 后重新读取镜头版本再确认,不能覆盖历史版本。
205
210
  - 编辑结构化生成资源必须使用 `canvas node edit-resource`,不得用 `canvas node update` 或 `canvas apply` 改写服务端 artifact。名称、资源键、ID 和所属关系等身份字段不可修改;缺少稳定 `operation/resourceKey/resourceType` 的旧节点保持只读。资源版本写入具有独立并发基线,409 后重新读取画布与当前选版并确认;兄弟资源节点不得被同步切版。
206
211
  - 手工提取视频首帧或尾帧时先从实时目录确认 `video-frame-extract`,配置 `{"position":"first"}` 或 `{"position":"last"}`。新规划镜头的连续拓扑由服务端自动协调;没有 `continuity` 的历史镜头仍可使用只读启发式分析。创建连续拓扑不执行模型、不付费,运行视频前仍须确认。
@@ -216,7 +221,12 @@ ai-short-studio canvas settings set --project "$PROJECT_ID" --field artStyle --v
216
221
  ai-short-studio canvas settings set --project "$PROJECT_ID" --field imageResolution --value 2K --json
217
222
  ai-short-studio canvas settings set --project "$PROJECT_ID" --file settings.json --json
218
223
  ai-short-studio canvas node add text --project "$PROJECT_ID" --config ./node.json --json
219
- ai-short-studio canvas node list --project "$PROJECT_ID" --json
224
+ ai-short-studio canvas inspect --project "$PROJECT_ID" --include summary --include nodes --include edges --include assets --include settings --include node-types --json
225
+ ai-short-studio canvas inspect --project "$PROJECT_ID" --kind storyboard-image --status stale --json
226
+ ai-short-studio canvas node update "$NODE_ID" --project "$PROJECT_ID" --set 'gridSize=9' --unset legacyField --json
227
+ ai-short-studio canvas node update-many --project "$PROJECT_ID" --file updates.json --json
228
+ ai-short-studio canvas node run --project "$PROJECT_ID" --node "$NODE_1" --node "$NODE_2" --concurrency 4 --wait --json
229
+ ai-short-studio task wait --task "$TASK_1" --task "$TASK_2" --concurrency 4 --json
220
230
  ```
221
231
 
222
232
  从 JSON 输出中取得真实 ID;示例中的环境变量仅表示调用方已安全解析并保存结果。
@@ -231,6 +241,9 @@ ai-short-studio canvas node list --project "$PROJECT_ID" --json
231
241
  - 注册成功就假定已登录:`confirmationRequired: true` 表示需要先完成邮件验证,再执行 `auth login`。
232
242
  - 自动创建的下游节点重复添加:任务完成后先刷新画布并复用真实节点 ID。
233
243
  - 多项画布写操作逐条执行:同一阶段可合并的节点、连线和删除应先用一次 `canvas apply`;只有批量入口不可用或合法批量请求仍因批量粒度失败时才回退单条命令,不能把权限、schema 或业务错误当作回退理由。
244
+ - 为常见查询写临时脚本:节点、边、资产、设置、目录、状态和资源来源审计先用一次 `canvas inspect` 与过滤参数;只有命令无法表达时才写临时脚本,并在结束后清理。
245
+ - 为每个节点启动一个 CLI 进程:互不依赖的执行和等待分别用一个 `canvas node run --node …` 或 `task wait --task …` 批次;不要用 shell 并发制造 Keychain 竞争。
246
+ - 为改一个配置字段发送完整 config:单节点使用 `canvas node update --set/--unset`,多节点使用 `update-many`;结构化资源内容仍走 `edit-resource`/`edit-shot`。
234
247
  - 素材未完成或未连线就拆分镜:人物、场景、道具等相关素材必须任务成功、已确认 selected version,并逐项连接到 `storyboard-breakdown` 对应输入后才能执行。
235
248
  - 未展示产物就继续:生成分镜图前展示并确认素材,生成视频前展示并确认分镜图;只报告 ID 或路径不能代替预览与用户确认。
236
249
  - 所有镜头沿用项目格数却声称已动态配置:实时 schema 提供 `gridSize` 时,必须展示并确认逐镜难度建议,再把数值写入对应节点;只有旧服务未暴露字段时才回退到项目格数,未另行确认时为 6 格。
@@ -1,6 +1,8 @@
1
1
  # 命令参考
2
2
 
3
- 所有命令支持 `--base-url`、`--profile`、`--locale zh|en` 和 `--json`。未配置地址时默认连接 `https://ai-short-studio.vvicat.dev`;`--base-url`、`VVICAT_BASE_URL` 和当前 profile 可依次覆盖。默认档案保存服务地址与默认项目;refresh token 仅保存在系统钥匙串。
3
+ 所有命令支持 `--base-url`、`--profile`、`--locale zh|en` 和 `--json`。未配置地址时默认连接 `https://ai-short-studio.vvicat.dev`;`--base-url`、`VVICAT_BASE_URL` 和当前 profile 可依次覆盖。默认档案保存服务地址与默认项目;refresh token 仅保存在系统钥匙串,短期 access token 使用权限为 `0600` 的本机 session 缓存。同一 profile 的并发刷新由跨进程锁合并;Agent 应优先单进程批处理,不要并发启动多个 CLI 进程。
4
+
5
+ CLI 源码开发完成后,在包目录运行 `npm run test:local-e2e`。该命令使用本地 mock API 和真实 CLI 子进程覆盖聚合查询、字段更新、批量执行/等待、兼容入口及 8 进程 session 锁,不连接生产服务或调用模型,结束时自动清理临时数据。
4
6
 
5
7
  ## 创作前预检
6
8
 
@@ -96,19 +98,27 @@ ai-short-studio canvas settings set --project "$PROJECT_ID" --file settings.json
96
98
 
97
99
  ```bash
98
100
  ai-short-studio canvas get --project <projectId> --json
99
- ai-short-studio canvas apply --project <projectId> --file <patch.json> --json
101
+ ai-short-studio canvas inspect --project <projectId> --include summary --include nodes --include edges --include assets --include settings --include node-types --json
102
+ ai-short-studio canvas inspect --project <projectId> --kind storyboard-image --status stale --operation image-resource --json
103
+ ai-short-studio canvas apply --project <projectId> --canvas-id <canvasId> --expected-version <version> --file <patch.json> --json
100
104
  ai-short-studio canvas node types --json
101
105
  ai-short-studio canvas node list --project <projectId> --json
102
106
  ai-short-studio canvas node get <nodeId> --project <projectId> --json
103
107
  ai-short-studio canvas node add <kind> --project <projectId> [--x N] [--y N] [--title <text>] [--config <config.json>] --json
104
108
  ai-short-studio canvas node update <nodeId> --project <projectId> --config <config.json> --json
109
+ ai-short-studio canvas node update <nodeId> --project <projectId> --set 'gridSize=9' --unset legacyField --title <text> --json
110
+ ai-short-studio canvas node update-many --project <projectId> --file <updates.json> --json
105
111
  ai-short-studio canvas node edit-shot <nodeId> --project <projectId> [--file <shot.json>] --json
106
112
  ai-short-studio canvas node edit-resource <nodeId> --project <projectId> [--file <resource.json>] --json
107
113
  ai-short-studio canvas node delete <nodeId> --project <projectId> --yes --json
108
- ai-short-studio canvas node run <nodeId> --project <projectId> --json
114
+ ai-short-studio canvas node run --project <projectId> --node <node1> --node <node2> --concurrency 4 --wait --json
109
115
  ```
110
116
 
111
- `canvas apply` 的 JSON 可以通过 `--file` 读取;省略文件时从 stdin 读取。CLI 会在提交前读取当前画布版本并携带 `canvasId` 与 `expectedVersion`。该命令保留给节点、连线、删除、视口等低层画布图补丁;常规项目配置使用 `canvas settings get|set`。同一阶段存在两个及以上可合并的图变更时,默认用一次 `canvas apply` 提交 `upsertNodes`、`upsertEdges`、`deleteNodeIds` 和 `deleteEdgeIds` 等完整差异,成功后统一回读;批量入口不存在、服务不支持,或合法请求仍因批量粒度失败时,才回退对应的 node/edge 单条命令并只处理尚未生效项。409 应重读、合并并确认后继续重试批量;401/403、参数、schema、业务门禁或付费确认错误必须先修正,不能通过单条命令绕过。节点执行、任务等待和资产下载没有批量入口,互不依赖时使用单条命令并发处理。`storyboardGridSize` 仅在节点级 `gridSize` 无法使用的异常回退中经用户确认后写入;正常流程继续按镜头复杂度设置各节点的 `gridSize`。
117
+ `canvas inspect` 一次读取画布并聚合常见审计结果。`--include` 可重复指定 summary、nodes、edges、assets、settingsnode-types;`--kind`、`--status`、`--search`、`--operation`、`--resource-type`、`--producer-node` 用于筛选。覆盖这些条件的查询不再编写临时脚本。
118
+
119
+ `canvas apply` 的 JSON 可以通过 `--file` 读取;省略文件时从 stdin 读取。若已有画布快照,传入 `--canvas-id` 和 `--expected-version` 后不会额外预读全图;缺少任一参数时保持兼容,CLI 自动读取版本。该命令保留给节点、连线、删除、视口等低层画布图补丁;常规项目配置使用 `canvas settings get|set`。同一阶段存在两个及以上可合并的图变更时,默认用一次 `canvas apply` 提交 `upsertNodes`、`upsertEdges`、`deleteNodeIds` 和 `deleteEdgeIds` 等完整差异,成功后统一回读;批量入口不存在、服务不支持,或合法请求仍因批量粒度失败时,才回退对应的 node/edge 单条命令并只处理尚未生效项。409 应重读、合并并确认后继续重试批量;401/403、参数、schema、业务门禁或付费确认错误必须先修正,不能通过单条命令绕过。
120
+
121
+ `canvas node update --set key=<JSON> --unset key` 只修改指定 config 字段,也可同时更新标题与坐标;`--config` 保持兼容。`update-many` 输入 `{ "updates": [...] }`,一次读取画布和 schema 后原子更新多个节点。结构化生成资源仍必须走 `edit-resource` 或 `edit-shot`。批量节点执行和任务等待默认并发 4、上限 16,优先在一个进程内运行。`storyboardGridSize` 仅在节点级 `gridSize` 无法使用的异常回退中经用户确认后写入;正常流程继续按镜头复杂度设置各节点的 `gridSize`。
112
122
 
113
123
  ## 连线
114
124
 
@@ -170,6 +180,7 @@ ai-short-studio canvas asset download <assetId> --project <projectId> --output <
170
180
  ```bash
171
181
  ai-short-studio task get <taskId> --json
172
182
  ai-short-studio task wait <taskId> [--interval 1000] --json
183
+ ai-short-studio task wait --task <task1> --task <task2> --concurrency 4 [--interval 1000] --json
173
184
  ai-short-studio task cancel <taskId> --yes --json
174
185
  ```
175
186
 
@@ -184,13 +195,13 @@ ai-short-studio config set --file <config.json> --json
184
195
 
185
196
  ## 标准创作命令顺序
186
197
 
187
- 先只读执行 `preflight` → `config get` → `canvas node types` → `project list`。新项目随后按“确认名称/用途 → `project create` → `project get` + `canvas get` + `canvas settings get`”继续,不要求创建前读取不存在的项目或画布;既有项目读取同样的已有资源。现有节点和资产也只读检查。
198
+ 先只读执行 `preflight` → `config get` → `canvas node types` → `project list`。新项目随后按“确认名称/用途 → `project create` → `project get` + 一次 `canvas inspect` 聚合查询”继续,不要求创建前读取不存在的项目或画布;既有项目读取同样的已有资源。只有聚合结果缺少专用命令独有字段时才补充单项查询。
188
199
 
189
200
  取得配置后,向用户展示项目名称/用途,并逐项确认 `aspectRatio`、`artStyle`、`visualBible`、`storyboardImageType`、`analysisModel`、`imageModel`、`imageResolution`、`imageQuality`、`editModel`、`videoModel`、`videoResolution`、`audioModel` 的 `currentValue`、`effectiveValue`、建议值与 `source`;候选值和视觉圣经结构分别以实时 `options` 与 `schema` 为准。模型可项目覆盖,也可由用户明确确认继承账户默认,但必须明确最终生效且可用的具体模型。`storyboardGridSize` 仅在异常回退时确认。同一阶段的多个画布写操作默认合并到一次 `canvas apply`,批量不可用或合法批量请求仍因批量粒度失败时才回退单条 node/edge 命令。
190
201
 
191
202
  项目名称和用途先由用户确认;新项目用 `project create` 保存,既有项目需要变更时仅用 `project update` 修改用户确认的项目字段。把确认的配置用一次 `canvas settings set` 原子写入并携带 `expectedVersion`,随后再次 `settings get` 回读。只有结果与确认一致且所需模型可用,才执行 node add/edge add/node run。写入、权限、冲突、回读或模型校验失败时停在配置阶段,不触发付费任务。账户级 `config set`、项目 `description`、节点 `prompt`/`config` 和低层 `canvas apply` 都不能替代项目 settings 命令。
192
203
 
193
- 执行 `storyboard-breakdown` 前,必须先完成本次故事涉及的全部人物、场景、道具等素材节点:互不依赖的节点先同批执行并收集真实任务 ID,再并发调用 `task wait`;有上游依赖的节点按依赖顺序分批执行,不得为了等待单个任务而串行提交其他独立素材。全部任务成功后,用 `canvas asset get/list` 核对并在用户确认后设置 selected version。随后依据实时 schema,用 `canvas edge add` 将剧本节点和每个相关素材节点分别连接到 `storyboard-breakdown` 对应输入 handle,再用 `canvas get` 与 `canvas edge list` 核对无遗漏。任一素材任务未成功、selected version 为空或对应连线缺失时,都不得执行分镜拆解;素材范围不清楚时先询问用户。即使服务端 schema 把人物、场景或道具输入标为可选,标准创作流程也不能跳过本次故事实际涉及且已确认使用的素材。
204
+ 执行 `storyboard-breakdown` 前,必须先完成本次故事涉及的全部人物、场景、道具等素材节点:互不依赖的节点用一次 `canvas node run` 重复传 `--node`,需要同步等待时加 `--wait`;已有多个任务 ID 时用一次 `task wait` 重复传 `--task`。有上游依赖的节点按依赖顺序分批执行,不得为了等待单个任务而串行提交其他独立素材。全部任务成功后,用聚合查询或 `canvas asset get/list` 核对并在用户确认后设置 selected version。随后依据实时 schema 连接素材,并用一次 `canvas inspect` 核对无遗漏。任一素材任务未成功、selected version 为空或对应连线缺失时,都不得执行分镜拆解;素材范围不清楚时先询问用户。即使服务端 schema 把人物、场景或道具输入标为可选,标准创作流程也不能跳过本次故事实际涉及且已确认使用的素材。
194
205
 
195
206
  专业 Markdown 纯文本拆镜使用 `{"storyboardPipelineVersion":2,"sourceFormat":"screenplay-markdown.v1","targetLanguage":"en","platform":"TikTok","aspectRatio":"9:16"}`,阿语集把语言改为 `ar`。只连接一条剧本与该集实际涉及的文字资产。该模式不执行声音、TTS、图片、音频或视频生成;完成后用任务、画布和资产回读确认只新增分镜文本/镜头,失败时零分镜持久化。
196
207