reprompt-cli 2.2.2__tar.gz → 2.3.0__tar.gz

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 (322) hide show
  1. reprompt_cli-2.3.0/.pre-commit-config.yaml +16 -0
  2. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/PKG-INFO +32 -25
  3. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/README.md +33 -26
  4. reprompt_cli-2.3.0/docs/screenshots/build.svg +167 -0
  5. reprompt_cli-2.3.0/docs/screenshots/check-bad.svg +192 -0
  6. reprompt_cli-2.3.0/docs/screenshots/check-good.svg +139 -0
  7. reprompt_cli-2.3.0/docs/screenshots/rewrite.svg +136 -0
  8. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/pyproject.toml +1 -1
  9. reprompt_cli-2.3.0/scripts/gen_screenshots.py +192 -0
  10. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/extractors.py +20 -0
  11. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/prompt_dna.py +6 -0
  12. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/rewrite.py +10 -0
  13. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/scorer.py +16 -0
  14. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/compress_terminal.py +6 -1
  15. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_suggestions.py +3 -0
  16. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/uv.lock +1 -1
  17. reprompt_cli-2.2.2/.pre-commit-config.yaml +0 -7
  18. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.editorconfig +0 -0
  19. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  20. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  21. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  22. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  23. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  24. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.github/dependabot.yml +0 -0
  25. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.github/workflows/ci.yml +0 -0
  26. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.github/workflows/publish.yml +0 -0
  27. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.gitignore +0 -0
  28. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.pre-commit-hooks.yaml +0 -0
  29. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.testmondata-shm +0 -0
  30. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/.testmondata-wal +0 -0
  31. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/CHANGELOG.md +0 -0
  32. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/CODE_OF_CONDUCT.md +0 -0
  33. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/CONTRIBUTING.md +0 -0
  34. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/LICENSE +0 -0
  35. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/SECURITY.md +0 -0
  36. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/Screenshot 2026-03-24 at 09.45.03.png +0 -0
  37. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/action.yml +0 -0
  38. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/demo.gif +0 -0
  39. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/brand-icon-128.png +0 -0
  40. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/brand-icon-16.png +0 -0
  41. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/brand-icon-256.png +0 -0
  42. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/brand-icon-32.png +0 -0
  43. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/brand-icon-48.png +0 -0
  44. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/brand-icon-512.png +0 -0
  45. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/brand-icon-96.png +0 -0
  46. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/brand-icon.svg +0 -0
  47. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-favicon-128.png +0 -0
  48. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-favicon-16.png +0 -0
  49. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-favicon-256.png +0 -0
  50. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-favicon-32.png +0 -0
  51. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-favicon-48.png +0 -0
  52. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-favicon-512.png +0 -0
  53. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-favicon-96.png +0 -0
  54. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-favicon.svg +0 -0
  55. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-icon-128.png +0 -0
  56. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-icon-16.png +0 -0
  57. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-icon-256.png +0 -0
  58. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-icon-32.png +0 -0
  59. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-icon-48.png +0 -0
  60. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-icon-512.png +0 -0
  61. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-icon-96.png +0 -0
  62. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/cli-icon.svg +0 -0
  63. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/favicon-128.png +0 -0
  64. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/favicon-16.png +0 -0
  65. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/favicon-256.png +0 -0
  66. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/favicon-32.png +0 -0
  67. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/favicon-48.png +0 -0
  68. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/favicon-512.png +0 -0
  69. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/favicon-96.png +0 -0
  70. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/favicon.svg +0 -0
  71. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/icons/generate.sh +0 -0
  72. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/superpowers/specs/2026-03-24-v14-command-consolidation-design.md +0 -0
  73. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/docs/superpowers/specs/2026-03-25-v1.5-dashboard-design.md +0 -0
  74. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/scripts/generate_demo_data.py +0 -0
  75. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/__init__.py +0 -0
  76. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/__init__.py +0 -0
  77. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/aider.py +0 -0
  78. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/base.py +0 -0
  79. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/chatgpt.py +0 -0
  80. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/claude_chat.py +0 -0
  81. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/claude_code.py +0 -0
  82. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/cline.py +0 -0
  83. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/codex.py +0 -0
  84. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/cursor.py +0 -0
  85. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/filters.py +0 -0
  86. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/gemini.py +0 -0
  87. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/adapters/openclaw.py +0 -0
  88. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/bridge/__init__.py +0 -0
  89. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/bridge/handler.py +0 -0
  90. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/bridge/host.py +0 -0
  91. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/bridge/manifest.py +0 -0
  92. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/bridge/protocol.py +0 -0
  93. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/cli.py +0 -0
  94. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/commands/__init__.py +0 -0
  95. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/commands/telemetry.py +0 -0
  96. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/commands/wrapped.py +0 -0
  97. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/config.py +0 -0
  98. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/__init__.py +0 -0
  99. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/agent.py +0 -0
  100. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/analyzer.py +0 -0
  101. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/build.py +0 -0
  102. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/check.py +0 -0
  103. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/compress.py +0 -0
  104. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/conversation.py +0 -0
  105. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/cost.py +0 -0
  106. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/dashboard.py +0 -0
  107. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/dedup.py +0 -0
  108. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/digest.py +0 -0
  109. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/distill.py +0 -0
  110. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/effectiveness.py +0 -0
  111. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/explain.py +0 -0
  112. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/extractors_zh.py +0 -0
  113. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/insights.py +0 -0
  114. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/lang_detect.py +0 -0
  115. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/library.py +0 -0
  116. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/lint.py +0 -0
  117. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/merge_view.py +0 -0
  118. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/models.py +0 -0
  119. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/persona.py +0 -0
  120. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/pipeline.py +0 -0
  121. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/privacy.py +0 -0
  122. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/privacy_scan.py +0 -0
  123. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/recommend.py +0 -0
  124. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/repetition.py +0 -0
  125. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/segmenter.py +0 -0
  126. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/session_meta.py +0 -0
  127. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/session_quality.py +0 -0
  128. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/session_type.py +0 -0
  129. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/style.py +0 -0
  130. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/suggestions.py +0 -0
  131. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/templates.py +0 -0
  132. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/timeutil.py +0 -0
  133. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/trends.py +0 -0
  134. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/core/wrapped.py +0 -0
  135. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/demo.py +0 -0
  136. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/embeddings/__init__.py +0 -0
  137. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/embeddings/base.py +0 -0
  138. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/embeddings/local_embed.py +0 -0
  139. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/embeddings/ollama.py +0 -0
  140. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/embeddings/openai_embed.py +0 -0
  141. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/embeddings/tfidf.py +0 -0
  142. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/mcp.py +0 -0
  143. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/mcp_main.py +0 -0
  144. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/__init__.py +0 -0
  145. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/agent_terminal.py +0 -0
  146. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/build_terminal.py +0 -0
  147. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/chartjs.min.js +0 -0
  148. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/check_terminal.py +0 -0
  149. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/dashboard_terminal.py +0 -0
  150. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/distill_terminal.py +0 -0
  151. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/explain_terminal.py +0 -0
  152. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/export.py +0 -0
  153. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/html_report.py +0 -0
  154. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/json_out.py +0 -0
  155. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/markdown.py +0 -0
  156. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/projects_terminal.py +0 -0
  157. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/repetition_terminal.py +0 -0
  158. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/rewrite_terminal.py +0 -0
  159. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/sessions_terminal.py +0 -0
  160. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/terminal.py +0 -0
  161. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/wrapped_html.py +0 -0
  162. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/output/wrapped_terminal.py +0 -0
  163. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/py.typed +0 -0
  164. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/sharing/__init__.py +0 -0
  165. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/sharing/client.py +0 -0
  166. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/sharing/clipboard.py +0 -0
  167. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/storage/__init__.py +0 -0
  168. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/storage/db.py +0 -0
  169. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/telemetry/__init__.py +0 -0
  170. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/telemetry/collector.py +0 -0
  171. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/telemetry/consent.py +0 -0
  172. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/telemetry/events.py +0 -0
  173. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/telemetry/prompt.py +0 -0
  174. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/telemetry/queue.py +0 -0
  175. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/src/reprompt/telemetry/sender.py +0 -0
  176. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/__init__.py +0 -0
  177. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/conftest.py +0 -0
  178. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/fixtures/aider_chat_history.md +0 -0
  179. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/fixtures/chatgpt_conversations.json +0 -0
  180. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/fixtures/claude_chat_export.json +0 -0
  181. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/fixtures/claude_session.jsonl +0 -0
  182. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/fixtures/cline_task/api_conversation_history.json +0 -0
  183. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/fixtures/export/default_export.md +0 -0
  184. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/fixtures/export/full_export.md +0 -0
  185. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/fixtures/gemini_session.json +0 -0
  186. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/fixtures/openclaw_session.jsonl +0 -0
  187. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_adapter_aider.py +0 -0
  188. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_adapter_chatgpt.py +0 -0
  189. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_adapter_claude.py +0 -0
  190. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_adapter_claude_chat.py +0 -0
  191. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_adapter_cline.py +0 -0
  192. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_adapter_gemini.py +0 -0
  193. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_adapter_openclaw.py +0 -0
  194. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_agent.py +0 -0
  195. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_agent_cli.py +0 -0
  196. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_analyzer.py +0 -0
  197. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_bridge_cli.py +0 -0
  198. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_bridge_e2e.py +0 -0
  199. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_bridge_handler.py +0 -0
  200. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_bridge_integration.py +0 -0
  201. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_bridge_manifest.py +0 -0
  202. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_bridge_protocol.py +0 -0
  203. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_build.py +0 -0
  204. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_build_cli.py +0 -0
  205. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_build_output.py +0 -0
  206. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_check.py +0 -0
  207. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_check_cli.py +0 -0
  208. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_cli.py +0 -0
  209. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_cli_deprecations.py +0 -0
  210. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_cli_library_effectiveness.py +0 -0
  211. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_clipboard.py +0 -0
  212. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_codex_adapter.py +0 -0
  213. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_compare_best_worst.py +0 -0
  214. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_compress.py +0 -0
  215. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_compress_cli.py +0 -0
  216. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_compress_dna.py +0 -0
  217. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_compress_html.py +0 -0
  218. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_compress_insights.py +0 -0
  219. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_config.py +0 -0
  220. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_conversation.py +0 -0
  221. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_copy_flag.py +0 -0
  222. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_cost.py +0 -0
  223. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_coverage_boost.py +0 -0
  224. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_cursor_adapter.py +0 -0
  225. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_dashboard.py +0 -0
  226. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_db.py +0 -0
  227. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_db_digest.py +0 -0
  228. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_db_effectiveness.py +0 -0
  229. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_db_session_quality.py +0 -0
  230. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_db_trends.py +0 -0
  231. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_dedup.py +0 -0
  232. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_demo.py +0 -0
  233. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_deprecated_commands.py +0 -0
  234. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_digest.py +0 -0
  235. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_digest_cli.py +0 -0
  236. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_distill.py +0 -0
  237. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_distill_cli.py +0 -0
  238. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_distill_weights.py +0 -0
  239. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_e2e.py +0 -0
  240. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_effectiveness.py +0 -0
  241. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_embeddings_local.py +0 -0
  242. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_embeddings_ollama.py +0 -0
  243. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_embeddings_openai.py +0 -0
  244. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_empty_state.py +0 -0
  245. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_explain.py +0 -0
  246. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_explain_cli.py +0 -0
  247. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_export.py +0 -0
  248. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_export_cli.py +0 -0
  249. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_export_snapshot.py +0 -0
  250. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_extractors.py +0 -0
  251. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_extractors_routing.py +0 -0
  252. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_extractors_zh.py +0 -0
  253. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_extractors_zh_e2e.py +0 -0
  254. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_file_input.py +0 -0
  255. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_html_report.py +0 -0
  256. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_import_cli.py +0 -0
  257. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_import_e2e.py +0 -0
  258. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_init_cli.py +0 -0
  259. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_insights.py +0 -0
  260. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_insights_cli.py +0 -0
  261. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_insights_expanded.py +0 -0
  262. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_install_hook.py +0 -0
  263. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_lang_detect.py +0 -0
  264. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_library.py +0 -0
  265. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_lint.py +0 -0
  266. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_lint_cli.py +0 -0
  267. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_markdown.py +0 -0
  268. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_mcp.py +0 -0
  269. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_merge_view.py +0 -0
  270. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_models.py +0 -0
  271. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_output.py +0 -0
  272. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_parse_conversation_base.py +0 -0
  273. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_parse_conversation_chatgpt.py +0 -0
  274. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_parse_conversation_claude.py +0 -0
  275. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_persona.py +0 -0
  276. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_pipeline.py +0 -0
  277. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_privacy.py +0 -0
  278. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_privacy_cli.py +0 -0
  279. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_privacy_e2e.py +0 -0
  280. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_privacy_output.py +0 -0
  281. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_privacy_scan.py +0 -0
  282. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_projects.py +0 -0
  283. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_prompt_dna.py +0 -0
  284. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_public_api.py +0 -0
  285. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_recommend.py +0 -0
  286. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_repetition.py +0 -0
  287. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_repetition_cli.py +0 -0
  288. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_repetition_output.py +0 -0
  289. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_rewrite.py +0 -0
  290. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_schema_version.py +0 -0
  291. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_score_cli.py +0 -0
  292. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_scorer.py +0 -0
  293. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_segmenter.py +0 -0
  294. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_session_quality.py +0 -0
  295. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_session_type.py +0 -0
  296. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_sessions_cli.py +0 -0
  297. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_sessions_output.py +0 -0
  298. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_share_e2e.py +0 -0
  299. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_sharing_client.py +0 -0
  300. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_source_filter.py +0 -0
  301. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_style.py +0 -0
  302. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_style_trends.py +0 -0
  303. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_telemetry_cli.py +0 -0
  304. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_telemetry_collector.py +0 -0
  305. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_telemetry_consent.py +0 -0
  306. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_telemetry_e2e.py +0 -0
  307. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_telemetry_events.py +0 -0
  308. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_telemetry_prompt.py +0 -0
  309. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_telemetry_queue.py +0 -0
  310. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_telemetry_sender.py +0 -0
  311. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_template_cli.py +0 -0
  312. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_templates.py +0 -0
  313. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_timeutil.py +0 -0
  314. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_trends.py +0 -0
  315. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_trends_cli.py +0 -0
  316. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_use_cli.py +0 -0
  317. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_wrapped.py +0 -0
  318. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_wrapped_cli.py +0 -0
  319. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_wrapped_e2e.py +0 -0
  320. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_wrapped_html.py +0 -0
  321. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_wrapped_output.py +0 -0
  322. {reprompt_cli-2.2.2 → reprompt_cli-2.3.0}/tests/test_wrapped_share.py +0 -0
@@ -0,0 +1,16 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.11.6
4
+ hooks:
5
+ - id: ruff
6
+ args: [--fix]
7
+ - id: ruff-format
8
+ - repo: local
9
+ hooks:
10
+ - id: pytest-check
11
+ name: pytest
12
+ entry: uv run pytest tests/ -x -q --tb=short
13
+ language: system
14
+ pass_filenames: false
15
+ always_run: true
16
+ stages: [pre-commit]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reprompt-cli
3
- Version: 2.2.2
3
+ Version: 2.3.0
4
4
  Summary: Discover, analyze, and optimize your prompts from AI coding sessions
5
5
  Project-URL: Homepage, https://github.com/reprompt-dev/reprompt
6
6
  Project-URL: Repository, https://github.com/reprompt-dev/reprompt
@@ -79,21 +79,23 @@ $ reprompt rewrite "I was wondering if you could maybe help me fix the auth bug"
79
79
  → Reference specific files or functions by name
80
80
  → Add constraints (e.g., "Do not modify existing tests")
81
81
 
82
- # Score any prompt instantly (research-backed, 30+ features)
83
- $ reprompt score "Fix the auth bug in src/login.ts where JWT expires"
84
- Score: 40/100 (Fair)
85
- Tip: Include the error message -- debug prompts with errors are 3.7x more effective
82
+ # Full diagnostic in one command
83
+ $ reprompt check "Fix the auth bug in src/login.ts where JWT expires"
84
+ GOOD · 58
86
85
 
87
- # Compress prompts to save tokens
88
- $ reprompt compress "I was wondering if you could please help me refactor this code. Basically what I need is to split this function into smaller helpers."
89
- Before: 28 tokens → After: 14 tokens (50% saved)
86
+ Clarity ████████████░░░░░░░░ 15/25
87
+ Context ████████████████░░░░ 20/25
88
+ Position ████████████████████ 20/20
89
+ Structure ░░░░░░░░░░░░░░░░░░░░ 0/15
90
+ Repetition ███░░░░░░░░░░░░░░░░░ 3/15
90
91
 
91
- # Your personal dashboard
92
- $ reprompt
93
- ╭─ Prompt Dashboard ─────────────────────────────────────────╮
94
- │ Prompts: 1,063 (295 unique) Sessions: 890 │
95
- │ Avg Score: 68/100 Top: debug (31%), impl (24%)│
96
- ╰────────────────────────────────────────────────────────────╯
92
+ Strengths
93
+ Key instruction at the start — optimal placement
94
+ References specific files
95
+
96
+ Improve
97
+ → Add the actual error message (+6 pts)
98
+ → Add constraints like "Don't modify tests" (+5 pts)
97
99
  ```
98
100
 
99
101
  ## What it does
@@ -139,15 +141,21 @@ $ reprompt
139
141
 
140
142
  ## Prompt Science
141
143
 
142
- Scoring is calibrated against 4 research papers covering 30+ features across 5 dimensions:
144
+ Scoring is calibrated against 10 peer-reviewed papers covering 30+ features across 5 dimensions:
145
+
146
+ | Dimension | What it measures | Key papers |
147
+ |-----------|-----------------|------------|
148
+ | **Structure** | Markdown, code blocks, explicit constraints | Prompt Report ([2406.06608](https://arxiv.org/abs/2406.06608)) |
149
+ | **Context** | File paths, error messages, I/O specs, edge cases | Zi+ ([2508.03678](https://arxiv.org/abs/2508.03678)), Google ([2512.14982](https://arxiv.org/abs/2512.14982)) |
150
+ | **Position** | Instruction placement relative to context | Stanford ([2307.03172](https://arxiv.org/abs/2307.03172)), Veseli+ ([2508.07479](https://arxiv.org/abs/2508.07479)), Chowdhury ([2603.10123](https://arxiv.org/abs/2603.10123)) |
151
+ | **Repetition** | Redundancy that degrades model attention | Google ([2512.14982](https://arxiv.org/abs/2512.14982)) |
152
+ | **Clarity** | Readability, sentence length, ambiguity | SPELL (EMNLP 2023), PEEM ([2603.10477](https://arxiv.org/abs/2603.10477)) |
153
+
154
+ Cross-validated findings that inform our engine:
143
155
 
144
- | Dimension | What it measures | Paper |
145
- |-----------|-----------------|-------|
146
- | **Structure** | Markdown, code blocks, explicit constraints | Prompt Report 2406.06608 |
147
- | **Context** | File paths, error messages, technical specificity | Google 2512.14982 |
148
- | **Position** | Instruction placement relative to context | Stanford 2307.03172 |
149
- | **Repetition** | Redundancy that degrades model attention | Google 2512.14982 |
150
- | **Clarity** | Readability, sentence length, ambiguity | SPELL (EMNLP 2023) |
156
+ - **Position bias is architectural** present at initialization, not learned. Front-loading instructions is effective for prompts under 50% of context window (3 papers agree)
157
+ - **Moderate compression improves output** — rule-based filler removal doesn't just save tokens, it enhances LLM performance ([2505.00019](https://arxiv.org/abs/2505.00019))
158
+ - **Prompt quality is independently measurable** prompt-only scoring predicts output quality without seeing the response (ACL 2025, [2503.10084](https://arxiv.org/abs/2503.10084))
151
159
 
152
160
  All analysis runs locally in <1ms per prompt. No LLM calls, no network requests.
153
161
 
@@ -189,10 +197,9 @@ pip install reprompt-cli[mcp] # + MCP server for Claude Code / Continue.de
189
197
  ### Quick start
190
198
 
191
199
  ```bash
200
+ reprompt check "your prompt here" # full diagnostic — score + lint + rewrite
192
201
  reprompt scan # discover prompts from installed AI tools
193
202
  reprompt # see your dashboard
194
- reprompt score "your prompt here" # score any prompt instantly
195
- reprompt distill --last 1 # distill your most recent conversation
196
203
  ```
197
204
 
198
205
  ### Auto-scan after every session
@@ -230,7 +237,7 @@ Captured prompts sync locally via Native Messaging -- nothing leaves your machin
230
237
  # .pre-commit-config.yaml
231
238
  repos:
232
239
  - repo: https://github.com/reprompt-dev/reprompt
233
- rev: v2.2.1
240
+ rev: v2.2.2
234
241
  hooks:
235
242
  - id: reprompt-lint
236
243
  ```
@@ -34,21 +34,23 @@ $ reprompt rewrite "I was wondering if you could maybe help me fix the auth bug"
34
34
  → Reference specific files or functions by name
35
35
  → Add constraints (e.g., "Do not modify existing tests")
36
36
 
37
- # Score any prompt instantly (research-backed, 30+ features)
38
- $ reprompt score "Fix the auth bug in src/login.ts where JWT expires"
39
- Score: 40/100 (Fair)
40
- Tip: Include the error message -- debug prompts with errors are 3.7x more effective
41
-
42
- # Compress prompts to save tokens
43
- $ reprompt compress "I was wondering if you could please help me refactor this code. Basically what I need is to split this function into smaller helpers."
44
- Before: 28 tokens → After: 14 tokens (50% saved)
45
-
46
- # Your personal dashboard
47
- $ reprompt
48
- ╭─ Prompt Dashboard ─────────────────────────────────────────╮
49
- │ Prompts: 1,063 (295 unique) Sessions: 890 │
50
- │ Avg Score: 68/100 Top: debug (31%), impl (24%)│
51
- ╰────────────────────────────────────────────────────────────╯
37
+ # Full diagnostic in one command
38
+ $ reprompt check "Fix the auth bug in src/login.ts where JWT expires"
39
+ GOOD · 58
40
+
41
+ Clarity ████████████░░░░░░░░ 15/25
42
+ Context ████████████████░░░░ 20/25
43
+ Position ████████████████████ 20/20
44
+ Structure ░░░░░░░░░░░░░░░░░░░░ 0/15
45
+ Repetition ███░░░░░░░░░░░░░░░░░ 3/15
46
+
47
+ Strengths
48
+ Key instruction at the start — optimal placement
49
+ References specific files
50
+
51
+ Improve
52
+ → Add the actual error message (+6 pts)
53
+ → Add constraints like "Don't modify tests" (+5 pts)
52
54
  ```
53
55
 
54
56
  ## What it does
@@ -94,15 +96,21 @@ $ reprompt
94
96
 
95
97
  ## Prompt Science
96
98
 
97
- Scoring is calibrated against 4 research papers covering 30+ features across 5 dimensions:
99
+ Scoring is calibrated against 10 peer-reviewed papers covering 30+ features across 5 dimensions:
100
+
101
+ | Dimension | What it measures | Key papers |
102
+ |-----------|-----------------|------------|
103
+ | **Structure** | Markdown, code blocks, explicit constraints | Prompt Report ([2406.06608](https://arxiv.org/abs/2406.06608)) |
104
+ | **Context** | File paths, error messages, I/O specs, edge cases | Zi+ ([2508.03678](https://arxiv.org/abs/2508.03678)), Google ([2512.14982](https://arxiv.org/abs/2512.14982)) |
105
+ | **Position** | Instruction placement relative to context | Stanford ([2307.03172](https://arxiv.org/abs/2307.03172)), Veseli+ ([2508.07479](https://arxiv.org/abs/2508.07479)), Chowdhury ([2603.10123](https://arxiv.org/abs/2603.10123)) |
106
+ | **Repetition** | Redundancy that degrades model attention | Google ([2512.14982](https://arxiv.org/abs/2512.14982)) |
107
+ | **Clarity** | Readability, sentence length, ambiguity | SPELL (EMNLP 2023), PEEM ([2603.10477](https://arxiv.org/abs/2603.10477)) |
108
+
109
+ Cross-validated findings that inform our engine:
98
110
 
99
- | Dimension | What it measures | Paper |
100
- |-----------|-----------------|-------|
101
- | **Structure** | Markdown, code blocks, explicit constraints | Prompt Report 2406.06608 |
102
- | **Context** | File paths, error messages, technical specificity | Google 2512.14982 |
103
- | **Position** | Instruction placement relative to context | Stanford 2307.03172 |
104
- | **Repetition** | Redundancy that degrades model attention | Google 2512.14982 |
105
- | **Clarity** | Readability, sentence length, ambiguity | SPELL (EMNLP 2023) |
111
+ - **Position bias is architectural** present at initialization, not learned. Front-loading instructions is effective for prompts under 50% of context window (3 papers agree)
112
+ - **Moderate compression improves output** — rule-based filler removal doesn't just save tokens, it enhances LLM performance ([2505.00019](https://arxiv.org/abs/2505.00019))
113
+ - **Prompt quality is independently measurable** prompt-only scoring predicts output quality without seeing the response (ACL 2025, [2503.10084](https://arxiv.org/abs/2503.10084))
106
114
 
107
115
  All analysis runs locally in <1ms per prompt. No LLM calls, no network requests.
108
116
 
@@ -144,10 +152,9 @@ pip install reprompt-cli[mcp] # + MCP server for Claude Code / Continue.de
144
152
  ### Quick start
145
153
 
146
154
  ```bash
155
+ reprompt check "your prompt here" # full diagnostic — score + lint + rewrite
147
156
  reprompt scan # discover prompts from installed AI tools
148
157
  reprompt # see your dashboard
149
- reprompt score "your prompt here" # score any prompt instantly
150
- reprompt distill --last 1 # distill your most recent conversation
151
158
  ```
152
159
 
153
160
  ### Auto-scan after every session
@@ -185,7 +192,7 @@ Captured prompts sync locally via Native Messaging -- nothing leaves your machin
185
192
  # .pre-commit-config.yaml
186
193
  repos:
187
194
  - repo: https://github.com/reprompt-dev/reprompt
188
- rev: v2.2.1
195
+ rev: v2.2.2
189
196
  hooks:
190
197
  - id: reprompt-lint
191
198
  ```
@@ -0,0 +1,167 @@
1
+ <svg class="rich-terminal" viewBox="0 0 1092 708.8" xmlns="http://www.w3.org/2000/svg">
2
+ <!-- Generated with Rich https://www.textualize.io -->
3
+ <style>
4
+
5
+ @font-face {
6
+ font-family: "Fira Code";
7
+ src: local("FiraCode-Regular"),
8
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Regular.woff2") format("woff2"),
9
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Regular.woff") format("woff");
10
+ font-style: normal;
11
+ font-weight: 400;
12
+ }
13
+ @font-face {
14
+ font-family: "Fira Code";
15
+ src: local("FiraCode-Bold"),
16
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff2/FiraCode-Bold.woff2") format("woff2"),
17
+ url("https://cdnjs.cloudflare.com/ajax/libs/firacode/6.2.0/woff/FiraCode-Bold.woff") format("woff");
18
+ font-style: bold;
19
+ font-weight: 700;
20
+ }
21
+
22
+ .terminal-3925241903-matrix {
23
+ font-family: Fira Code, monospace;
24
+ font-size: 20px;
25
+ line-height: 24.4px;
26
+ font-variant-east-asian: full-width;
27
+ }
28
+
29
+ .terminal-3925241903-title {
30
+ font-size: 18px;
31
+ font-weight: bold;
32
+ font-family: arial;
33
+ }
34
+
35
+ .terminal-3925241903-r1 { fill: #c5c8c6 }
36
+ .terminal-3925241903-r2 { fill: #98a84b;font-weight: bold }
37
+ .terminal-3925241903-r3 { fill: #98a84b }
38
+ .terminal-3925241903-r4 { fill: #c5c8c6;font-weight: bold }
39
+ .terminal-3925241903-r5 { fill: #68a0b3;font-weight: bold }
40
+ .terminal-3925241903-r6 { fill: #d0b344 }
41
+ </style>
42
+
43
+ <defs>
44
+ <clipPath id="terminal-3925241903-clip-terminal">
45
+ <rect x="0" y="0" width="1072.6" height="657.8" />
46
+ </clipPath>
47
+ <clipPath id="terminal-3925241903-line-0">
48
+ <rect x="0" y="1.5" width="1073.6" height="24.65"/>
49
+ </clipPath>
50
+ <clipPath id="terminal-3925241903-line-1">
51
+ <rect x="0" y="25.9" width="1073.6" height="24.65"/>
52
+ </clipPath>
53
+ <clipPath id="terminal-3925241903-line-2">
54
+ <rect x="0" y="50.3" width="1073.6" height="24.65"/>
55
+ </clipPath>
56
+ <clipPath id="terminal-3925241903-line-3">
57
+ <rect x="0" y="74.7" width="1073.6" height="24.65"/>
58
+ </clipPath>
59
+ <clipPath id="terminal-3925241903-line-4">
60
+ <rect x="0" y="99.1" width="1073.6" height="24.65"/>
61
+ </clipPath>
62
+ <clipPath id="terminal-3925241903-line-5">
63
+ <rect x="0" y="123.5" width="1073.6" height="24.65"/>
64
+ </clipPath>
65
+ <clipPath id="terminal-3925241903-line-6">
66
+ <rect x="0" y="147.9" width="1073.6" height="24.65"/>
67
+ </clipPath>
68
+ <clipPath id="terminal-3925241903-line-7">
69
+ <rect x="0" y="172.3" width="1073.6" height="24.65"/>
70
+ </clipPath>
71
+ <clipPath id="terminal-3925241903-line-8">
72
+ <rect x="0" y="196.7" width="1073.6" height="24.65"/>
73
+ </clipPath>
74
+ <clipPath id="terminal-3925241903-line-9">
75
+ <rect x="0" y="221.1" width="1073.6" height="24.65"/>
76
+ </clipPath>
77
+ <clipPath id="terminal-3925241903-line-10">
78
+ <rect x="0" y="245.5" width="1073.6" height="24.65"/>
79
+ </clipPath>
80
+ <clipPath id="terminal-3925241903-line-11">
81
+ <rect x="0" y="269.9" width="1073.6" height="24.65"/>
82
+ </clipPath>
83
+ <clipPath id="terminal-3925241903-line-12">
84
+ <rect x="0" y="294.3" width="1073.6" height="24.65"/>
85
+ </clipPath>
86
+ <clipPath id="terminal-3925241903-line-13">
87
+ <rect x="0" y="318.7" width="1073.6" height="24.65"/>
88
+ </clipPath>
89
+ <clipPath id="terminal-3925241903-line-14">
90
+ <rect x="0" y="343.1" width="1073.6" height="24.65"/>
91
+ </clipPath>
92
+ <clipPath id="terminal-3925241903-line-15">
93
+ <rect x="0" y="367.5" width="1073.6" height="24.65"/>
94
+ </clipPath>
95
+ <clipPath id="terminal-3925241903-line-16">
96
+ <rect x="0" y="391.9" width="1073.6" height="24.65"/>
97
+ </clipPath>
98
+ <clipPath id="terminal-3925241903-line-17">
99
+ <rect x="0" y="416.3" width="1073.6" height="24.65"/>
100
+ </clipPath>
101
+ <clipPath id="terminal-3925241903-line-18">
102
+ <rect x="0" y="440.7" width="1073.6" height="24.65"/>
103
+ </clipPath>
104
+ <clipPath id="terminal-3925241903-line-19">
105
+ <rect x="0" y="465.1" width="1073.6" height="24.65"/>
106
+ </clipPath>
107
+ <clipPath id="terminal-3925241903-line-20">
108
+ <rect x="0" y="489.5" width="1073.6" height="24.65"/>
109
+ </clipPath>
110
+ <clipPath id="terminal-3925241903-line-21">
111
+ <rect x="0" y="513.9" width="1073.6" height="24.65"/>
112
+ </clipPath>
113
+ <clipPath id="terminal-3925241903-line-22">
114
+ <rect x="0" y="538.3" width="1073.6" height="24.65"/>
115
+ </clipPath>
116
+ <clipPath id="terminal-3925241903-line-23">
117
+ <rect x="0" y="562.7" width="1073.6" height="24.65"/>
118
+ </clipPath>
119
+ <clipPath id="terminal-3925241903-line-24">
120
+ <rect x="0" y="587.1" width="1073.6" height="24.65"/>
121
+ </clipPath>
122
+ <clipPath id="terminal-3925241903-line-25">
123
+ <rect x="0" y="611.5" width="1073.6" height="24.65"/>
124
+ </clipPath>
125
+ </defs>
126
+
127
+ <rect fill="#292929" stroke="rgba(255,255,255,0.35)" stroke-width="1" x="1" y="1" width="1090" height="706.8" rx="8"/><text class="terminal-3925241903-title" fill="#c5c8c6" text-anchor="middle" x="545" y="27">reprompt&#160;build</text>
128
+ <g transform="translate(26,22)">
129
+ <circle cx="0" cy="0" r="7" fill="#ff5f57"/>
130
+ <circle cx="22" cy="0" r="7" fill="#febc2e"/>
131
+ <circle cx="44" cy="0" r="7" fill="#28c840"/>
132
+ </g>
133
+
134
+ <g transform="translate(9, 41)" clip-path="url(#terminal-3925241903-clip-terminal)">
135
+
136
+ <g class="terminal-3925241903-matrix">
137
+ <text class="terminal-3925241903-r1" x="1073.6" y="20" textLength="12.2" clip-path="url(#terminal-3925241903-line-0)">
138
+ </text><text class="terminal-3925241903-r2" x="24.4" y="44.4" textLength="48.8" clip-path="url(#terminal-3925241903-line-1)">GOOD</text><text class="terminal-3925241903-r1" x="73.2" y="44.4" textLength="36.6" clip-path="url(#terminal-3925241903-line-1)">&#160;·&#160;</text><text class="terminal-3925241903-r2" x="109.8" y="44.4" textLength="24.4" clip-path="url(#terminal-3925241903-line-1)">60</text><text class="terminal-3925241903-r1" x="1073.6" y="44.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-1)">
139
+ </text><text class="terminal-3925241903-r1" x="1073.6" y="68.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-2)">
140
+ </text><text class="terminal-3925241903-r3" x="0" y="93.2" textLength="24.4" clip-path="url(#terminal-3925241903-line-3)">╭─</text><text class="terminal-3925241903-r3" x="24.4" y="93.2" textLength="427" clip-path="url(#terminal-3925241903-line-3)">───────────────────────────────────</text><text class="terminal-3925241903-r3" x="451.4" y="93.2" textLength="170.8" clip-path="url(#terminal-3925241903-line-3)">&#160;Built&#160;Prompt&#160;</text><text class="terminal-3925241903-r3" x="622.2" y="93.2" textLength="427" clip-path="url(#terminal-3925241903-line-3)">───────────────────────────────────</text><text class="terminal-3925241903-r3" x="1049.2" y="93.2" textLength="24.4" clip-path="url(#terminal-3925241903-line-3)">─╮</text><text class="terminal-3925241903-r1" x="1073.6" y="93.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-3)">
141
+ </text><text class="terminal-3925241903-r3" x="0" y="117.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-4)">│</text><text class="terminal-3925241903-r1" x="24.4" y="117.6" textLength="329.4" clip-path="url(#terminal-3925241903-line-4)">Fix&#160;the&#160;JWT&#160;expiration&#160;bug.</text><text class="terminal-3925241903-r3" x="1061.4" y="117.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-4)">│</text><text class="terminal-3925241903-r1" x="1073.6" y="117.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-4)">
142
+ </text><text class="terminal-3925241903-r3" x="0" y="142" textLength="12.2" clip-path="url(#terminal-3925241903-line-5)">│</text><text class="terminal-3925241903-r3" x="1061.4" y="142" textLength="12.2" clip-path="url(#terminal-3925241903-line-5)">│</text><text class="terminal-3925241903-r1" x="1073.6" y="142" textLength="12.2" clip-path="url(#terminal-3925241903-line-5)">
143
+ </text><text class="terminal-3925241903-r3" x="0" y="166.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-6)">│</text><text class="terminal-3925241903-r1" x="24.4" y="166.4" textLength="341.6" clip-path="url(#terminal-3925241903-line-6)">File:&#160;src/auth/middleware.ts</text><text class="terminal-3925241903-r3" x="1061.4" y="166.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-6)">│</text><text class="terminal-3925241903-r1" x="1073.6" y="166.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-6)">
144
+ </text><text class="terminal-3925241903-r3" x="0" y="190.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-7)">│</text><text class="terminal-3925241903-r3" x="1061.4" y="190.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-7)">│</text><text class="terminal-3925241903-r1" x="1073.6" y="190.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-7)">
145
+ </text><text class="terminal-3925241903-r3" x="0" y="215.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-8)">│</text><text class="terminal-3925241903-r1" x="24.4" y="215.2" textLength="695.4" clip-path="url(#terminal-3925241903-line-8)">Error:&#160;TypeError:&#160;Cannot&#160;read&#160;property&#160;&#x27;exp&#x27;&#160;of&#160;undefined</text><text class="terminal-3925241903-r3" x="1061.4" y="215.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-8)">│</text><text class="terminal-3925241903-r1" x="1073.6" y="215.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-8)">
146
+ </text><text class="terminal-3925241903-r3" x="0" y="239.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-9)">│</text><text class="terminal-3925241903-r3" x="1061.4" y="239.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-9)">│</text><text class="terminal-3925241903-r1" x="1073.6" y="239.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-9)">
147
+ </text><text class="terminal-3925241903-r3" x="0" y="264" textLength="12.2" clip-path="url(#terminal-3925241903-line-10)">│</text><text class="terminal-3925241903-r1" x="24.4" y="264" textLength="146.4" clip-path="url(#terminal-3925241903-line-10)">Constraints:</text><text class="terminal-3925241903-r3" x="1061.4" y="264" textLength="12.2" clip-path="url(#terminal-3925241903-line-10)">│</text><text class="terminal-3925241903-r1" x="1073.6" y="264" textLength="12.2" clip-path="url(#terminal-3925241903-line-10)">
148
+ </text><text class="terminal-3925241903-r3" x="0" y="288.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-11)">│</text><text class="terminal-3925241903-r1" x="24.4" y="288.4" textLength="414.8" clip-path="url(#terminal-3925241903-line-11)">-&#160;don&#x27;t&#160;modify&#160;refresh&#160;token&#160;tests</text><text class="terminal-3925241903-r3" x="1061.4" y="288.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-11)">│</text><text class="terminal-3925241903-r1" x="1073.6" y="288.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-11)">
149
+ </text><text class="terminal-3925241903-r3" x="0" y="312.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-12)">│</text><text class="terminal-3925241903-r1" x="24.4" y="312.8" textLength="353.8" clip-path="url(#terminal-3925241903-line-12)">-&#160;keep&#160;backward&#160;compatibility</text><text class="terminal-3925241903-r3" x="1061.4" y="312.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-12)">│</text><text class="terminal-3925241903-r1" x="1073.6" y="312.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-12)">
150
+ </text><text class="terminal-3925241903-r3" x="0" y="337.2" textLength="1073.6" clip-path="url(#terminal-3925241903-line-13)">╰──────────────────────────────────────────────────────────────────────────────────────╯</text><text class="terminal-3925241903-r1" x="1073.6" y="337.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-13)">
151
+ </text><text class="terminal-3925241903-r1" x="1073.6" y="361.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-14)">
152
+ </text><text class="terminal-3925241903-r4" x="24.4" y="386" textLength="122" clip-path="url(#terminal-3925241903-line-15)">Components</text><text class="terminal-3925241903-r4" x="158.6" y="386" textLength="12.2" clip-path="url(#terminal-3925241903-line-15)">(</text><text class="terminal-3925241903-r5" x="170.8" y="386" textLength="12.2" clip-path="url(#terminal-3925241903-line-15)">4</text><text class="terminal-3925241903-r4" x="183" y="386" textLength="12.2" clip-path="url(#terminal-3925241903-line-15)">)</text><text class="terminal-3925241903-r1" x="1073.6" y="386" textLength="12.2" clip-path="url(#terminal-3925241903-line-15)">
153
+ </text><text class="terminal-3925241903-r3" x="24.4" y="410.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-16)">✓</text><text class="terminal-3925241903-r1" x="36.6" y="410.4" textLength="61" clip-path="url(#terminal-3925241903-line-16)">&#160;task</text><text class="terminal-3925241903-r1" x="1073.6" y="410.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-16)">
154
+ </text><text class="terminal-3925241903-r3" x="24.4" y="434.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-17)">✓</text><text class="terminal-3925241903-r1" x="36.6" y="434.8" textLength="73.2" clip-path="url(#terminal-3925241903-line-17)">&#160;files</text><text class="terminal-3925241903-r1" x="1073.6" y="434.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-17)">
155
+ </text><text class="terminal-3925241903-r3" x="24.4" y="459.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-18)">✓</text><text class="terminal-3925241903-r1" x="36.6" y="459.2" textLength="73.2" clip-path="url(#terminal-3925241903-line-18)">&#160;error</text><text class="terminal-3925241903-r1" x="1073.6" y="459.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-18)">
156
+ </text><text class="terminal-3925241903-r3" x="24.4" y="483.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-19)">✓</text><text class="terminal-3925241903-r1" x="36.6" y="483.6" textLength="146.4" clip-path="url(#terminal-3925241903-line-19)">&#160;constraints</text><text class="terminal-3925241903-r1" x="1073.6" y="483.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-19)">
157
+ </text><text class="terminal-3925241903-r1" x="1073.6" y="508" textLength="12.2" clip-path="url(#terminal-3925241903-line-20)">
158
+ </text><text class="terminal-3925241903-r4" x="24.4" y="532.4" textLength="97.6" clip-path="url(#terminal-3925241903-line-21)">Add&#160;more</text><text class="terminal-3925241903-r1" x="1073.6" y="532.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-21)">
159
+ </text><text class="terminal-3925241903-r6" x="24.4" y="556.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-22)">→</text><text class="terminal-3925241903-r1" x="36.6" y="556.8" textLength="512.4" clip-path="url(#terminal-3925241903-line-22)">&#160;Add&#160;--context&#160;for&#160;background&#160;information&#160;</text><text class="terminal-3925241903-r4" x="549" y="556.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-22)">(</text><text class="terminal-3925241903-r1" x="561.2" y="556.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-22)">+</text><text class="terminal-3925241903-r5" x="573.4" y="556.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-22)">4</text><text class="terminal-3925241903-r1" x="585.6" y="556.8" textLength="48.8" clip-path="url(#terminal-3925241903-line-22)">&#160;pts</text><text class="terminal-3925241903-r4" x="634.4" y="556.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-22)">)</text><text class="terminal-3925241903-r1" x="1073.6" y="556.8" textLength="12.2" clip-path="url(#terminal-3925241903-line-22)">
160
+ </text><text class="terminal-3925241903-r6" x="24.4" y="581.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-23)">→</text><text class="terminal-3925241903-r1" x="36.6" y="581.2" textLength="512.4" clip-path="url(#terminal-3925241903-line-23)">&#160;Add&#160;--example&#160;with&#160;expected&#160;input/output&#160;</text><text class="terminal-3925241903-r4" x="549" y="581.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-23)">(</text><text class="terminal-3925241903-r1" x="561.2" y="581.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-23)">+</text><text class="terminal-3925241903-r5" x="573.4" y="581.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-23)">3</text><text class="terminal-3925241903-r1" x="585.6" y="581.2" textLength="48.8" clip-path="url(#terminal-3925241903-line-23)">&#160;pts</text><text class="terminal-3925241903-r4" x="634.4" y="581.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-23)">)</text><text class="terminal-3925241903-r1" x="1073.6" y="581.2" textLength="12.2" clip-path="url(#terminal-3925241903-line-23)">
161
+ </text><text class="terminal-3925241903-r6" x="24.4" y="605.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-24)">→</text><text class="terminal-3925241903-r1" x="36.6" y="605.6" textLength="488" clip-path="url(#terminal-3925241903-line-24)">&#160;Add&#160;--role&#160;to&#160;set&#160;the&#160;AI&#x27;s&#160;perspective&#160;</text><text class="terminal-3925241903-r4" x="524.6" y="605.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-24)">(</text><text class="terminal-3925241903-r1" x="536.8" y="605.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-24)">+</text><text class="terminal-3925241903-r5" x="549" y="605.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-24)">3</text><text class="terminal-3925241903-r1" x="561.2" y="605.6" textLength="48.8" clip-path="url(#terminal-3925241903-line-24)">&#160;pts</text><text class="terminal-3925241903-r4" x="610" y="605.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-24)">)</text><text class="terminal-3925241903-r1" x="1073.6" y="605.6" textLength="12.2" clip-path="url(#terminal-3925241903-line-24)">
162
+ </text><text class="terminal-3925241903-r6" x="24.4" y="630" textLength="12.2" clip-path="url(#terminal-3925241903-line-25)">→</text><text class="terminal-3925241903-r1" x="36.6" y="630" textLength="622.2" clip-path="url(#terminal-3925241903-line-25)">&#160;Add&#160;--output-format&#160;to&#160;specify&#160;response&#160;structure&#160;</text><text class="terminal-3925241903-r4" x="658.8" y="630" textLength="12.2" clip-path="url(#terminal-3925241903-line-25)">(</text><text class="terminal-3925241903-r1" x="671" y="630" textLength="12.2" clip-path="url(#terminal-3925241903-line-25)">+</text><text class="terminal-3925241903-r5" x="683.2" y="630" textLength="12.2" clip-path="url(#terminal-3925241903-line-25)">2</text><text class="terminal-3925241903-r1" x="695.4" y="630" textLength="48.8" clip-path="url(#terminal-3925241903-line-25)">&#160;pts</text><text class="terminal-3925241903-r4" x="744.2" y="630" textLength="12.2" clip-path="url(#terminal-3925241903-line-25)">)</text><text class="terminal-3925241903-r1" x="1073.6" y="630" textLength="12.2" clip-path="url(#terminal-3925241903-line-25)">
163
+ </text><text class="terminal-3925241903-r1" x="1073.6" y="654.4" textLength="12.2" clip-path="url(#terminal-3925241903-line-26)">
164
+ </text>
165
+ </g>
166
+ </g>
167
+ </svg>