kash-shell 0.3.25__tar.gz → 0.3.27__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 (325) hide show
  1. {kash_shell-0.3.25 → kash_shell-0.3.27}/PKG-INFO +59 -56
  2. {kash_shell-0.3.25 → kash_shell-0.3.27}/README.md +55 -53
  3. {kash_shell-0.3.25 → kash_shell-0.3.27}/pyproject.toml +5 -4
  4. kash_shell-0.3.27/src/kash/actions/__init__.py +100 -0
  5. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/minify_html.py +2 -2
  6. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/general_commands.py +4 -2
  7. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/assistant_commands.py +4 -3
  8. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/welcome.py +1 -1
  9. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/colors.py +7 -3
  10. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/logger.py +4 -0
  11. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/text_styles.py +1 -0
  12. kash_shell-0.3.27/src/kash/config/unified_live.py +249 -0
  13. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/assistant_instructions_template.md +3 -3
  14. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/a1_what_is_kash.md +22 -20
  15. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/a2_installation.md +10 -10
  16. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/a3_getting_started.md +8 -8
  17. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/a4_elements.md +3 -3
  18. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/a5_tips_for_use_with_other_tools.md +12 -12
  19. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b0_philosophy_of_kash.md +17 -17
  20. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b1_kash_overview.md +7 -7
  21. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b2_workspace_and_file_formats.md +1 -1
  22. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b3_modern_shell_tool_recommendations.md +1 -1
  23. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b4_faq.md +7 -7
  24. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/welcome.md +1 -1
  25. kash_shell-0.3.27/src/kash/embeddings/embeddings.py +212 -0
  26. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/embeddings/text_similarity.py +2 -2
  27. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/shell_callable_action.py +4 -3
  28. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_embeddings.py +5 -2
  29. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_server_sse.py +0 -5
  30. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/graph_model.py +2 -0
  31. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/items_model.py +4 -4
  32. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/shell_output.py +2 -2
  33. kash_shell-0.3.27/src/kash/shell/shell_main.py +133 -0
  34. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/version.py +18 -2
  35. kash_shell-0.3.27/src/kash/utils/file_utils/csv_utils.py +105 -0
  36. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/multitask_status.py +19 -5
  37. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/base_styles.css.jinja +384 -31
  38. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/base_webpage.html.jinja +43 -0
  39. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/components/toc_styles.css.jinja +25 -4
  40. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/components/tooltip_styles.css.jinja +2 -0
  41. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/content_styles.css.jinja +23 -9
  42. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/item_view.html.jinja +12 -4
  43. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/simple_webpage.html.jinja +2 -2
  44. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/custom_shell.py +6 -6
  45. kash_shell-0.3.27/tests/kash/utils/file_utils/test_csv_utils.py +129 -0
  46. kash_shell-0.3.27/tests/web_gen/test_social_metadata.py +109 -0
  47. {kash_shell-0.3.25 → kash_shell-0.3.27}/uv.lock +364 -304
  48. kash_shell-0.3.25/src/kash/actions/__init__.py +0 -55
  49. kash_shell-0.3.25/src/kash/embeddings/embeddings.py +0 -141
  50. kash_shell-0.3.25/src/kash/shell/shell_main.py +0 -75
  51. {kash_shell-0.3.25 → kash_shell-0.3.27}/.copier-answers.yml +0 -0
  52. {kash_shell-0.3.25 → kash_shell-0.3.27}/.cursor/rules/general.mdc +0 -0
  53. {kash_shell-0.3.25 → kash_shell-0.3.27}/.cursor/rules/python.mdc +0 -0
  54. {kash_shell-0.3.25 → kash_shell-0.3.27}/.env.template +0 -0
  55. {kash_shell-0.3.25 → kash_shell-0.3.27}/.github/workflows/ci.yml +0 -0
  56. {kash_shell-0.3.25 → kash_shell-0.3.27}/.github/workflows/publish.yml +0 -0
  57. {kash_shell-0.3.25 → kash_shell-0.3.27}/.gitignore +0 -0
  58. {kash_shell-0.3.25 → kash_shell-0.3.27}/LICENSE +0 -0
  59. {kash_shell-0.3.25 → kash_shell-0.3.27}/Makefile +0 -0
  60. {kash_shell-0.3.25 → kash_shell-0.3.27}/development.md +0 -0
  61. {kash_shell-0.3.25 → kash_shell-0.3.27}/devtools/generate_readme.xsh +0 -0
  62. {kash_shell-0.3.25 → kash_shell-0.3.27}/devtools/lint.py +0 -0
  63. {kash_shell-0.3.25 → kash_shell-0.3.27}/devtools/profile_main.py +0 -0
  64. {kash_shell-0.3.25 → kash_shell-0.3.27}/installation.md +0 -0
  65. {kash_shell-0.3.25 → kash_shell-0.3.27}/publishing.md +0 -0
  66. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/__init__.py +0 -0
  67. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/__main__.py +0 -0
  68. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/assistant_chat.py +0 -0
  69. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/chat.py +0 -0
  70. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/combine_docs.py +0 -0
  71. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/concat_docs.py +0 -0
  72. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/format_markdown_template.py +0 -0
  73. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/markdownify_html.py +0 -0
  74. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/readability.py +0 -0
  75. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/render_as_html.py +0 -0
  76. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/show_webpage.py +0 -0
  77. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/strip_html.py +0 -0
  78. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/summarize_as_bullets.py +0 -0
  79. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/tabbed_webpage_config.py +0 -0
  80. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/tabbed_webpage_generate.py +0 -0
  81. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/meta/write_instructions.py +0 -0
  82. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/meta/write_new_action.py +0 -0
  83. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/__init__.py +0 -0
  84. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/basic_file_commands.py +0 -0
  85. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/browser_commands.py +0 -0
  86. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/debug_commands.py +0 -0
  87. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/diff_commands.py +0 -0
  88. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/files_command.py +0 -0
  89. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/logs_commands.py +0 -0
  90. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/model_commands.py +0 -0
  91. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/reformat_command.py +0 -0
  92. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/search_command.py +0 -0
  93. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/show_command.py +0 -0
  94. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/extras/parse_uv_lock.py +0 -0
  95. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/extras/utils_commands.py +0 -0
  96. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/doc_commands.py +0 -0
  97. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/help_commands.py +0 -0
  98. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/logo.py +0 -0
  99. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/workspace/selection_commands.py +0 -0
  100. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/workspace/workspace_commands.py +0 -0
  101. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/__init__.py +0 -0
  102. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/capture_output.py +0 -0
  103. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/env_settings.py +0 -0
  104. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/init.py +0 -0
  105. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/lazy_imports.py +0 -0
  106. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/logger_basic.py +0 -0
  107. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/logo.txt +0 -0
  108. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/server_config.py +0 -0
  109. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/settings.py +0 -0
  110. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/setup.py +0 -0
  111. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/suppress_warnings.py +0 -0
  112. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/__init__.py +0 -0
  113. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/all_docs.py +0 -0
  114. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/load_actions_info.py +0 -0
  115. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/load_api_docs.py +0 -0
  116. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/load_help_topics.py +0 -0
  117. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/load_source_code.py +0 -0
  118. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/api_docs_template.md +0 -0
  119. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/readme_template.md +0 -0
  120. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/warning.md +0 -0
  121. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/docs_base.py +0 -0
  122. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/load_custom_command_info.py +0 -0
  123. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/load_faqs.py +0 -0
  124. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/load_recipe_snippets.py +0 -0
  125. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/recipes/general_system_commands.sh +0 -0
  126. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/recipes/python_dev_commands.sh +0 -0
  127. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/recipes/tldr_standard_commands.sh +0 -0
  128. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/embeddings/cosine.py +0 -0
  129. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/__init__.py +0 -0
  130. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/action_decorators.py +0 -0
  131. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/action_exec.py +0 -0
  132. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/action_registry.py +0 -0
  133. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/combiners.py +0 -0
  134. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/command_exec.py +0 -0
  135. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/command_registry.py +0 -0
  136. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/fetch_url_items.py +0 -0
  137. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/history.py +0 -0
  138. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/importing.py +0 -0
  139. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/llm_transforms.py +0 -0
  140. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/precondition_checks.py +0 -0
  141. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/precondition_registry.py +0 -0
  142. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/preconditions.py +0 -0
  143. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/resolve_args.py +0 -0
  144. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/runtime_settings.py +0 -0
  145. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/__init__.py +0 -0
  146. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/args_model.py +0 -0
  147. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/commands_model.py +0 -0
  148. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/script_model.py +0 -0
  149. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/shell_model.py +0 -0
  150. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/__init__.py +0 -0
  151. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/file_store.py +0 -0
  152. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/item_file_format.py +0 -0
  153. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/metadata_dirs.py +0 -0
  154. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/persisted_yaml.py +0 -0
  155. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/store_cache_warmer.py +0 -0
  156. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/store_filenames.py +0 -0
  157. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/__init__.py +0 -0
  158. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/assistant.py +0 -0
  159. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/assistant_instructions.py +0 -0
  160. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/assistant_output.py +0 -0
  161. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/function_param_info.py +0 -0
  162. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_lookups.py +0 -0
  163. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_pages.py +0 -0
  164. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_printing.py +0 -0
  165. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_types.py +0 -0
  166. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/recommended_commands.py +0 -0
  167. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/tldr_help.py +0 -0
  168. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/__init__.py +0 -0
  169. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/clean_headings.py +0 -0
  170. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/custom_sliding_transforms.py +0 -0
  171. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/fuzzy_parsing.py +0 -0
  172. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/init_litellm.py +0 -0
  173. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_api_keys.py +0 -0
  174. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_completion.py +0 -0
  175. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_features.py +0 -0
  176. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_messages.py +0 -0
  177. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_names.py +0 -0
  178. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llms.py +0 -0
  179. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/__init__.py +0 -0
  180. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/local_server.py +0 -0
  181. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/local_server_commands.py +0 -0
  182. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/local_server_routes.py +0 -0
  183. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/local_url_formatters.py +0 -0
  184. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/port_tools.py +0 -0
  185. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/rich_html_template.py +0 -0
  186. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/__init__.py +0 -0
  187. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_cli.py +0 -0
  188. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_main.py +0 -0
  189. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_server_commands.py +0 -0
  190. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_server_routes.py +0 -0
  191. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_server_stdio.py +0 -0
  192. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/__init__.py +0 -0
  193. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/audio_processing.py +0 -0
  194. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/media_cache.py +0 -0
  195. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/media_services.py +0 -0
  196. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/media_tools.py +0 -0
  197. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/services/local_file_media.py +0 -0
  198. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/timestamp_citations.py +0 -0
  199. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/transcription_deepgram.py +0 -0
  200. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/transcription_format.py +0 -0
  201. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/transcription_whisper.py +0 -0
  202. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/__init__.py +0 -0
  203. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/actions_model.py +0 -0
  204. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/assistant_response_model.py +0 -0
  205. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/compound_actions_model.py +0 -0
  206. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/concept_model.py +0 -0
  207. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/exec_model.py +0 -0
  208. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/language_list.py +0 -0
  209. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/llm_actions_model.py +0 -0
  210. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/media_model.py +0 -0
  211. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/operations_model.py +0 -0
  212. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/params_model.py +0 -0
  213. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/paths_model.py +0 -0
  214. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/preconditions_model.py +0 -0
  215. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/__init__.py +0 -0
  216. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/completions/completion_scoring.py +0 -0
  217. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/completions/completion_types.py +0 -0
  218. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/completions/shell_completions.py +0 -0
  219. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/file_icons/color_for_format.py +0 -0
  220. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/file_icons/nerd_icons.py +0 -0
  221. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/__init__.py +0 -0
  222. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/input_prompts.py +0 -0
  223. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/inquirer_settings.py +0 -0
  224. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/param_inputs.py +0 -0
  225. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/shell_confirm.py +0 -0
  226. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/__init__.py +0 -0
  227. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/kerm_code_utils.py +0 -0
  228. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/kerm_codes.py +0 -0
  229. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/kmarkdown.py +0 -0
  230. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/shell_formatting.py +0 -0
  231. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/ui/__init__.py +0 -0
  232. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/ui/shell_results.py +0 -0
  233. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/ui/shell_syntax.py +0 -0
  234. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/utils/exception_printing.py +0 -0
  235. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/utils/native_utils.py +0 -0
  236. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/utils/shell_function_wrapper.py +0 -0
  237. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/__init__.py +0 -0
  238. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/api_retries.py +0 -0
  239. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/cache_requests_limited.py +0 -0
  240. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/gather_limited.py +0 -0
  241. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/http_utils.py +0 -0
  242. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/progress_protocol.py +0 -0
  243. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/__init__.py +0 -0
  244. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/format_utils.py +0 -0
  245. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/function_inspect.py +0 -0
  246. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/import_utils.py +0 -0
  247. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/lazyobject.py +0 -0
  248. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/obj_replace.py +0 -0
  249. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/parse_docstring.py +0 -0
  250. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/parse_key_vals.py +0 -0
  251. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/parse_shell_args.py +0 -0
  252. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/stack_traces.py +0 -0
  253. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/task_stack.py +0 -0
  254. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/testing.py +0 -0
  255. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/type_utils.py +0 -0
  256. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/uniquifier.py +0 -0
  257. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/url.py +0 -0
  258. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/url_slice.py +0 -0
  259. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/errors.py +0 -0
  260. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_formats/chat_format.py +0 -0
  261. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/__init__.py +0 -0
  262. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/dir_info.py +0 -0
  263. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_ext.py +0 -0
  264. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_formats.py +0 -0
  265. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_formats_model.py +0 -0
  266. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_sort_filter.py +0 -0
  267. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_walk.py +0 -0
  268. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/filename_parsing.py +0 -0
  269. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/ignore_files.py +0 -0
  270. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/mtime_cache.py +0 -0
  271. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/path_utils.py +0 -0
  272. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/lang_utils/__init__.py +0 -0
  273. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/lang_utils/capitalization.py +0 -0
  274. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/__init__.py +0 -0
  275. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/ansi_cell_len.py +0 -0
  276. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/rich_char_transform.py +0 -0
  277. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/rich_indent.py +0 -0
  278. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/rich_markdown_fork.py +0 -0
  279. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/doc_normalization.py +0 -0
  280. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/escape_html_tags.py +0 -0
  281. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/markdown_render.py +0 -0
  282. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/markdown_utils.py +0 -0
  283. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/markdownify_utils.py +0 -0
  284. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/unified_diffs.py +0 -0
  285. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/canon_url.py +0 -0
  286. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/dir_store.py +0 -0
  287. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/file_cache_utils.py +0 -0
  288. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/file_processing.py +0 -0
  289. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/local_file_cache.py +0 -0
  290. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_extract.py +0 -0
  291. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_extract_justext.py +0 -0
  292. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_extract_readabilipy.py +0 -0
  293. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_fetch.py +0 -0
  294. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_page_model.py +0 -0
  295. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/__init__.py +0 -0
  296. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/simple_webpage.py +0 -0
  297. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/tabbed_webpage.py +0 -0
  298. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/template_render.py +0 -0
  299. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/components/toc_scripts.js.jinja +0 -0
  300. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/components/tooltip_scripts.js.jinja +0 -0
  301. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/explain_view.html.jinja +0 -0
  302. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/tabbed_webpage.html.jinja +0 -0
  303. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/__init__.py +0 -0
  304. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/param_state.py +0 -0
  305. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/selections.py +0 -0
  306. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/source_items.py +0 -0
  307. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/workspace_dirs.py +0 -0
  308. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/workspace_output.py +0 -0
  309. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/workspace_registry.py +0 -0
  310. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/workspaces.py +0 -0
  311. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/command_nl_utils.py +0 -0
  312. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/customize_prompt.py +0 -0
  313. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/load_into_xonsh.py +0 -0
  314. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/shell_load_commands.py +0 -0
  315. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/shell_which.py +0 -0
  316. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_completers.py +0 -0
  317. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_env.py +0 -0
  318. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_keybindings.py +0 -0
  319. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_modern_tools.py +0 -0
  320. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_ranking_completer.py +0 -0
  321. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xontrib/fnm.py +0 -0
  322. {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xontrib/kash_extension.py +0 -0
  323. {kash_shell-0.3.25 → kash_shell-0.3.27}/tests/kash/utils/api_utils/test_gather_limited.py +0 -0
  324. {kash_shell-0.3.25 → kash_shell-0.3.27}/tests/kash/utils/rich_custom/test_multitask_status.py +0 -0
  325. {kash_shell-0.3.25 → kash_shell-0.3.27}/tests/test_shell.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kash-shell
3
- Version: 0.3.25
3
+ Version: 0.3.27
4
4
  Summary: The knowledge agent shell (core)
5
5
  Project-URL: Repository, https://github.com/jlevy/kash-shell
6
6
  Author-email: Joshua Levy <joshua@cal.berkeley.edu>
@@ -28,7 +28,7 @@ Requires-Dist: curl-cffi>=0.11.4
28
28
  Requires-Dist: deepgram-sdk>=3.10.1
29
29
  Requires-Dist: dunamai>=1.23.0
30
30
  Requires-Dist: fastapi>=0.115.11
31
- Requires-Dist: flowmark>=0.4.8
31
+ Requires-Dist: flowmark>=0.5.2
32
32
  Requires-Dist: frontmatter-format>=0.2.1
33
33
  Requires-Dist: funlog>=0.2.0
34
34
  Requires-Dist: httpx[brotli]>=0.28.1
@@ -41,7 +41,6 @@ Requires-Dist: litellm>=1.63.11
41
41
  Requires-Dist: markdownify>=0.13.1
42
42
  Requires-Dist: mcp-proxy>=0.5.0
43
43
  Requires-Dist: mcp>=1.6.0
44
- Requires-Dist: minify-tw-html>=0.1.3
45
44
  Requires-Dist: openai>=1.66.3
46
45
  Requires-Dist: pandas>=2.2.3
47
46
  Requires-Dist: patch-ng>=1.18.1
@@ -57,6 +56,7 @@ Requires-Dist: pyrate-limiter>=3.7.0
57
56
  Requires-Dist: python-dotenv>=1.0.1
58
57
  Requires-Dist: python-magic-bin>=0.4.14; platform_system == 'Windows'
59
58
  Requires-Dist: python-magic>=0.4.27; platform_system == 'Linux' or platform_system == 'Darwin'
59
+ Requires-Dist: questionary>=2.0.0
60
60
  Requires-Dist: readabilipy>=0.3.0
61
61
  Requires-Dist: regex>=2024.11.6
62
62
  Requires-Dist: rich-argparse>=1.7.0
@@ -69,6 +69,7 @@ Requires-Dist: tenacity>=9.0.0
69
69
  Requires-Dist: thefuzz>=0.22.1
70
70
  Requires-Dist: tiktoken>=0.9.0
71
71
  Requires-Dist: tldr>=3.3.0
72
+ Requires-Dist: tminify>=0.1.6
72
73
  Requires-Dist: typing-extensions>=4.12.2
73
74
  Requires-Dist: uvicorn>=0.34.0
74
75
  Requires-Dist: xonsh>=0.19.3
@@ -93,15 +94,15 @@ exploratory, and flexible using Python and current AI tools.
93
94
 
94
95
  The philosophy behind kash is similar to Unix shell tools: simple commands that can be
95
96
  combined in flexible and powerful ways.
96
- It operates on "items" such as URLs, files, or Markdown notes within a workspace
97
+ It operates on items such as URLs, files, or Markdown notes within a workspace
97
98
  directory.
98
99
 
99
100
  You can use Kash as an **interactive, AI-native command-line** shell for practical
100
- knowledge tasks. It's also **a Python library** that lets you convert a simple Python
101
+ knowledge tasks. Its also **a Python library** that lets you convert a simple Python
101
102
  function into a command and an MCP tool, so it integrates with other tools like
102
103
  Anthropic Desktop or Cursor.
103
104
 
104
- It's new and still has some rough edges, but it's now working well enough it is feeling
105
+ Its new and still has some rough edges, but its now working well enough it is feeling
105
106
  quite powerful. It now serves as a replacement for my usual shell (previously bash or
106
107
  zsh). I use it routinely to remix, combine, and interactively explore and then gradually
107
108
  automate complex tasks by composing AI tools, APIs, and libraries.
@@ -133,19 +134,20 @@ quick to install via uv.
133
134
  context of a **workspace**. A workspace is just a directory of files that have a few
134
135
  conventions to make it easier to maintain context and perform actions.
135
136
  A bit like how Git repos work, it has a `.kash/` directory that holds metadata and
136
- cached content. The rest can be anything, but is typically directories of resources
137
- (like .docx or .pdf or links to web pages) or content, typically Markdown files with
138
- YAML frontmatter. All text files use
139
- [frontmatter-format](https://github.com/jlevy/frontmatter-format) so have easy-to-read
140
- YAML metadata that includes not just title or description, but also the names of the
141
- actions that created it.
137
+ cached content. The rest can be anything, but is typically directories of content and
138
+ resources (often Markdown or HTML but also .docx or .pdf or links to web pages).
139
+ All text files use [frontmatter-format](https://github.com/jlevy/frontmatter-format)
140
+ so have YAML metadata that includes not just title or description, but also how it was
141
+ created. All Markdown files are auto-formatted with
142
+ [flowmark](https://github.com/jlevy/flowmark), which makes documents much easier to
143
+ diff and version control (and prettier to read and edit).
142
144
 
143
145
  - **Compositionality:** An action is composable with other actions simply as a Python
144
146
  function, so complex operations (for example, transcribing and annotating a video and
145
147
  publishing it on a website) actions can be built from simpler actions (say downloading
146
148
  and caching a YouTube video, identifying the speakers in a transcript, formatting it
147
- as pretty HTML, etc.). The goal is to reduce the "interstitial complexity" of
148
- combining tools, so it's easy for you (or an LLM!) to combine tools in flexible and
149
+ as pretty HTML, etc.). The goal is to reduce the interstitial complexity of
150
+ combining tools, so its easy for you (or an LLM!) to combine tools in flexible and
149
151
  powerful ways.
150
152
 
151
153
  - **Command-line usage:** In addition to using the function in other libraries and
@@ -172,16 +174,16 @@ transcripts and notes, write blog posts, extract or visualize concepts, check ci
172
174
  convert notes to PDFs or beautifully formatted HTML, or perform numerous other
173
175
  content-related tasks possible by orchestrating AI tools in the right ways.
174
176
 
175
- As I've been building kash over the past couple months, I found I've found it's not only
177
+ As Ive been building kash over the past couple months, I found Ive found its not only
176
178
  faster to do complex things, but that it has also become replacement for my usual shell.
177
- It's the power-tool I want to use alongside Cursor and ChatGPT/Claude.
179
+ Its the power-tool I want to use alongside Cursor and ChatGPT/Claude.
178
180
  We all know and trust shells like bash, zsh, and fish, but now I find this is much more
179
181
  powerful for everyday usage.
180
182
  It has little niceties, like you can just type `files` for a better listing of files or
181
183
  `show` and it will show you a file the right way, no matter what kind of file it is.
182
- You can also type something like "? find md files" and press tab and it will list you I
184
+ You can also type something like “? find md files and press tab and it will list you I
183
185
  find it is much more powerful for local usage than than bash/zsh/fish.
184
- If you're a command-line nerd, you might like it a lot.
186
+ If youre a command-line nerd, you might like it a lot.
185
187
 
186
188
  But my hope is that with these enhancements, the shell is also far more friendly and
187
189
  usable by anyone reasonably technical, and does not feel so esoteric as a typical Unix
@@ -190,16 +192,17 @@ shell.
190
192
  Finally, one more thing: Kash is also my way of experimenting with something else new: a
191
193
  **terminal GUI support** that adds GUI features terminal like clickable text, buttons,
192
194
  tooltips, and popovers in the terminal.
193
- I've separately built a new desktop terminal app, Kerm, which adds support for a simple
194
- "Kerm codes" protocol for such visual components, encoded as OSC codes then rendered in
195
+ Ive separately built a new desktop terminal app, Kerm, which adds support for a simple
196
+ Kerm codes protocol for such visual components, encoded as OSC codes then rendered in
195
197
  the terminal. Because Kash supports these codes, as this develops you will get the
196
198
  visuals of a web app layered on the flexibility of a text-based terminal.
197
199
 
198
200
  ### Is Kash Mature?
199
201
 
200
- No. :) It's the result of a couple months of coding and experimentation, and it's very
201
- much in progress. Please help me make it better by sharing your ideas and feedback!
202
- It's easiest to DM me at [twitter.com/ojoshe](https://x.com/ojoshe).
202
+ Its the result of a couple months of coding and experimentation, and its still in
203
+ progress and has rough edges.
204
+ Please help me make it better by sharing your ideas and feedback!
205
+ It’s easiest to DM me at [twitter.com/ojoshe](https://x.com/ojoshe).
203
206
  My contact info is at [github.com/jlevy](https://github.com/jlevy).
204
207
 
205
208
  [**Please follow or DM me**](https://x.com/ojoshe) for future updates or if you have
@@ -211,7 +214,7 @@ ideas, feedback, or use cases for Kash!
211
214
 
212
215
  Kash offers a shell environment based on [xonsh](https://xon.sh/) augmented with a bunch
213
216
  of enhanced commands and customizations.
214
- If you've used a bash or Python shell before, it should be very intuitive.
217
+ If youve used a bash or Python shell before, it should be very intuitive.
215
218
 
216
219
  Within the kash shell, you get a full environment with all actions and commands.
217
220
  You also get intelligent auto-complete, a built-in assistant to help you perform tasks,
@@ -220,7 +223,7 @@ and enhanced tab completion.
220
223
  The shell is an easy way to use Kash actions, simply calling them like other shell
221
224
  commands from the command line.
222
225
 
223
- But remember that's just one way to use actions; you can also use them directly in
226
+ But remember thats just one way to use actions; you can also use them directly in
224
227
  Python or from an MCP client.
225
228
 
226
229
  ### Current Kash Packages
@@ -230,7 +233,7 @@ However, some use cases require additional libraries, like video downloading too
230
233
  handling, etc.
231
234
 
232
235
  To keep kash dependencies more manageable, these additional utilities and actions are
233
- packaged additional "kits".
236
+ packaged additional kits”.
234
237
 
235
238
  The examples below use video transcription from YouTube as an example.
236
239
  To start with more full examples, I suggest starting with the `kash-media` kit.
@@ -245,7 +248,7 @@ These are for `kash-media` but you can use a `kash-shell` for a more basic setup
245
248
  Kash is easiest to use via [**uv**](https://docs.astral.sh/uv/), the new package
246
249
  manager for Python. `uv` replaces traditional use of `pyenv`, `pipx`, `poetry`, `pip`,
247
250
  etc. Installing `uv` also ensures you get a compatible version of Python.
248
- See [uv's docs](https://docs.astral.sh/uv/getting-started/installation/) for other
251
+ See [uvs docs](https://docs.astral.sh/uv/getting-started/installation/) for other
249
252
  installation methods and platforms.
250
253
  Usually you just want to run:
251
254
  ```shell
@@ -254,7 +257,7 @@ These are for `kash-media` but you can use a `kash-shell` for a more basic setup
254
257
 
255
258
  2. **Install additional command-line tools:**
256
259
 
257
- In addition to Python, it's highly recommended to install a few other dependencies to
260
+ In addition to Python, its highly recommended to install a few other dependencies to
258
261
  make more tools and commands work.
259
262
  For macOS, you can again use brew:
260
263
 
@@ -311,7 +314,7 @@ These are for `kash-media` but you can use a `kash-shell` for a more basic setup
311
314
  ```
312
315
 
313
316
  These keys should go in the `.env` file in your current work directory or a parent or
314
- your home directory (recommended if you'll be working in several directories, as with
317
+ your home directory (recommended if youll be working in several directories, as with
315
318
  a typical shell).
316
319
 
317
320
  5. **Run kash:**
@@ -351,14 +354,14 @@ If you add the `--proxy` arg, it will run an MCP stdio server but connect to the
351
354
  server you are running in the kash shell, by default at `localhost:4440`.
352
355
 
353
356
  Then if you run `start_mcp_server` from the shell, your client will connect to your
354
- shell, and you can actually use any "published" kash action as an MCP tool.
357
+ shell, and you can actually use any published kash action as an MCP tool.
355
358
 
356
- Then you can for example ask your MCP client "can you transcribe this video?"
359
+ Then you can for example ask your MCP client can you transcribe this video?”
357
360
  and give it a URL, and it will be able to call the `transcribe` action as a tool.
358
361
 
359
362
  What is even better is that all the inputs and outputs are saved in the current kash
360
- workspace, just as if you'd been running these commands yourself in the shell.
361
- This way, you don't lose context or any work, and can seamlessly switch between an MCP
363
+ workspace, just as if youd been running these commands yourself in the shell.
364
+ This way, you dont lose context or any work, and can seamlessly switch between an MCP
362
365
  client like Cursor, the shell, and any other tools to edit the inputs or outputs of
363
366
  actions in your workspace directory.
364
367
 
@@ -383,11 +386,11 @@ Type `help` for the full documentation.
383
386
  The simplest way to illustrate how to use kash is by example.
384
387
  You can go through the commands below a few at a time, trying each one.
385
388
 
386
- This is a "real" example that uses ffmpeg and a few other libraries.
387
- So to get it to work you must install not just the main shell but the kash "media kit"
389
+ This is a real example that uses ffmpeg and a few other libraries.
390
+ So to get it to work you must install not just the main shell but the kash media kit
388
391
  with extra dependencies.
389
392
  This is discussed in [the installation instructions](#installation-steps).
390
- If you don't have these already installed, you can add these tools:
393
+ If you dont have these already installed, you can add these tools:
391
394
 
392
395
  Then run `kash` to start.
393
396
 
@@ -538,8 +541,8 @@ All of these steps are just actions.
538
541
 
539
542
  ### Creating a New Workspace
540
543
 
541
- Although you don't always need one, a *workspace* is very helpful for any real work in
542
- kash. It's just a directory of files, plus a `.kash/` directory with various logs and
544
+ Although you dont always need one, a *workspace* is very helpful for any real work in
545
+ kash. Its just a directory of files, plus a `.kash/` directory with various logs and
543
546
  metadata.
544
547
 
545
548
  Note the `.kash/cache` directory contains all the downloaded videos and media you
@@ -560,7 +563,7 @@ By default, when you are not using the shell inside a workspace directory, or wh
560
563
  run kash the first time, it uses the default *global workspace*.
561
564
 
562
565
  Once you create a workspace, you can `cd` into that workspace and that will become the
563
- current workspace. (If you're familiar with how the `git` command-line works in
566
+ current workspace. (If youre familiar with how the `git` command-line works in
564
567
  conjunction with the `.git/` directory, this behavior is very similar.)
565
568
 
566
569
  To start a new workspace, run a command like
@@ -598,7 +601,7 @@ A few of the most important commands for managing files and work are these:
598
601
 
599
602
  - `workspace` shows or selects or creates a new workspace.
600
603
  Initially you work in the default global workspace (typically at `~/Kash/workspace`)
601
- but for more real work you'll want to create a workspace, which is a directory to hold
604
+ but for more real work youll want to create a workspace, which is a directory to hold
602
605
  the files you are working with.
603
606
 
604
607
  - `select` shows or sets selections, which are the set of files the next command will
@@ -612,7 +615,7 @@ A few of the most important commands for managing files and work are these:
612
615
 
613
616
  - `logs` to see full logs (typically more detailed than what you see in the console).
614
617
 
615
- - `history` to see recent commands you've run.
618
+ - `history` to see recent commands youve run.
616
619
 
617
620
  - `import_item` to add a resource such as a URL or a file to your local workspace.
618
621
 
@@ -643,7 +646,7 @@ markdownify --show_source
643
646
 
644
647
  ### What is Included?
645
648
 
646
- I've tried to build independently useful pieces that fit together in a simple way:
649
+ Ive tried to build independently useful pieces that fit together in a simple way:
647
650
 
648
651
  - The kash **action framework**:
649
652
 
@@ -716,9 +719,9 @@ I've tried to build independently useful pieces that fit together in a simple wa
716
719
  OSC 8 links
717
720
 
718
721
  - Sadly, we may have mind-boggling AI tools, but Terminals are still incredibly
719
- archaic and don't support these features well (more on this below) but I have a new
722
+ archaic and dont support these features well (more on this below) but I have a new
720
723
  terminal, Kerm, that shows these as tooltips and makes every command clickable
721
- (please contact me if you'd like an early developer preview, as I'd love feedback)
724
+ (please contact me if youd like an early developer preview, as Id love feedback)
722
725
 
723
726
  ## Tools Used by Kash
724
727
 
@@ -752,14 +755,14 @@ I tried half a dozen different popular terminals on Mac
752
755
  [Hyper](https://hyper.is/)). Unfortunately, none offer really good support right out of
753
756
  the box, but I encourage you to try
754
757
 
755
- ✨**Would you be willing to help test something new?** If you've made it this far and are
758
+ ✨**Would you be willing to help test something new?** If youve made it this far and are
756
759
  still reading, I have a request.
757
- So alongside kash, I've begun to build a new terminal app, **Kerm**, that has the
760
+ So alongside kash, Ive begun to build a new terminal app, **Kerm**, that has the
758
761
  features we would want in a modern command line, such as clickable links and commands,
759
762
  tooltips, and image support.
760
763
  Kash also takes advantage of this support by embedding OSC 8 links.
761
764
  It is *so* much nicer to use.
762
- I'd like feedback so please [message me](https://twitter.com/ojoshe) if you'd like to
765
+ Id like feedback so please [message me](https://twitter.com/ojoshe) if youd like to
763
766
  try it out an early dev version!
764
767
 
765
768
  ### Choosing an Editor
@@ -769,7 +772,7 @@ Kash respects the `EDITOR` environment variable if you use the `edit` command.
769
772
 
770
773
  ### Using on macOS
771
774
 
772
- Kash calls `open` to open some files, so in general, it's convenient to make sure your
775
+ Kash calls `open` to open some files, so in general, its convenient to make sure your
773
776
  preferred editor is set up for `.yml` and `.md` files.
774
777
 
775
778
  For convenience, a reminder on how to do this:
@@ -777,7 +780,7 @@ For convenience, a reminder on how to do this:
777
780
  - In Finder, pick a `.md` or `.yml` file and hit Cmd-I (or right-click and select Get
778
781
  Info).
779
782
 
780
- - Select the editor, such as Cursor or VSCode or Obsidian, and click the "Change All…"
783
+ - Select the editor, such as Cursor or VSCode or Obsidian, and click the Change All…”
781
784
  button to have it apply to all files with that extension.
782
785
 
783
786
  - Repeat with each file type.
@@ -796,23 +799,23 @@ out of the box to edit workspace files in Markdown, HTML, and YAML in kash works
796
799
  Kash uses Markdown files with YAML frontmatter, which is fully compatible with
797
800
  [Obsidian](https://obsidian.md/). Some notes:
798
801
 
799
- - In Obsidian's preferences, under Editor, turn on "Strict line breaks".
802
+ - In Obsidians preferences, under Editor, turn on Strict line breaks”.
800
803
 
801
- - This makes the line breaks in kash's normalized Markdown output work well in Obsidian.
804
+ - This makes the line breaks in kashs normalized Markdown output work well in Obsidian.
802
805
 
803
806
  - Some kash files also contain HTML in Markdown.
804
- This works fine, but note that only the current line's HTML is shown in Obsidian.
807
+ This works fine, but note that only the current lines HTML is shown in Obsidian.
805
808
 
806
809
  - Install the [Front Matter Title
807
810
  plugin](https://github.com/snezhig/obsidian-front-matter-title):
808
811
 
809
- - Go to settings, enable community plugins, search for "Front Matter Title" and
812
+ - Go to settings, enable community plugins, search for Front Matter Title and
810
813
  install.
811
814
 
812
- - Under "Installed Plugins," adjust the settings to enable "Replace shown title in
813
- file explorer," "Replace shown title in graph," etc.
815
+ - Under Installed Plugins,” adjust the settings to enable Replace shown title in
816
+ file explorer,” Replace shown title in graph,” etc.
814
817
 
815
- - You probably want to keep the "Replace titles in header of leaves" off so you can
818
+ - You probably want to keep the Replace titles in header of leaves off so you can
816
819
  still see original filenames if needed.
817
820
 
818
821
  - Now titles are easy to read for all kash notes.
@@ -17,15 +17,15 @@ exploratory, and flexible using Python and current AI tools.
17
17
 
18
18
  The philosophy behind kash is similar to Unix shell tools: simple commands that can be
19
19
  combined in flexible and powerful ways.
20
- It operates on "items" such as URLs, files, or Markdown notes within a workspace
20
+ It operates on items such as URLs, files, or Markdown notes within a workspace
21
21
  directory.
22
22
 
23
23
  You can use Kash as an **interactive, AI-native command-line** shell for practical
24
- knowledge tasks. It's also **a Python library** that lets you convert a simple Python
24
+ knowledge tasks. Its also **a Python library** that lets you convert a simple Python
25
25
  function into a command and an MCP tool, so it integrates with other tools like
26
26
  Anthropic Desktop or Cursor.
27
27
 
28
- It's new and still has some rough edges, but it's now working well enough it is feeling
28
+ Its new and still has some rough edges, but its now working well enough it is feeling
29
29
  quite powerful. It now serves as a replacement for my usual shell (previously bash or
30
30
  zsh). I use it routinely to remix, combine, and interactively explore and then gradually
31
31
  automate complex tasks by composing AI tools, APIs, and libraries.
@@ -57,19 +57,20 @@ quick to install via uv.
57
57
  context of a **workspace**. A workspace is just a directory of files that have a few
58
58
  conventions to make it easier to maintain context and perform actions.
59
59
  A bit like how Git repos work, it has a `.kash/` directory that holds metadata and
60
- cached content. The rest can be anything, but is typically directories of resources
61
- (like .docx or .pdf or links to web pages) or content, typically Markdown files with
62
- YAML frontmatter. All text files use
63
- [frontmatter-format](https://github.com/jlevy/frontmatter-format) so have easy-to-read
64
- YAML metadata that includes not just title or description, but also the names of the
65
- actions that created it.
60
+ cached content. The rest can be anything, but is typically directories of content and
61
+ resources (often Markdown or HTML but also .docx or .pdf or links to web pages).
62
+ All text files use [frontmatter-format](https://github.com/jlevy/frontmatter-format)
63
+ so have YAML metadata that includes not just title or description, but also how it was
64
+ created. All Markdown files are auto-formatted with
65
+ [flowmark](https://github.com/jlevy/flowmark), which makes documents much easier to
66
+ diff and version control (and prettier to read and edit).
66
67
 
67
68
  - **Compositionality:** An action is composable with other actions simply as a Python
68
69
  function, so complex operations (for example, transcribing and annotating a video and
69
70
  publishing it on a website) actions can be built from simpler actions (say downloading
70
71
  and caching a YouTube video, identifying the speakers in a transcript, formatting it
71
- as pretty HTML, etc.). The goal is to reduce the "interstitial complexity" of
72
- combining tools, so it's easy for you (or an LLM!) to combine tools in flexible and
72
+ as pretty HTML, etc.). The goal is to reduce the interstitial complexity of
73
+ combining tools, so its easy for you (or an LLM!) to combine tools in flexible and
73
74
  powerful ways.
74
75
 
75
76
  - **Command-line usage:** In addition to using the function in other libraries and
@@ -96,16 +97,16 @@ transcripts and notes, write blog posts, extract or visualize concepts, check ci
96
97
  convert notes to PDFs or beautifully formatted HTML, or perform numerous other
97
98
  content-related tasks possible by orchestrating AI tools in the right ways.
98
99
 
99
- As I've been building kash over the past couple months, I found I've found it's not only
100
+ As Ive been building kash over the past couple months, I found Ive found its not only
100
101
  faster to do complex things, but that it has also become replacement for my usual shell.
101
- It's the power-tool I want to use alongside Cursor and ChatGPT/Claude.
102
+ Its the power-tool I want to use alongside Cursor and ChatGPT/Claude.
102
103
  We all know and trust shells like bash, zsh, and fish, but now I find this is much more
103
104
  powerful for everyday usage.
104
105
  It has little niceties, like you can just type `files` for a better listing of files or
105
106
  `show` and it will show you a file the right way, no matter what kind of file it is.
106
- You can also type something like "? find md files" and press tab and it will list you I
107
+ You can also type something like “? find md files and press tab and it will list you I
107
108
  find it is much more powerful for local usage than than bash/zsh/fish.
108
- If you're a command-line nerd, you might like it a lot.
109
+ If youre a command-line nerd, you might like it a lot.
109
110
 
110
111
  But my hope is that with these enhancements, the shell is also far more friendly and
111
112
  usable by anyone reasonably technical, and does not feel so esoteric as a typical Unix
@@ -114,16 +115,17 @@ shell.
114
115
  Finally, one more thing: Kash is also my way of experimenting with something else new: a
115
116
  **terminal GUI support** that adds GUI features terminal like clickable text, buttons,
116
117
  tooltips, and popovers in the terminal.
117
- I've separately built a new desktop terminal app, Kerm, which adds support for a simple
118
- "Kerm codes" protocol for such visual components, encoded as OSC codes then rendered in
118
+ Ive separately built a new desktop terminal app, Kerm, which adds support for a simple
119
+ Kerm codes protocol for such visual components, encoded as OSC codes then rendered in
119
120
  the terminal. Because Kash supports these codes, as this develops you will get the
120
121
  visuals of a web app layered on the flexibility of a text-based terminal.
121
122
 
122
123
  ### Is Kash Mature?
123
124
 
124
- No. :) It's the result of a couple months of coding and experimentation, and it's very
125
- much in progress. Please help me make it better by sharing your ideas and feedback!
126
- It's easiest to DM me at [twitter.com/ojoshe](https://x.com/ojoshe).
125
+ Its the result of a couple months of coding and experimentation, and its still in
126
+ progress and has rough edges.
127
+ Please help me make it better by sharing your ideas and feedback!
128
+ It’s easiest to DM me at [twitter.com/ojoshe](https://x.com/ojoshe).
127
129
  My contact info is at [github.com/jlevy](https://github.com/jlevy).
128
130
 
129
131
  [**Please follow or DM me**](https://x.com/ojoshe) for future updates or if you have
@@ -135,7 +137,7 @@ ideas, feedback, or use cases for Kash!
135
137
 
136
138
  Kash offers a shell environment based on [xonsh](https://xon.sh/) augmented with a bunch
137
139
  of enhanced commands and customizations.
138
- If you've used a bash or Python shell before, it should be very intuitive.
140
+ If youve used a bash or Python shell before, it should be very intuitive.
139
141
 
140
142
  Within the kash shell, you get a full environment with all actions and commands.
141
143
  You also get intelligent auto-complete, a built-in assistant to help you perform tasks,
@@ -144,7 +146,7 @@ and enhanced tab completion.
144
146
  The shell is an easy way to use Kash actions, simply calling them like other shell
145
147
  commands from the command line.
146
148
 
147
- But remember that's just one way to use actions; you can also use them directly in
149
+ But remember thats just one way to use actions; you can also use them directly in
148
150
  Python or from an MCP client.
149
151
 
150
152
  ### Current Kash Packages
@@ -154,7 +156,7 @@ However, some use cases require additional libraries, like video downloading too
154
156
  handling, etc.
155
157
 
156
158
  To keep kash dependencies more manageable, these additional utilities and actions are
157
- packaged additional "kits".
159
+ packaged additional kits”.
158
160
 
159
161
  The examples below use video transcription from YouTube as an example.
160
162
  To start with more full examples, I suggest starting with the `kash-media` kit.
@@ -169,7 +171,7 @@ These are for `kash-media` but you can use a `kash-shell` for a more basic setup
169
171
  Kash is easiest to use via [**uv**](https://docs.astral.sh/uv/), the new package
170
172
  manager for Python. `uv` replaces traditional use of `pyenv`, `pipx`, `poetry`, `pip`,
171
173
  etc. Installing `uv` also ensures you get a compatible version of Python.
172
- See [uv's docs](https://docs.astral.sh/uv/getting-started/installation/) for other
174
+ See [uvs docs](https://docs.astral.sh/uv/getting-started/installation/) for other
173
175
  installation methods and platforms.
174
176
  Usually you just want to run:
175
177
  ```shell
@@ -178,7 +180,7 @@ These are for `kash-media` but you can use a `kash-shell` for a more basic setup
178
180
 
179
181
  2. **Install additional command-line tools:**
180
182
 
181
- In addition to Python, it's highly recommended to install a few other dependencies to
183
+ In addition to Python, its highly recommended to install a few other dependencies to
182
184
  make more tools and commands work.
183
185
  For macOS, you can again use brew:
184
186
 
@@ -235,7 +237,7 @@ These are for `kash-media` but you can use a `kash-shell` for a more basic setup
235
237
  ```
236
238
 
237
239
  These keys should go in the `.env` file in your current work directory or a parent or
238
- your home directory (recommended if you'll be working in several directories, as with
240
+ your home directory (recommended if youll be working in several directories, as with
239
241
  a typical shell).
240
242
 
241
243
  5. **Run kash:**
@@ -275,14 +277,14 @@ If you add the `--proxy` arg, it will run an MCP stdio server but connect to the
275
277
  server you are running in the kash shell, by default at `localhost:4440`.
276
278
 
277
279
  Then if you run `start_mcp_server` from the shell, your client will connect to your
278
- shell, and you can actually use any "published" kash action as an MCP tool.
280
+ shell, and you can actually use any published kash action as an MCP tool.
279
281
 
280
- Then you can for example ask your MCP client "can you transcribe this video?"
282
+ Then you can for example ask your MCP client can you transcribe this video?”
281
283
  and give it a URL, and it will be able to call the `transcribe` action as a tool.
282
284
 
283
285
  What is even better is that all the inputs and outputs are saved in the current kash
284
- workspace, just as if you'd been running these commands yourself in the shell.
285
- This way, you don't lose context or any work, and can seamlessly switch between an MCP
286
+ workspace, just as if youd been running these commands yourself in the shell.
287
+ This way, you dont lose context or any work, and can seamlessly switch between an MCP
286
288
  client like Cursor, the shell, and any other tools to edit the inputs or outputs of
287
289
  actions in your workspace directory.
288
290
 
@@ -307,11 +309,11 @@ Type `help` for the full documentation.
307
309
  The simplest way to illustrate how to use kash is by example.
308
310
  You can go through the commands below a few at a time, trying each one.
309
311
 
310
- This is a "real" example that uses ffmpeg and a few other libraries.
311
- So to get it to work you must install not just the main shell but the kash "media kit"
312
+ This is a real example that uses ffmpeg and a few other libraries.
313
+ So to get it to work you must install not just the main shell but the kash media kit
312
314
  with extra dependencies.
313
315
  This is discussed in [the installation instructions](#installation-steps).
314
- If you don't have these already installed, you can add these tools:
316
+ If you dont have these already installed, you can add these tools:
315
317
 
316
318
  Then run `kash` to start.
317
319
 
@@ -462,8 +464,8 @@ All of these steps are just actions.
462
464
 
463
465
  ### Creating a New Workspace
464
466
 
465
- Although you don't always need one, a *workspace* is very helpful for any real work in
466
- kash. It's just a directory of files, plus a `.kash/` directory with various logs and
467
+ Although you dont always need one, a *workspace* is very helpful for any real work in
468
+ kash. Its just a directory of files, plus a `.kash/` directory with various logs and
467
469
  metadata.
468
470
 
469
471
  Note the `.kash/cache` directory contains all the downloaded videos and media you
@@ -484,7 +486,7 @@ By default, when you are not using the shell inside a workspace directory, or wh
484
486
  run kash the first time, it uses the default *global workspace*.
485
487
 
486
488
  Once you create a workspace, you can `cd` into that workspace and that will become the
487
- current workspace. (If you're familiar with how the `git` command-line works in
489
+ current workspace. (If youre familiar with how the `git` command-line works in
488
490
  conjunction with the `.git/` directory, this behavior is very similar.)
489
491
 
490
492
  To start a new workspace, run a command like
@@ -522,7 +524,7 @@ A few of the most important commands for managing files and work are these:
522
524
 
523
525
  - `workspace` shows or selects or creates a new workspace.
524
526
  Initially you work in the default global workspace (typically at `~/Kash/workspace`)
525
- but for more real work you'll want to create a workspace, which is a directory to hold
527
+ but for more real work youll want to create a workspace, which is a directory to hold
526
528
  the files you are working with.
527
529
 
528
530
  - `select` shows or sets selections, which are the set of files the next command will
@@ -536,7 +538,7 @@ A few of the most important commands for managing files and work are these:
536
538
 
537
539
  - `logs` to see full logs (typically more detailed than what you see in the console).
538
540
 
539
- - `history` to see recent commands you've run.
541
+ - `history` to see recent commands youve run.
540
542
 
541
543
  - `import_item` to add a resource such as a URL or a file to your local workspace.
542
544
 
@@ -567,7 +569,7 @@ markdownify --show_source
567
569
 
568
570
  ### What is Included?
569
571
 
570
- I've tried to build independently useful pieces that fit together in a simple way:
572
+ Ive tried to build independently useful pieces that fit together in a simple way:
571
573
 
572
574
  - The kash **action framework**:
573
575
 
@@ -640,9 +642,9 @@ I've tried to build independently useful pieces that fit together in a simple wa
640
642
  OSC 8 links
641
643
 
642
644
  - Sadly, we may have mind-boggling AI tools, but Terminals are still incredibly
643
- archaic and don't support these features well (more on this below) but I have a new
645
+ archaic and dont support these features well (more on this below) but I have a new
644
646
  terminal, Kerm, that shows these as tooltips and makes every command clickable
645
- (please contact me if you'd like an early developer preview, as I'd love feedback)
647
+ (please contact me if youd like an early developer preview, as Id love feedback)
646
648
 
647
649
  ## Tools Used by Kash
648
650
 
@@ -676,14 +678,14 @@ I tried half a dozen different popular terminals on Mac
676
678
  [Hyper](https://hyper.is/)). Unfortunately, none offer really good support right out of
677
679
  the box, but I encourage you to try
678
680
 
679
- ✨**Would you be willing to help test something new?** If you've made it this far and are
681
+ ✨**Would you be willing to help test something new?** If youve made it this far and are
680
682
  still reading, I have a request.
681
- So alongside kash, I've begun to build a new terminal app, **Kerm**, that has the
683
+ So alongside kash, Ive begun to build a new terminal app, **Kerm**, that has the
682
684
  features we would want in a modern command line, such as clickable links and commands,
683
685
  tooltips, and image support.
684
686
  Kash also takes advantage of this support by embedding OSC 8 links.
685
687
  It is *so* much nicer to use.
686
- I'd like feedback so please [message me](https://twitter.com/ojoshe) if you'd like to
688
+ Id like feedback so please [message me](https://twitter.com/ojoshe) if youd like to
687
689
  try it out an early dev version!
688
690
 
689
691
  ### Choosing an Editor
@@ -693,7 +695,7 @@ Kash respects the `EDITOR` environment variable if you use the `edit` command.
693
695
 
694
696
  ### Using on macOS
695
697
 
696
- Kash calls `open` to open some files, so in general, it's convenient to make sure your
698
+ Kash calls `open` to open some files, so in general, its convenient to make sure your
697
699
  preferred editor is set up for `.yml` and `.md` files.
698
700
 
699
701
  For convenience, a reminder on how to do this:
@@ -701,7 +703,7 @@ For convenience, a reminder on how to do this:
701
703
  - In Finder, pick a `.md` or `.yml` file and hit Cmd-I (or right-click and select Get
702
704
  Info).
703
705
 
704
- - Select the editor, such as Cursor or VSCode or Obsidian, and click the "Change All…"
706
+ - Select the editor, such as Cursor or VSCode or Obsidian, and click the Change All…”
705
707
  button to have it apply to all files with that extension.
706
708
 
707
709
  - Repeat with each file type.
@@ -720,23 +722,23 @@ out of the box to edit workspace files in Markdown, HTML, and YAML in kash works
720
722
  Kash uses Markdown files with YAML frontmatter, which is fully compatible with
721
723
  [Obsidian](https://obsidian.md/). Some notes:
722
724
 
723
- - In Obsidian's preferences, under Editor, turn on "Strict line breaks".
725
+ - In Obsidians preferences, under Editor, turn on Strict line breaks”.
724
726
 
725
- - This makes the line breaks in kash's normalized Markdown output work well in Obsidian.
727
+ - This makes the line breaks in kashs normalized Markdown output work well in Obsidian.
726
728
 
727
729
  - Some kash files also contain HTML in Markdown.
728
- This works fine, but note that only the current line's HTML is shown in Obsidian.
730
+ This works fine, but note that only the current lines HTML is shown in Obsidian.
729
731
 
730
732
  - Install the [Front Matter Title
731
733
  plugin](https://github.com/snezhig/obsidian-front-matter-title):
732
734
 
733
- - Go to settings, enable community plugins, search for "Front Matter Title" and
735
+ - Go to settings, enable community plugins, search for Front Matter Title and
734
736
  install.
735
737
 
736
- - Under "Installed Plugins," adjust the settings to enable "Replace shown title in
737
- file explorer," "Replace shown title in graph," etc.
738
+ - Under Installed Plugins,” adjust the settings to enable Replace shown title in
739
+ file explorer,” Replace shown title in graph,” etc.
738
740
 
739
- - You probably want to keep the "Replace titles in header of leaves" off so you can
741
+ - You probably want to keep the Replace titles in header of leaves off so you can
740
742
  still see original filenames if needed.
741
743
 
742
744
  - Now titles are easy to read for all kash notes.