kollabor 0.4.9__py3-none-any.whl → 0.4.15__py3-none-any.whl

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.
Files changed (192) hide show
  1. agents/__init__.py +2 -0
  2. agents/coder/__init__.py +0 -0
  3. agents/coder/agent.json +4 -0
  4. agents/coder/api-integration.md +2150 -0
  5. agents/coder/cli-pretty.md +765 -0
  6. agents/coder/code-review.md +1092 -0
  7. agents/coder/database-design.md +1525 -0
  8. agents/coder/debugging.md +1102 -0
  9. agents/coder/dependency-management.md +1397 -0
  10. agents/coder/git-workflow.md +1099 -0
  11. agents/coder/refactoring.md +1454 -0
  12. agents/coder/security-hardening.md +1732 -0
  13. agents/coder/system_prompt.md +1448 -0
  14. agents/coder/tdd.md +1367 -0
  15. agents/creative-writer/__init__.py +0 -0
  16. agents/creative-writer/agent.json +4 -0
  17. agents/creative-writer/character-development.md +1852 -0
  18. agents/creative-writer/dialogue-craft.md +1122 -0
  19. agents/creative-writer/plot-structure.md +1073 -0
  20. agents/creative-writer/revision-editing.md +1484 -0
  21. agents/creative-writer/system_prompt.md +690 -0
  22. agents/creative-writer/worldbuilding.md +2049 -0
  23. agents/data-analyst/__init__.py +30 -0
  24. agents/data-analyst/agent.json +4 -0
  25. agents/data-analyst/data-visualization.md +992 -0
  26. agents/data-analyst/exploratory-data-analysis.md +1110 -0
  27. agents/data-analyst/pandas-data-manipulation.md +1081 -0
  28. agents/data-analyst/sql-query-optimization.md +881 -0
  29. agents/data-analyst/statistical-analysis.md +1118 -0
  30. agents/data-analyst/system_prompt.md +928 -0
  31. agents/default/__init__.py +0 -0
  32. agents/default/agent.json +4 -0
  33. agents/default/dead-code.md +794 -0
  34. agents/default/explore-agent-system.md +585 -0
  35. agents/default/system_prompt.md +1448 -0
  36. agents/kollabor/__init__.py +0 -0
  37. agents/kollabor/analyze-plugin-lifecycle.md +175 -0
  38. agents/kollabor/analyze-terminal-rendering.md +388 -0
  39. agents/kollabor/code-review.md +1092 -0
  40. agents/kollabor/debug-mcp-integration.md +521 -0
  41. agents/kollabor/debug-plugin-hooks.md +547 -0
  42. agents/kollabor/debugging.md +1102 -0
  43. agents/kollabor/dependency-management.md +1397 -0
  44. agents/kollabor/git-workflow.md +1099 -0
  45. agents/kollabor/inspect-llm-conversation.md +148 -0
  46. agents/kollabor/monitor-event-bus.md +558 -0
  47. agents/kollabor/profile-performance.md +576 -0
  48. agents/kollabor/refactoring.md +1454 -0
  49. agents/kollabor/system_prompt copy.md +1448 -0
  50. agents/kollabor/system_prompt.md +757 -0
  51. agents/kollabor/trace-command-execution.md +178 -0
  52. agents/kollabor/validate-config.md +879 -0
  53. agents/research/__init__.py +0 -0
  54. agents/research/agent.json +4 -0
  55. agents/research/architecture-mapping.md +1099 -0
  56. agents/research/codebase-analysis.md +1077 -0
  57. agents/research/dependency-audit.md +1027 -0
  58. agents/research/performance-profiling.md +1047 -0
  59. agents/research/security-review.md +1359 -0
  60. agents/research/system_prompt.md +492 -0
  61. agents/technical-writer/__init__.py +0 -0
  62. agents/technical-writer/agent.json +4 -0
  63. agents/technical-writer/api-documentation.md +2328 -0
  64. agents/technical-writer/changelog-management.md +1181 -0
  65. agents/technical-writer/readme-writing.md +1360 -0
  66. agents/technical-writer/style-guide.md +1410 -0
  67. agents/technical-writer/system_prompt.md +653 -0
  68. agents/technical-writer/tutorial-creation.md +1448 -0
  69. core/__init__.py +0 -2
  70. core/application.py +343 -88
  71. core/cli.py +229 -10
  72. core/commands/menu_renderer.py +463 -59
  73. core/commands/registry.py +14 -9
  74. core/commands/system_commands.py +2461 -14
  75. core/config/loader.py +151 -37
  76. core/config/service.py +18 -6
  77. core/events/bus.py +29 -9
  78. core/events/executor.py +205 -75
  79. core/events/models.py +27 -8
  80. core/fullscreen/command_integration.py +20 -24
  81. core/fullscreen/components/__init__.py +10 -1
  82. core/fullscreen/components/matrix_components.py +1 -2
  83. core/fullscreen/components/space_shooter_components.py +654 -0
  84. core/fullscreen/plugin.py +5 -0
  85. core/fullscreen/renderer.py +52 -13
  86. core/fullscreen/session.py +52 -15
  87. core/io/__init__.py +29 -5
  88. core/io/buffer_manager.py +6 -1
  89. core/io/config_status_view.py +7 -29
  90. core/io/core_status_views.py +267 -347
  91. core/io/input/__init__.py +25 -0
  92. core/io/input/command_mode_handler.py +711 -0
  93. core/io/input/display_controller.py +128 -0
  94. core/io/input/hook_registrar.py +286 -0
  95. core/io/input/input_loop_manager.py +421 -0
  96. core/io/input/key_press_handler.py +502 -0
  97. core/io/input/modal_controller.py +1011 -0
  98. core/io/input/paste_processor.py +339 -0
  99. core/io/input/status_modal_renderer.py +184 -0
  100. core/io/input_errors.py +5 -1
  101. core/io/input_handler.py +211 -2452
  102. core/io/key_parser.py +7 -0
  103. core/io/layout.py +15 -3
  104. core/io/message_coordinator.py +111 -2
  105. core/io/message_renderer.py +129 -4
  106. core/io/status_renderer.py +147 -607
  107. core/io/terminal_renderer.py +97 -51
  108. core/io/terminal_state.py +21 -4
  109. core/io/visual_effects.py +816 -165
  110. core/llm/agent_manager.py +1063 -0
  111. core/llm/api_adapters/__init__.py +44 -0
  112. core/llm/api_adapters/anthropic_adapter.py +432 -0
  113. core/llm/api_adapters/base.py +241 -0
  114. core/llm/api_adapters/openai_adapter.py +326 -0
  115. core/llm/api_communication_service.py +167 -113
  116. core/llm/conversation_logger.py +322 -16
  117. core/llm/conversation_manager.py +556 -30
  118. core/llm/file_operations_executor.py +84 -32
  119. core/llm/llm_service.py +934 -103
  120. core/llm/mcp_integration.py +541 -57
  121. core/llm/message_display_service.py +135 -18
  122. core/llm/plugin_sdk.py +1 -2
  123. core/llm/profile_manager.py +1183 -0
  124. core/llm/response_parser.py +274 -56
  125. core/llm/response_processor.py +16 -3
  126. core/llm/tool_executor.py +6 -1
  127. core/logging/__init__.py +2 -0
  128. core/logging/setup.py +34 -6
  129. core/models/resume.py +54 -0
  130. core/plugins/__init__.py +4 -2
  131. core/plugins/base.py +127 -0
  132. core/plugins/collector.py +23 -161
  133. core/plugins/discovery.py +37 -3
  134. core/plugins/factory.py +6 -12
  135. core/plugins/registry.py +5 -17
  136. core/ui/config_widgets.py +128 -28
  137. core/ui/live_modal_renderer.py +2 -1
  138. core/ui/modal_actions.py +5 -0
  139. core/ui/modal_overlay_renderer.py +0 -60
  140. core/ui/modal_renderer.py +268 -7
  141. core/ui/modal_state_manager.py +29 -4
  142. core/ui/widgets/base_widget.py +7 -0
  143. core/updates/__init__.py +10 -0
  144. core/updates/version_check_service.py +348 -0
  145. core/updates/version_comparator.py +103 -0
  146. core/utils/config_utils.py +685 -526
  147. core/utils/plugin_utils.py +1 -1
  148. core/utils/session_naming.py +111 -0
  149. fonts/LICENSE +21 -0
  150. fonts/README.md +46 -0
  151. fonts/SymbolsNerdFont-Regular.ttf +0 -0
  152. fonts/SymbolsNerdFontMono-Regular.ttf +0 -0
  153. fonts/__init__.py +44 -0
  154. {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/METADATA +54 -4
  155. kollabor-0.4.15.dist-info/RECORD +228 -0
  156. {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/top_level.txt +2 -0
  157. plugins/agent_orchestrator/__init__.py +39 -0
  158. plugins/agent_orchestrator/activity_monitor.py +181 -0
  159. plugins/agent_orchestrator/file_attacher.py +77 -0
  160. plugins/agent_orchestrator/message_injector.py +135 -0
  161. plugins/agent_orchestrator/models.py +48 -0
  162. plugins/agent_orchestrator/orchestrator.py +403 -0
  163. plugins/agent_orchestrator/plugin.py +976 -0
  164. plugins/agent_orchestrator/xml_parser.py +191 -0
  165. plugins/agent_orchestrator_plugin.py +9 -0
  166. plugins/enhanced_input/box_styles.py +1 -0
  167. plugins/enhanced_input/color_engine.py +19 -4
  168. plugins/enhanced_input/config.py +2 -2
  169. plugins/enhanced_input_plugin.py +61 -11
  170. plugins/fullscreen/__init__.py +6 -2
  171. plugins/fullscreen/example_plugin.py +1035 -222
  172. plugins/fullscreen/setup_wizard_plugin.py +592 -0
  173. plugins/fullscreen/space_shooter_plugin.py +131 -0
  174. plugins/hook_monitoring_plugin.py +436 -78
  175. plugins/query_enhancer_plugin.py +66 -30
  176. plugins/resume_conversation_plugin.py +1494 -0
  177. plugins/save_conversation_plugin.py +98 -32
  178. plugins/system_commands_plugin.py +70 -56
  179. plugins/tmux_plugin.py +154 -78
  180. plugins/workflow_enforcement_plugin.py +94 -92
  181. system_prompt/default.md +952 -886
  182. core/io/input_mode_manager.py +0 -402
  183. core/io/modal_interaction_handler.py +0 -315
  184. core/io/raw_input_processor.py +0 -946
  185. core/storage/__init__.py +0 -5
  186. core/storage/state_manager.py +0 -84
  187. core/ui/widget_integration.py +0 -222
  188. core/utils/key_reader.py +0 -171
  189. kollabor-0.4.9.dist-info/RECORD +0 -128
  190. {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/WHEEL +0 -0
  191. {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/entry_points.txt +0 -0
  192. {kollabor-0.4.9.dist-info → kollabor-0.4.15.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1122 @@
1
+ <!-- Dialogue Craft skill - writing natural, purposeful dialogue -->
2
+
3
+ dialogue craft mode: SUBTEXT OVER STATEMENT
4
+
5
+ when this skill is active, you follow dialogue-first discipline.
6
+ this is a comprehensive guide to crafting compelling, natural dialogue.
7
+
8
+
9
+ PHASE 0: CONTEXT VERIFICATION
10
+
11
+ before writing ANY dialogue, verify the writing context is understood.
12
+
13
+
14
+ check for existing dialogue samples
15
+
16
+ <read><file>context.md</file></read>
17
+
18
+ if no context file exists:
19
+ <create>
20
+ <file>context.md</file>
21
+ <content>
22
+ # Dialogue Context
23
+
24
+ ## Project Overview
25
+ [brief description of story]
26
+
27
+ ## Character Voices
28
+ [character name]: [speech pattern notes]
29
+ [character name]: [speech pattern notes]
30
+
31
+ ## Dialogue Samples
32
+ [existing dialogue to match voice]
33
+ </content>
34
+ </create>
35
+
36
+
37
+ check character voice consistency
38
+
39
+ <terminal>find . -name "*.md" -type f | xargs grep -l "dialogue\|voice" 2>/dev/null | head -5</terminal>
40
+
41
+ <terminal>find . -name "*dialogue*" -o -name "*voice*" -type f 2>/dev/null | head -5</terminal>
42
+
43
+ review existing character dialogue before writing new lines.
44
+ match the established voice patterns.
45
+
46
+
47
+ identify dialogue purpose
48
+
49
+ ask yourself BEFORE writing:
50
+ [ ] what is this scene trying to accomplish?
51
+ [ ] what information MUST be conveyed?
52
+ [ ] what information SHOULD be hidden (subtext)?
53
+ [ ] what is each character's agenda?
54
+ [ ] what power dynamic exists between speakers?
55
+
56
+ never write dialogue without knowing its purpose.
57
+
58
+
59
+ verify scene context
60
+
61
+ <read><file>scene_outline.md</file></read>
62
+
63
+ if no scene outline exists, create minimal context:
64
+ [ ] setting (where are we?)
65
+ [ ] characters present
66
+ [ ] scene goal (what must happen?)
67
+ [ ] emotional state of each character entering
68
+
69
+
70
+ PHASE 1: THE FUNDAMENTAL TRUTH OF DIALOGUE
71
+
72
+ dialogue is NOT conversation.
73
+
74
+ real conversation:
75
+ [ ] full of filler words, repetition, dead ends
76
+ [ ] boring, meandering, pointless
77
+ [ ] 90% small talk and logistics
78
+
79
+ good dialogue:
80
+ [ ] distilled to its essence
81
+ [ ] every line advances plot, character, or theme
82
+ [ ] sounds natural without being realistic
83
+
84
+ the dialogue paradox:
85
+ to make dialogue feel real, remove everything that makes it real
86
+
87
+
88
+ example: real vs good dialogue
89
+
90
+ real conversation:
91
+ "hey, how are you doing?"
92
+ "pretty good, just got here, you know?"
93
+ "yeah, traffic was bad on the way over too"
94
+ "tell me about it, i was stuck on the highway for like"
95
+ "an hour, people driving crazy, you know how it is"
96
+ "oh totally, same here, but i made it, so"
97
+ "right, yeah, good to see you"
98
+ "you too"
99
+
100
+ good dialogue:
101
+ "you're late."
102
+ "traffic on 95. again."
103
+ "we talked about this."
104
+ "i know. won't happen again."
105
+ "it can't. the meeting started ten minutes ago."
106
+
107
+ the second version:
108
+ [ ] conveys conflict immediately
109
+ [ ] establishes history without exposition
110
+ [ ] shows power dynamic
111
+ [ ] implies ongoing problem
112
+ [ ] creates tension
113
+
114
+
115
+ PHASE 2: SAID VS OTHER SPEECH TAGS
116
+
117
+ the golden rule: said is invisible
118
+
119
+ readers' eyes glide over "said." they pause on other tags.
120
+
121
+ use said 90% of the time.
122
+
123
+ [ok] "i can't believe you did that," she said.
124
+ [ok] "what do you mean?" he said.
125
+ [ok] "fine," she said.
126
+
127
+ these tags call attention to themselves:
128
+ [x] "i can't believe you did that," she exclaimed.
129
+ [x] "what do you mean?" he questioned.
130
+ [x] "fine," she snapped.
131
+
132
+ every time you use a fancy tag, you pull reader out of story.
133
+
134
+
135
+ when to use alternative tags
136
+
137
+ use only when the manner of speech is NOT clear from context:
138
+ [ ] whispered - when volume matters
139
+ [ ] shouted / yelled - when escalation is needed
140
+ [ ] murmured / mumbled - when clarity is intentionally reduced
141
+ [ ] grunted - when character is refusing full speech
142
+
143
+ even then, consider if action beat works better.
144
+
145
+
146
+ speech tag frequency
147
+
148
+ not every line needs a tag.
149
+
150
+ once established, readers know who's talking.
151
+
152
+ "i can't do this."
153
+ "yes you can."
154
+ "you don't understand."
155
+ "try me."
156
+
157
+ short exchanges without tags create rhythm and tension.
158
+
159
+
160
+ PHASE 3: ACTION BEATS
161
+
162
+ action beats replace speech tags while adding movement and character.
163
+
164
+ [ok] "i don't know." she picked at her cuticles. "maybe i left it at home."
165
+
166
+ [ok] "you think this is funny?" he slammed his hand on the table. the
167
+ silverware rattled. "because i don't."
168
+
169
+ [ok] "sure." he wouldn't meet her eyes. "whatever you say."
170
+
171
+ beats do triple duty:
172
+ [ ] identify speaker
173
+ [ ] add physical action
174
+ [ ] reveal emotional state
175
+
176
+
177
+ effective beats vs ineffective beats
178
+
179
+ effective beats:
180
+ [ ] character-specific gestures
181
+ [ ] meaningful interactions with environment
182
+ [ ] actions that reveal subtext
183
+ [ ] pacing changes (long beat = pause)
184
+
185
+ ineffective beats:
186
+ [x] generic body parts (he nodded, she shrugged)
187
+ [x] meaningless movement (he walked, she turned)
188
+ [x] repetitive actions (he smiled for the tenth time)
189
+
190
+ combine beat with dialogue purpose:
191
+ "i'm not angry." she smiled, teeth gritted. "why would you think that?"
192
+
193
+ the smile contradicts the words. that's good dialogue.
194
+
195
+
196
+ beat placement
197
+
198
+ beats can come before, during, or after dialogue.
199
+
200
+ before:
201
+ she poured herself another drink. "you going to answer me?"
202
+
203
+ during (for pacing):
204
+ "i told you" - she slammed the drawer - "i wasn't going to do it."
205
+
206
+ after:
207
+ "whatever." he turned back to the tv.
208
+
209
+
210
+ PHASE 4: SUBTEXT - WHAT'S NOT SAID
211
+
212
+ subtext is the meaning beneath the words.
213
+
214
+ characters rarely say what they mean. they:
215
+ [ ] protect themselves
216
+ [ ] protect others
217
+ [ ] maintain social masks
218
+ [ ] pursue hidden agendas
219
+ [ ] avoid vulnerability
220
+
221
+ on-the-nose dialogue (bad):
222
+ "i am angry at you because you betrayed my trust and now i don't know
223
+ if i can ever forgive you."
224
+
225
+ subtext-heavy dialogue (good):
226
+ "pass the salt."
227
+ "here."
228
+ "thanks."
229
+ "anytime."
230
+ "that's it?"
231
+ "what did you want, a speech?"
232
+
233
+ the second version says everything through:
234
+ [ ] mundane request (salt)
235
+ [ ] minimal response
236
+ [ ] expectation of something more
237
+ [ ] deflection
238
+
239
+
240
+ creating subtext: the gap technique
241
+
242
+ gap between words and meaning = subtext
243
+
244
+ example: character wants to leave but doesn't want to say it
245
+
246
+ on-the-nose:
247
+ "i want to go home now."
248
+
249
+ subtext version:
250
+ "what time is it?"
251
+ "almost ten."
252
+ "huh. didn't realize it was so late."
253
+ "we can stay longer if you want."
254
+ "no, i should probably..."
255
+
256
+ the real message is conveyed through:
257
+ [ ] checking time (looking for exit)
258
+ [ ] noticing lateness (seeking justification)
259
+ [ ] trailing off (leaving door open for other to decide)
260
+
261
+
262
+ emotional subtext through misdirection
263
+
264
+ characters deflect emotion with:
265
+ [ ] logistics ("did you lock the door?")
266
+ [ ] humor ("that's one way to look at it")
267
+ [ ] deflection ("i'm fine, just tired")
268
+ [ ] anger (easier than sadness)
269
+ [ ] silence
270
+
271
+
272
+ exercise: subtext conversion
273
+
274
+ take these direct statements and rewrite with subtext:
275
+
276
+ direct: "i love you but i'm scared you'll hurt me."
277
+
278
+ subtext version:
279
+ "you're leaving again?"
280
+ "just for the weekend."
281
+ "right. the weekend."
282
+ "i'll call."
283
+ "you always say that."
284
+
285
+ direct: "i stole the money and i feel guilty."
286
+
287
+ subtext version:
288
+ "you hear about the break-in?"
289
+ "yeah. sad."
290
+ "people these days, right?"
291
+ "yeah. desperate times."
292
+ "guess so."
293
+
294
+ notice how neither character admits guilt outright.
295
+
296
+
297
+ PHASE 5: VOICE DIFFERENTIATION
298
+
299
+ every character needs a distinct voice.
300
+
301
+ voice elements:
302
+ [ ] sentence length
303
+ [ ] vocabulary level
304
+ [ ] use of slang or jargon
305
+ [ ] speech patterns (pauses, repetitions)
306
+ [ ] metaphors they use
307
+ [ ] what they DON'T say
308
+ [ ] formality level
309
+
310
+
311
+ voice differentiation example
312
+
313
+ same situation, three characters:
314
+
315
+ character A (educated, formal, precise):
316
+ "i believe there's been a misunderstanding. i never agreed to those
317
+ terms. perhaps we should review the original agreement."
318
+
319
+ character B (casual, colloquial, direct):
320
+ "nah, that ain't right. we never said nothing about that. you're
321
+ mixing stuff up."
322
+
323
+ character C (guarded, minimal, reactive):
324
+ "that's not what i remember."
325
+ "you remember wrong."
326
+ "do i?"
327
+
328
+ three distinct voices in the same scene.
329
+
330
+
331
+ voice consistency exercises
332
+
333
+ before writing a character, create voice profile:
334
+
335
+ [ ] education level: [affects vocabulary, sentence complexity]
336
+ [ ] regional background: [affects idioms, pronunciation]
337
+ [ ] profession: [affects jargon, worldview]
338
+ [ ] age: [affects slang references, formality]
339
+ [ ] secret: [affects what they avoid saying]
340
+ [ ] default emotion: [affects tone]
341
+ [ ] speech habit: [affects pattern]
342
+
343
+ example voice profile:
344
+
345
+ character: marcus
346
+ education: high school dropout, well-read autodidact
347
+ background: south side chicago, former mechanic
348
+ age: 42
349
+ secret: feels inadequate around educated people
350
+ default emotion: defensive skepticism
351
+ speech habit: repeats questions when processing, uses "look" as
352
+ transition, short sentences, mechanical metaphors
353
+
354
+ sample dialogue based on profile:
355
+ "look, i'm saying it doesn't fit. the pieces, they don't match.
356
+ you follow? like an engine with wrong-size pistons. looks okay on
357
+ the outside, but inside? grinding. you hear what i'm saying?"
358
+
359
+
360
+ PHASE 6: DIALOGUE PACING AND RHYTHM
361
+
362
+ dialogue has musicality. vary the rhythm.
363
+
364
+ fast-paced dialogue:
365
+ [ ] short sentences
366
+ [ ] interruptions
367
+ [ ] overlaps (--)
368
+ [ ] minimal tags
369
+ [ ] action beats only for emphasis
370
+
371
+ slow-paced dialogue:
372
+ [ ] longer sentences
373
+ [ ] pauses (indicated by beats)
374
+ [ ] internal thoughts
375
+ [ ] more detailed action beats
376
+ [ ] reflection
377
+
378
+
379
+ example: pacing shift
380
+
381
+ fast (argument):
382
+ "you said--"
383
+ "i know what i said."
384
+ "then explain--"
385
+ "there's nothing to explain."
386
+ "bullshit."
387
+ "watch your mouth."
388
+
389
+ slow (aftermath):
390
+ he stood by the window, not turning. the room felt very quiet.
391
+ "i didn't mean to," she said.
392
+ "you never do."
393
+ "that's unfair."
394
+ he turned finally. "is it?"
395
+
396
+ the same scene, different pacing for different effect.
397
+
398
+
399
+ interrupting and cutting off
400
+
401
+ use em dashes for interruption:
402
+ "i was trying to tell--"
403
+ "i don't care what you were trying."
404
+
405
+ use ellipses for trailing off:
406
+ "i don't know if i can..."
407
+ "can what?"
408
+ "never mind."
409
+
410
+ how characters interrupt reveals:
411
+ [ ] power dynamics (who gets to interrupt?)
412
+ [ ] emotional state (desperation interrupts more)
413
+ [ ] relationship (intimacy allows interruption)
414
+
415
+ intimacy and interruption:
416
+ close characters can finish each other's thoughts.
417
+ distant characters interrupt to dominate.
418
+
419
+
420
+ PHASE 7: EXPOSITION THROUGH DIALOGUE
421
+
422
+ rule: never have characters tell each other what they both know.
423
+
424
+ bad exposition (the "as you know, bob" conversation):
425
+ "as you know, steve, our father died three years ago in that tragic
426
+ car accident on highway 10, leaving us the family business that's
427
+ been in our family for four generations since 1923."
428
+
429
+ this is not dialogue. this is a data dump disguised as dialogue.
430
+
431
+
432
+ good exposition: characters arguing about what they both know
433
+
434
+ "we're not selling."
435
+ "it's not worth keeping anymore."
436
+ "it's all we have left of him."
437
+ "dad's dead, janie. the shop died with him."
438
+
439
+ both know the context. the argument reveals:
440
+ [ ] there's a family business
441
+ [ ] their father died
442
+ [ ] one wants to sell, one doesn't
443
+ [ ] it's about memory, not money
444
+
445
+ all conveyed without stating facts outright.
446
+
447
+
448
+ exposition through conflict
449
+
450
+ characters reveal background by fighting about it.
451
+
452
+ "you always take his side."
453
+ "i do not."
454
+ "you've been doing it since we were kids. he breaks the window,
455
+ you blame me."
456
+ "that was twenty years ago."
457
+ "some things don't change."
458
+
459
+ reveals:
460
+ [ ] sibling relationship
461
+ [ ] family dynamic (one parented differently)
462
+ [ ] ongoing resentment
463
+ [ ] specific past incident
464
+
465
+ shown through conflict, not explained.
466
+
467
+
468
+ exposition through voice
469
+
470
+ background leaks through how characters speak.
471
+
472
+ "the customer is always--" he made air quotes "right. that what they
473
+ taught you in business school?"
474
+
475
+ in six words:
476
+ [ ] character's attitude (skeptical)
477
+ [ ] other character's education (business school)
478
+ [ ] class tension (blue collar vs white collar)
479
+ [ ] relationship dynamic (one looking down on the other)
480
+
481
+
482
+ PHASE 8: GENRE-SPECIFIC DIALOGUE PATTERNS
483
+
484
+ different genres have different dialogue conventions.
485
+
486
+
487
+ thriller/suspense dialogue
488
+
489
+ characteristics:
490
+ [ ] information withholding
491
+ [ ] coded language
492
+ [ ] misdirection
493
+ [ ] tension in subtext
494
+ [ ] questions as power moves
495
+
496
+ "do you have it?"
497
+ "i might."
498
+ "might isn't good enough."
499
+ "then maybe you should've been clearer about what you needed."
500
+
501
+ nothing is stated outright. everything is negotiation.
502
+
503
+
504
+ romance dialogue
505
+
506
+ characteristics:
507
+ [ ] vulnerability is the goal
508
+ [ ] miscommunication creates tension
509
+ [ ] emotional progress is tracked
510
+ [ ] subtext gradually becomes text
511
+
512
+ early stage:
513
+ "you're still here?"
514
+ "looks like."
515
+ "why?"
516
+ "haven't figured that out yet."
517
+
518
+ late stage (after breakthrough):
519
+ "you're still here."
520
+ "i'm not going anywhere."
521
+ "you promise?"
522
+ "i promise."
523
+
524
+ the same words, different meaning through established intimacy.
525
+
526
+
527
+ science fiction/fantasy dialogue
528
+
529
+ characteristics:
530
+ [ ] worldbuilding through speech
531
+ [ ] created slang/jargon
532
+ [ ] cultural values revealed
533
+ [ ] avoid exposition dumps
534
+
535
+ "void take it, you ran the hyperdrive hot?"
536
+ "we needed the speed."
537
+ "at the cost of my engine? spacer's luck, you're lucky it didn't
538
+ blow us into quantum."
539
+
540
+ reveals:
541
+ [ ] hyperdrive technology
542
+ [ ] spacer culture ("spacer's luck")
543
+ [ ] religious element ("void take it")
544
+ [ ] physics concept ("quantum" as bad outcome)
545
+
546
+ all shown through character voice, not explained.
547
+
548
+
549
+ literary/contemporary dialogue
550
+
551
+ characteristics:
552
+ [ ] heightened realism
553
+ [ ] philosophical undertones
554
+ [ ] character depth through speech patterns
555
+ [ ] subtext is primary
556
+
557
+ "do you think people change?"
558
+ "depends."
559
+ "on what?"
560
+ "on whether they want to."
561
+ "and if they don't?"
562
+ "then they don't. they just get better at hiding."
563
+
564
+ conversations about ideas, revealed through concrete moments.
565
+
566
+
567
+ PHASE 9: DIALOGUE BLOCKS AND WHITE SPACE
568
+
569
+ how dialogue looks on page matters.
570
+
571
+ short exchanges:
572
+ create white space
573
+ increase reading speed
574
+ feel lighter, faster
575
+
576
+ long speeches:
577
+ create dense blocks
578
+ slow reading down
579
+ feel heavier, more significant
580
+
581
+ use formatting to control pacing.
582
+
583
+
584
+ when characters monologue
585
+
586
+ monologues are rare in real life. use them sparingly.
587
+
588
+ valid reasons for monologue:
589
+ [ ] teaching (someone needs to learn)
590
+ [ ] confession (emotional release)
591
+ [ ] interrogation (power position)
592
+ [ ] performance (character is literally performing)
593
+
594
+ invalid reasons:
595
+ [x] author wants to explain something
596
+ [x] character "just needs to say this"
597
+ [x] filling space
598
+
599
+ break long speeches with:
600
+ [ ] listener reactions
601
+ [ ] action beats
602
+ [ ] paragraph breaks
603
+ [ ] internal thoughts (if pov allows)
604
+
605
+
606
+ white space as emotional indicator
607
+
608
+ sparse, sparse = tension, withholding
609
+
610
+ "well?"
611
+ "i can't."
612
+ "why?"
613
+ "i just can't."
614
+
615
+ dense, flowing = intimacy, openness
616
+
617
+ "it's not that i don't want to, it's just that i've tried before and
618
+ it never works out the way you expect it to, you know? you plan and
619
+ you hope and then something happens and it's all gone, and i'm not
620
+ sure i can go through that again, not after last time."
621
+
622
+ use page layout as emotional tool.
623
+
624
+
625
+ PHASE 10: DIALOGUE REVISION CHECKLIST
626
+
627
+ first draft dialogue is rarely good dialogue. revise systematically.
628
+
629
+
630
+ read dialogue aloud
631
+
632
+ <terminal>say "your dialogue here" -v 200</terminal> (macos)
633
+ <terminal>espeak "your dialogue here"</terminal> (linux)
634
+
635
+ if you stumble, reader will too.
636
+
637
+ mark:
638
+ [ ] awkward phrasing
639
+ [ ] unnatural rhythms
640
+ [ ] repeated words
641
+ [ ] tongue twisters
642
+ [ ] too-long sentences
643
+
644
+
645
+ check every speech tag
646
+
647
+ [ ] can tag be removed? (speaker is clear)
648
+ [ ] can tag be "said"? (usually yes)
649
+ [ ] can tag be replaced with action beat? (often yes)
650
+ [ ] is tag doing necessary work? (if no, remove)
651
+
652
+
653
+ check for said-bookisms
654
+
655
+ these are almost always wrong:
656
+ [x] ejaculated (has different meaning now)
657
+ [x] pontificated (too academic)
658
+ [x] articulated (too clinical)
659
+ [x] expostulated (who talks like this?)
660
+ [x] retorted (unless it's actually a retort)
661
+ [x] queried (use "asked" or nothing)
662
+
663
+ rule: if you can't imagine a real person using this verb to describe
664
+ speech, don't use it.
665
+
666
+
667
+ check for adverb dependence
668
+
669
+ "i hate you," she said angrily.
670
+ "i hate you," she said.
671
+ "i hate you." she slammed the door.
672
+
673
+ adverbs indicate weak dialogue. strengthen the words instead.
674
+
675
+ weak adverbs to avoid:
676
+ angrily, sadly, happily, excitedly, nervously, quickly, slowly,
677
+ loudly, softly, bitterly, sweetly
678
+
679
+ if you need an adverb, rewrite the dialogue.
680
+
681
+
682
+ check for on-the-nose disease
683
+
684
+ characters saying exactly what they feel:
685
+ [x] "i am so angry right now!"
686
+ [x] "i'm really sad about this."
687
+ [x] "i love you so much."
688
+
689
+ real people deflect:
690
+ [ ] "i can't talk about this."
691
+ [ ] "whatever. it's fine."
692
+ [ ] "you too."
693
+
694
+ find direct emotion statements and convert to subtext.
695
+
696
+
697
+ check for information dump
698
+
699
+ characters explaining things they both know:
700
+ [x] "as we discussed earlier..."
701
+ [x] "remember when we..."
702
+ [x] "as you know..."
703
+
704
+ if both characters know it, they wouldn't say it.
705
+
706
+ either:
707
+ [ ] cut the exposition
708
+ [ ] make it conflict
709
+ [ ] find someone who DOESN'T know
710
+
711
+
712
+ check for speech consistency
713
+
714
+ read one character's dialogue in isolation.
715
+ does it sound like the same person throughout?
716
+
717
+ common consistency breaks:
718
+ [x] formal character suddenly uses slang
719
+ [x] uneducated character uses academic words
720
+ [x] quiet character delivers long speech
721
+ [x] funny character becomes dead serious without reason
722
+
723
+ characters can change, but reader needs to see why.
724
+
725
+
726
+ PHASE 11: DIALOGUE EXERCISES
727
+
728
+ practice these to improve dialogue craft.
729
+
730
+
731
+ exercise 1: the yes/no game
732
+
733
+ two characters. one wants something, one won't give it.
734
+ write dialogue where neither says yes or no directly.
735
+
736
+ aim: 200-400 words
737
+ constraint: no direct yes or no
738
+ goal: maintain tension while refusing direct answer
739
+
740
+
741
+ exercise 2: the double conversation
742
+
743
+ two characters talking about two things at once.
744
+ what they're discussing vs. what they're actually discussing.
745
+
746
+ surface: planning a party
747
+ subtext: their failing relationship
748
+
749
+ aim: 300-500 words
750
+ goal: make subtext clear without stating it
751
+
752
+
753
+ exercise 3: voice differentiation
754
+
755
+ write a scene with three characters discussing the same event.
756
+ each character should have distinct voice.
757
+
758
+ aim: 400-600 words
759
+ challenge: remove all speech tags
760
+ goal: reader knows who's speaking from voice alone
761
+
762
+
763
+ exercise 4: the argument with no words
764
+
765
+ write an argument using only:
766
+ [ ] sentence fragments
767
+ [ ] interruptions
768
+ [ ] single words
769
+ [ ] actions
770
+
771
+ no complete sentences. no explanations.
772
+
773
+ aim: 200-300 words
774
+ goal: conflict completely clear
775
+
776
+
777
+ exercise 5: exposition through conflict
778
+
779
+ convey a complex backstory through an argument.
780
+ both characters know the full history.
781
+ neither states it outright.
782
+
783
+ aim: 400-600 words
784
+ challenge: write for someone who knows nothing about the story
785
+ goal: reader understands the backstory without it being explained
786
+
787
+
788
+ exercise 6: genre shift
789
+
790
+ take the same basic situation (one character wants to leave, one wants
791
+ them to stay) and write it in three genres:
792
+ [ ] thriller
793
+ [ ] romance
794
+ [ ] comedy
795
+
796
+ aim: 200-400 words each
797
+ goal: see how genre changes speech patterns
798
+
799
+
800
+ exercise 7: subtext-only rewrite
801
+
802
+ take a passage of direct dialogue and rewrite with maximum subtext.
803
+ characters should talk about anything BUT what they actually mean.
804
+
805
+ direct: "i'm pregnant and i'm scared you'll leave me."
806
+
807
+ rewrite: conversation about dinner plans that's actually about the
808
+ pregnancy and fear.
809
+
810
+
811
+ exercise 8: the silent scene
812
+
813
+ write a scene where two characters have a complete conversation without
814
+ either saying what they really mean. every line is deflection.
815
+
816
+ aim: 300-500 words
817
+ goal: reader understands the real conversation
818
+
819
+
820
+ PHASE 12: DIALOGUE MISTAKES TO AVOID
821
+
822
+ these are the most common dialogue problems.
823
+
824
+
825
+ mistake 1: everyone sounds the same
826
+
827
+ symptom: you could swap character names and nothing would change.
828
+
829
+ fix: create voice profiles for each character. give each:
830
+ [ ] distinct sentence length preference
831
+ [ ] vocabulary level
832
+ [ ] speech habit
833
+ [ ] default deflection
834
+
835
+
836
+ mistake 2: too-formal speech
837
+
838
+ symptom: characters speak in complete, grammatically perfect sentences.
839
+
840
+ real speech:
841
+ [ ] fragments
842
+ [ ] contractions
843
+ [ ] restarts
844
+ [ ] filler words (used sparingly)
845
+ [ ] colloquialisms
846
+
847
+ "i am going to the store to purchase milk." (robot)
848
+ "i'm gonna run out for milk." (human)
849
+
850
+
851
+ mistake 3: overuse of names
852
+
853
+ symptom: characters constantly address each other by name.
854
+
855
+ "john, i don't think that's a good idea."
856
+ "but mary, we have to try."
857
+ "john, listen to me."
858
+
859
+ real people only use names for:
860
+ [ ] getting attention
861
+ [ ] emphasis/anger
862
+ [ ] intimacy
863
+ [ ] confusion (multiple people present)
864
+
865
+ use names sparingly.
866
+
867
+
868
+ mistake 4: excessive phonetic spelling
869
+
870
+ symptom: writing accents phonetically.
871
+
872
+ "i'm gonna go to the store, bawss."
873
+ "y'all come back now, ya hear?"
874
+
875
+ this is:
876
+ [ ] hard to read
877
+ [ ] often offensive
878
+ [ ] rarely necessary
879
+
880
+ better: indicate accent through:
881
+ [ ] word choice
882
+ [ ] sentence structure
883
+ [ ] cultural references
884
+ [ ] occasional dropped g or shortened word
885
+
886
+
887
+ mistake 5: starting with hello
888
+
889
+ symptom: scenes start with greeting.
890
+
891
+ "hello, john."
892
+ "hi, mary. how are you?"
893
+ "i'm fine. how are you?"
894
+ "also fine."
895
+
896
+ start at the real beginning:
897
+ [ ] in the middle of action
898
+ [ ] with the important line
899
+ [ ] at the moment of change
900
+
901
+ skip the social niceties unless they're doing work.
902
+
903
+
904
+ mistake 6: speech tag pile-up
905
+
906
+ symptom: every line has a tag.
907
+
908
+ "hello," he said.
909
+ "hi," she said.
910
+ "how are you?" he said.
911
+ "fine," she said.
912
+
913
+ trust the reader. once established, they know who's talking.
914
+
915
+
916
+ mistake 7: emotional monologue
917
+
918
+ symptom: character delivers full emotional speech.
919
+
920
+ "i've been so sad since my mother died. i feel empty inside, like
921
+ there's a hole where my heart used to be. i cry myself to sleep
922
+ every night."
923
+
924
+ real people deflect:
925
+ [ ] change the subject
926
+ [ ] make a joke
927
+ [ ] leave the room
928
+ [ ] get angry
929
+
930
+ emotion leaks out. it doesn't pour.
931
+
932
+
933
+ PHASE 13: ADVANCED TECHNIQUES
934
+
935
+
936
+ unspoken dialogue
937
+
938
+ what characters choose not to say is as important as what they say.
939
+
940
+ "do you still--"
941
+ "no."
942
+ "i wasn't going to ask about that."
943
+ "what were you going to ask?"
944
+ "doesn't matter."
945
+
946
+ the unspoken question hangs over the entire exchange.
947
+
948
+
949
+ dialogue as action
950
+
951
+ sometimes the dialogue IS the action.
952
+
953
+ "don't"
954
+ "i have to"
955
+ "then i can't let you"
956
+ "you're not going to stop me"
957
+ "watch me"
958
+
959
+ each line is a move in the conflict. no physical action needed.
960
+
961
+
962
+ echo dialogue
963
+
964
+ characters repeat words, showing fixation.
965
+
966
+ "he's gone"
967
+ "i know he's gone"
968
+ "but he's really gone"
969
+ "i know"
970
+ "like, actually gone gone"
971
+ "i know"
972
+
973
+ repetition shows:
974
+ [ ] denial
975
+ [ ] processing
976
+ [ ] trauma
977
+ [ ] obsession
978
+
979
+
980
+ the non-answer answer
981
+
982
+ characters respond to the question beneath the question.
983
+
984
+ "are you seeing anyone?"
985
+ "why do you ask?"
986
+ "just curious."
987
+ "curious about what?"
988
+
989
+ the first question isn't "are you seeing someone."
990
+ the real question is "do i still have a chance."
991
+
992
+ the answer ("why do you ask?") responds to the real question.
993
+
994
+
995
+ dialogue callbacks
996
+
997
+ earlier dialogue gains new meaning later.
998
+
999
+ earlier:
1000
+ "if you ever need me, you know where to find me."
1001
+ "i won't need you."
1002
+
1003
+ later:
1004
+ she knocked on his door at 3 am. "you said."
1005
+ "i know what i said."
1006
+
1007
+ the callback carries the weight of earlier context.
1008
+
1009
+
1010
+ PHASE 14: DIALOGUE RULES (STRICT MODE)
1011
+
1012
+
1013
+ while this skill is active, these rules are MANDATORY:
1014
+
1015
+ [1] NEVER let characters say exactly what they mean
1016
+ find the deflection
1017
+ find the subtext
1018
+ find the way to say it indirectly
1019
+
1020
+ [2] SAID is your default speech tag
1021
+ use "said" unless another tag does necessary work
1022
+ if you must use another tag, ask yourself:
1023
+ - is this the ONLY way to convey this information?
1024
+ - would an action beat work better?
1025
+
1026
+ [3] READ every dialogue passage aloud
1027
+ if you stumble, rewrite
1028
+ if it sounds stiff, rewrite
1029
+ if it sounds like writing, rewrite
1030
+
1031
+ [4] CHECK every information dump
1032
+ if both characters know it, why are they saying it?
1033
+ either cut it or make it conflict
1034
+
1035
+ [5] GIVE every character a distinct voice
1036
+ if you can remove character names and not tell who's speaking,
1037
+ your voices aren't distinct enough
1038
+
1039
+ [6] USE action beats instead of speech tags when possible
1040
+ beats do double duty: identify speaker AND reveal character
1041
+
1042
+ [7] NEVER use phonetic spelling for accents
1043
+ indicate accent through word choice, sentence structure, rhythm
1044
+
1045
+ [8] CUT greetings, goodbyes, and other social filler
1046
+ start at the important moment
1047
+ end at the important moment
1048
+
1049
+ [9] VARY sentence length for rhythm
1050
+ fast dialogue = short sentences
1051
+ slow dialogue = longer sentences
1052
+ mix them to create musicality
1053
+
1054
+ [10] REMEMBER that conflict is the engine of dialogue
1055
+ characters want different things
1056
+ let those wants collide through speech
1057
+
1058
+
1059
+ FINAL REMINDERS
1060
+
1061
+
1062
+ dialogue is character
1063
+
1064
+ good dialogue reveals:
1065
+ [ ] what character wants
1066
+ [ ] what character fears
1067
+ [ ] what character believes
1068
+ [ ] how character sees themselves
1069
+ [ ] how character sees others
1070
+
1071
+ if dialogue doesn't reveal character, cut it.
1072
+
1073
+
1074
+ dialogue is conflict
1075
+
1076
+ every conversation is a negotiation.
1077
+ characters want things.
1078
+ sometimes those wants align.
1079
+ sometimes they clash.
1080
+ let them clash.
1081
+
1082
+
1083
+ dialogue is subtext
1084
+
1085
+ what's said is never the whole story.
1086
+ what's not said is often the real story.
1087
+ the gap between words and meaning is where story lives.
1088
+
1089
+
1090
+ listen
1091
+
1092
+ listen to how people actually talk.
1093
+ not in movies.
1094
+ not in books.
1095
+ in real life.
1096
+
1097
+ [ ] restaurants
1098
+ [ ] public transit
1099
+ [ ] line at the grocery store
1100
+ [ ] your own conversations
1101
+
1102
+ notice the:
1103
+ [ ] interruptions
1104
+ [ ] unfinished thoughts
1105
+ [ ] changes of subject
1106
+ [ ] things left unsaid
1107
+
1108
+ use it. distill it. make it art.
1109
+
1110
+
1111
+ the goal
1112
+
1113
+ dialogue that:
1114
+ [ ] reveals character
1115
+ [ ] advances plot
1116
+ [ ] creates tension
1117
+ [ ] sounds natural
1118
+ [ ] carries subtext
1119
+
1120
+ every line should do at least two of these.
1121
+
1122
+ now go write something people actually want to read.