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.
- {kash_shell-0.3.25 → kash_shell-0.3.27}/PKG-INFO +59 -56
- {kash_shell-0.3.25 → kash_shell-0.3.27}/README.md +55 -53
- {kash_shell-0.3.25 → kash_shell-0.3.27}/pyproject.toml +5 -4
- kash_shell-0.3.27/src/kash/actions/__init__.py +100 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/minify_html.py +2 -2
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/general_commands.py +4 -2
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/assistant_commands.py +4 -3
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/welcome.py +1 -1
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/colors.py +7 -3
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/logger.py +4 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/text_styles.py +1 -0
- kash_shell-0.3.27/src/kash/config/unified_live.py +249 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/assistant_instructions_template.md +3 -3
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/a1_what_is_kash.md +22 -20
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/a2_installation.md +10 -10
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/a3_getting_started.md +8 -8
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/a4_elements.md +3 -3
- {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
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b0_philosophy_of_kash.md +17 -17
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b1_kash_overview.md +7 -7
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b2_workspace_and_file_formats.md +1 -1
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b3_modern_shell_tool_recommendations.md +1 -1
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/topics/b4_faq.md +7 -7
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/welcome.md +1 -1
- kash_shell-0.3.27/src/kash/embeddings/embeddings.py +212 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/embeddings/text_similarity.py +2 -2
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/shell_callable_action.py +4 -3
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_embeddings.py +5 -2
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_server_sse.py +0 -5
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/graph_model.py +2 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/items_model.py +4 -4
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/shell_output.py +2 -2
- kash_shell-0.3.27/src/kash/shell/shell_main.py +133 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/version.py +18 -2
- kash_shell-0.3.27/src/kash/utils/file_utils/csv_utils.py +105 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/multitask_status.py +19 -5
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/base_styles.css.jinja +384 -31
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/base_webpage.html.jinja +43 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/components/toc_styles.css.jinja +25 -4
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/components/tooltip_styles.css.jinja +2 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/content_styles.css.jinja +23 -9
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/item_view.html.jinja +12 -4
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/simple_webpage.html.jinja +2 -2
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/custom_shell.py +6 -6
- kash_shell-0.3.27/tests/kash/utils/file_utils/test_csv_utils.py +129 -0
- kash_shell-0.3.27/tests/web_gen/test_social_metadata.py +109 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/uv.lock +364 -304
- kash_shell-0.3.25/src/kash/actions/__init__.py +0 -55
- kash_shell-0.3.25/src/kash/embeddings/embeddings.py +0 -141
- kash_shell-0.3.25/src/kash/shell/shell_main.py +0 -75
- {kash_shell-0.3.25 → kash_shell-0.3.27}/.copier-answers.yml +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/.cursor/rules/general.mdc +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/.cursor/rules/python.mdc +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/.env.template +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/.github/workflows/ci.yml +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/.github/workflows/publish.yml +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/.gitignore +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/LICENSE +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/Makefile +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/development.md +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/devtools/generate_readme.xsh +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/devtools/lint.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/devtools/profile_main.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/installation.md +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/publishing.md +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/__main__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/assistant_chat.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/chat.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/combine_docs.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/concat_docs.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/format_markdown_template.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/markdownify_html.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/readability.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/render_as_html.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/show_webpage.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/strip_html.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/summarize_as_bullets.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/tabbed_webpage_config.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/core/tabbed_webpage_generate.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/meta/write_instructions.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/actions/meta/write_new_action.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/basic_file_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/browser_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/debug_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/diff_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/files_command.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/logs_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/model_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/reformat_command.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/search_command.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/base/show_command.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/extras/parse_uv_lock.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/extras/utils_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/doc_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/help_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/help/logo.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/workspace/selection_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/commands/workspace/workspace_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/capture_output.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/env_settings.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/init.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/lazy_imports.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/logger_basic.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/logo.txt +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/server_config.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/settings.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/setup.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/config/suppress_warnings.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/all_docs.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/load_actions_info.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/load_api_docs.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/load_help_topics.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/load_source_code.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/api_docs_template.md +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/readme_template.md +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs/markdown/warning.md +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/docs_base.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/load_custom_command_info.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/load_faqs.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/load_recipe_snippets.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/recipes/general_system_commands.sh +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/recipes/python_dev_commands.sh +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/docs_base/recipes/tldr_standard_commands.sh +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/embeddings/cosine.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/action_decorators.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/action_exec.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/action_registry.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/combiners.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/command_exec.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/command_registry.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/fetch_url_items.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/history.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/importing.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/llm_transforms.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/precondition_checks.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/precondition_registry.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/preconditions.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/resolve_args.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec/runtime_settings.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/args_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/commands_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/script_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/exec_model/shell_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/file_store.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/item_file_format.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/metadata_dirs.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/persisted_yaml.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/store_cache_warmer.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/file_storage/store_filenames.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/assistant.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/assistant_instructions.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/assistant_output.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/function_param_info.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_lookups.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_pages.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_printing.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/help_types.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/recommended_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/help/tldr_help.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/clean_headings.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/custom_sliding_transforms.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/fuzzy_parsing.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/init_litellm.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_api_keys.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_completion.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_features.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_messages.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llm_names.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/llm_utils/llms.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/local_server.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/local_server_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/local_server_routes.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/local_url_formatters.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/port_tools.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/local_server/rich_html_template.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_cli.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_main.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_server_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_server_routes.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/mcp/mcp_server_stdio.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/audio_processing.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/media_cache.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/media_services.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/media_tools.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/services/local_file_media.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/timestamp_citations.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/transcription_deepgram.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/transcription_format.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/media_base/transcription_whisper.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/actions_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/assistant_response_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/compound_actions_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/concept_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/exec_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/language_list.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/llm_actions_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/media_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/operations_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/params_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/paths_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/model/preconditions_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/completions/completion_scoring.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/completions/completion_types.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/completions/shell_completions.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/file_icons/color_for_format.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/file_icons/nerd_icons.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/input_prompts.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/inquirer_settings.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/param_inputs.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/input/shell_confirm.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/kerm_code_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/kerm_codes.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/kmarkdown.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/output/shell_formatting.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/ui/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/ui/shell_results.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/ui/shell_syntax.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/utils/exception_printing.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/utils/native_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/shell/utils/shell_function_wrapper.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/api_retries.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/cache_requests_limited.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/gather_limited.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/http_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/api_utils/progress_protocol.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/format_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/function_inspect.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/import_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/lazyobject.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/obj_replace.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/parse_docstring.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/parse_key_vals.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/parse_shell_args.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/stack_traces.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/task_stack.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/testing.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/type_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/uniquifier.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/url.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/common/url_slice.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/errors.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_formats/chat_format.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/dir_info.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_ext.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_formats.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_formats_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_sort_filter.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/file_walk.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/filename_parsing.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/ignore_files.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/mtime_cache.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/file_utils/path_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/lang_utils/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/lang_utils/capitalization.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/ansi_cell_len.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/rich_char_transform.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/rich_indent.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/rich_custom/rich_markdown_fork.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/doc_normalization.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/escape_html_tags.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/markdown_render.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/markdown_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/markdownify_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/utils/text_handling/unified_diffs.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/canon_url.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/dir_store.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/file_cache_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/file_processing.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/local_file_cache.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_extract.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_extract_justext.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_extract_readabilipy.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_fetch.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_content/web_page_model.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/simple_webpage.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/tabbed_webpage.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/template_render.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/components/toc_scripts.js.jinja +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/components/tooltip_scripts.js.jinja +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/explain_view.html.jinja +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/web_gen/templates/tabbed_webpage.html.jinja +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/__init__.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/param_state.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/selections.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/source_items.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/workspace_dirs.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/workspace_output.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/workspace_registry.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/workspaces/workspaces.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/command_nl_utils.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/customize_prompt.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/load_into_xonsh.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/shell_load_commands.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/shell_which.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_completers.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_env.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_keybindings.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_modern_tools.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xonsh_custom/xonsh_ranking_completer.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xontrib/fnm.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/src/kash/xontrib/kash_extension.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/tests/kash/utils/api_utils/test_gather_limited.py +0 -0
- {kash_shell-0.3.25 → kash_shell-0.3.27}/tests/kash/utils/rich_custom/test_multitask_status.py +0 -0
- {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.
|
|
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.
|
|
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
|
|
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
|
|
101
|
+
knowledge tasks. It’s 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
|
|
105
|
+
It’s new and still has some rough edges, but it’s 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
|
|
137
|
-
(
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
|
148
|
-
combining tools, so it
|
|
149
|
+
as pretty HTML, etc.). The goal is to reduce the “interstitial complexity” of
|
|
150
|
+
combining tools, so it’s 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
|
|
177
|
+
As I’ve been building kash over the past couple months, I found I’ve found it’s not only
|
|
176
178
|
faster to do complex things, but that it has also become replacement for my usual shell.
|
|
177
|
-
It
|
|
179
|
+
It’s 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
|
|
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
|
|
186
|
+
If you’re 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
|
|
194
|
-
|
|
195
|
+
I’ve 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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
202
|
+
It’s the result of a couple months of coding and experimentation, and it’s 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
|
|
217
|
+
If you’ve 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
|
|
226
|
+
But remember that’s 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
|
|
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
|
|
251
|
+
See [uv’s 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
|
|
260
|
+
In addition to Python, it’s 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
|
|
317
|
+
your home directory (recommended if you’ll 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
|
|
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
|
|
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
|
|
361
|
-
This way, you don
|
|
363
|
+
workspace, just as if you’d been running these commands yourself in the shell.
|
|
364
|
+
This way, you don’t 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
|
|
387
|
-
So to get it to work you must install not just the main shell but the kash
|
|
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
|
|
393
|
+
If you don’t 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
|
|
542
|
-
kash. It
|
|
544
|
+
Although you don’t always need one, a *workspace* is very helpful for any real work in
|
|
545
|
+
kash. It’s 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
|
|
566
|
+
current workspace. (If you’re 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
|
|
604
|
+
but for more real work you’ll 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
|
|
618
|
+
- `history` to see recent commands you’ve 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
|
|
649
|
+
I’ve 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
|
|
722
|
+
archaic and don’t 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
|
|
724
|
+
(please contact me if you’d like an early developer preview, as I’d 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
|
|
758
|
+
✨**Would you be willing to help test something new?** If you’ve made it this far and are
|
|
756
759
|
still reading, I have a request.
|
|
757
|
-
So alongside kash, I
|
|
760
|
+
So alongside kash, I’ve 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
|
|
765
|
+
I’d like feedback so please [message me](https://twitter.com/ojoshe) if you’d 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
|
|
775
|
+
Kash calls `open` to open some files, so in general, it’s 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
|
|
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
|
|
802
|
+
- In Obsidian’s preferences, under Editor, turn on “Strict line breaks”.
|
|
800
803
|
|
|
801
|
-
- This makes the line breaks in kash
|
|
804
|
+
- This makes the line breaks in kash’s 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
|
|
807
|
+
This works fine, but note that only the current line’s 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
|
|
812
|
+
- Go to settings, enable community plugins, search for “Front Matter Title” and
|
|
810
813
|
install.
|
|
811
814
|
|
|
812
|
-
- Under
|
|
813
|
-
file explorer
|
|
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
|
|
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
|
|
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
|
|
24
|
+
knowledge tasks. It’s 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
|
|
28
|
+
It’s new and still has some rough edges, but it’s 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
|
|
61
|
-
(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
|
72
|
-
combining tools, so it
|
|
72
|
+
as pretty HTML, etc.). The goal is to reduce the “interstitial complexity” of
|
|
73
|
+
combining tools, so it’s 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
|
|
100
|
+
As I’ve been building kash over the past couple months, I found I’ve found it’s not only
|
|
100
101
|
faster to do complex things, but that it has also become replacement for my usual shell.
|
|
101
|
-
It
|
|
102
|
+
It’s 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
|
|
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
|
|
109
|
+
If you’re 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
|
|
118
|
-
|
|
118
|
+
I’ve 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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
It’s the result of a couple months of coding and experimentation, and it’s 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
|
|
140
|
+
If you’ve 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
|
|
149
|
+
But remember that’s 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
|
|
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
|
|
174
|
+
See [uv’s 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
|
|
183
|
+
In addition to Python, it’s 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
|
|
240
|
+
your home directory (recommended if you’ll 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
|
|
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
|
|
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
|
|
285
|
-
This way, you don
|
|
286
|
+
workspace, just as if you’d been running these commands yourself in the shell.
|
|
287
|
+
This way, you don’t 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
|
|
311
|
-
So to get it to work you must install not just the main shell but the kash
|
|
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
|
|
316
|
+
If you don’t 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
|
|
466
|
-
kash. It
|
|
467
|
+
Although you don’t always need one, a *workspace* is very helpful for any real work in
|
|
468
|
+
kash. It’s 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
|
|
489
|
+
current workspace. (If you’re 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
|
|
527
|
+
but for more real work you’ll 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
|
|
541
|
+
- `history` to see recent commands you’ve 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
|
|
572
|
+
I’ve 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
|
|
645
|
+
archaic and don’t 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
|
|
647
|
+
(please contact me if you’d like an early developer preview, as I’d 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
|
|
681
|
+
✨**Would you be willing to help test something new?** If you’ve made it this far and are
|
|
680
682
|
still reading, I have a request.
|
|
681
|
-
So alongside kash, I
|
|
683
|
+
So alongside kash, I’ve 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
|
|
688
|
+
I’d like feedback so please [message me](https://twitter.com/ojoshe) if you’d 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
|
|
698
|
+
Kash calls `open` to open some files, so in general, it’s 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
|
|
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
|
|
725
|
+
- In Obsidian’s preferences, under Editor, turn on “Strict line breaks”.
|
|
724
726
|
|
|
725
|
-
- This makes the line breaks in kash
|
|
727
|
+
- This makes the line breaks in kash’s 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
|
|
730
|
+
This works fine, but note that only the current line’s 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
|
|
735
|
+
- Go to settings, enable community plugins, search for “Front Matter Title” and
|
|
734
736
|
install.
|
|
735
737
|
|
|
736
|
-
- Under
|
|
737
|
-
file explorer
|
|
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
|
|
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.
|