关于 textual-tui
用于构建和维护 Textual 终端用户界面的指导技能,涵盖应用结构、响应式工作与状态、安全脚手架、交付和测试。
主要功能
- 01选择屏幕结构与内置组件
- 02安全处理异步任务和取消
- 03预览并写入起始模板
- 04检查交付方式与运行时安全
- 05测试键盘、布局和工作任务
适用场景
- 01规划 Textual 应用结构
- 02添加响应式后台工作
- 03生成并集成起始应用
- 04测试取消行为和窄屏布局
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ tristanmanchester/ agent-skills --skill textual-tui安装后在 Claude Code 中输入/textual-tui确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/project/github-actions-ci.yml.tmplpyproject.toml.tmplassets/templates/admin_modes_app.py.tmpladmin_modes_tcss.tmpladmin_modes_test.py.tmplchat_app.py.tmplchat_tcss.tmplchat_test.py.tmpldashboard_app.py.tmpldashboard_tcss.tmpldashboard_test.py.tmpldata_explorer_app.py.tmpldata_explorer_tcss.tmpldata_explorer_test.py.tmpldownload_demo_app.py.tmpldownload_demo_tcss.tmpldownload_demo_test.py.tmpleditor_app.py.tmpleditor_tcss.tmpleditor_test.py.tmplfile_browser_app.py.tmplfile_browser_tcss.tmplfile_browser_test.py.tmplform_app.py.tmplform_tcss.tmplform_test.py.tmpllog_monitor_app.py.tmpllog_monitor_tcss.tmpllog_monitor_test.py.tmplsettings_app.py.tmpl详细介绍
文本应用
检查应用、锁定的依赖项、入口点、TCSS、测试和实际用户工作流。优先选择内置组件和组合方式,而不是自定义渲染。将应用状态与长时间运行的工作分开,并将键盘操作路径放在首位。不要要求每个应用都具备仪表板、模式系统或命令面板。
选择结构
小型工具可以只使用一个 App;当用户上下文发生变化时,使用独立的 Screen;短暂中断时,使用 ModalScreen;局部步骤使用 ContentSwitcher;只有在顶层屏幕栈确实彼此独立时,才使用模式。使用稳定的 ID 和语义类来设置样式和编写测试,先适配窄终端,再扩展到更宽的面板。如果 DataTable、Tree/DirectoryTree、MarkdownViewer、TextArea 和内置输入组件的行为符合需求,就优先使用它们。不要仅为了满足行数启发式规则而拆分内聚组件。
响应式工作与状态
更改并发行为前,请先阅读响应式机制与工作线程。异步工作线程共享事件循环:将阻塞调用包装在 async def 或 @work 中,并不会让它们变为非阻塞。请使用异步 API;对于阻塞 I/O,使用 thread=True;对于大量 CPU 工作,采用合适的进程或原生策略。
独占取消不等于事务回滚,也无法保证线程已经停止。传递请求修订号,并在 UI 线程应用结果时再次检查。区分工作线程失败、取消、无数据和成功返回数据这几种情况。已取消的远程写入仍可能已经发生。
reactive 控件会刷新相关状态;var 保留响应式功能,但不会自动刷新或重新布局。如果不需要响应式行为,两者都不能替代普通字段。保持计算方法开销低且纯粹,并确保 watcher 不执行阻塞工作。请有意识地初始化挂载前的响应式值。
现有项目与源码工具
将 SKILL_DIR 解析为已安装的技能目录,而不是应用仓库。检查/审计辅助工具只能提供启发式源码线索,不能证明架构正确、运行时响应式行为正常或缺失功能。更改标记出的代码前,请先阅读。不要仅为消除启发式警告而添加调色板/浏览器/导出/断点机制。
dump_dom_and_bindings.py 会使用 run_test 导入并运行应用;这可能执行启动操作以及网络/文件系统操作。仅在获授权的隔离测试环境中,配置好模拟服务和适当设置后运行。它并非被动读取源码。生成的 Pilot 测试和快照工具同样如此。
安全脚手架
入门模板仍然可用,但现在默认先预览生成结果:
python "$SKILL_DIR/scripts/scaffold_textual_app.py" --list-templates
python "$SKILL_DIR/scripts/scaffold_textual_app.py" \
--template data-explorer --module my_app --class-name MyApp --app-title 'My App'
检查渲染后的应用、TCSS 和测试。要写入文件,请添加 --write --output-dir,并指定一个新的最终目录,且其父目录必须已存在。没有强制覆盖选项,也没有自动配置 pyproject/CI 的选项。自由输入的标题会作为 AST 字符串值插入,标识符会经过验证,并且所有选定的模板都会在写入前解析。生成的 Python 会由 ast.unparse 重新格式化,不会被执行。写入失败可能会留下不完整的私有草稿;它不是原子性多文件事务。
对于聊天入门模板,请阅读请求归属与测试。其中明确的 Stop 操作、草稿保留和延迟结果检查,都是所提供示例的一部分,不能仅凭工作线程装饰器推断出这些行为。
有选择地将生成内容集成到应用中。根据现有项目以及当前支持的 Python/工具版本审查打包和 CI 设置,不要直接照搬新的通用构建系统。较早的独立生成辅助工具只是可选的起步脚手架,不代表当前的依赖/CI 策略,也不会自动升级项目。
运行时、交付与测试
使用已安装的 textual-dev CLI 帮助文档了解 devtools/console/serve。提供服务会暴露一个具有文件系统和服务权限的服务器端应用;它不是沙箱,也不会自动构成身份验证边界。在通过浏览器交付前,请核实网络绑定、身份验证、租户隔离,以及实际提供下载的文件。将用户文本以及终端/标记语言转义序列视为不可信的显示数据。
使用 run_test/Pilot 测试变更后的行为,包括实际断言、失败/取消、焦点与键盘操作、窄/宽尺寸,以及清理。只有当视觉布局是相关风险时才使用快照,而不是将快照作为每次变更都必须满足的配额。固定睡眠时间不能证明工作线程或布局已稳定;请等待有界的可观察状态。无头测试无法证明每种实际终端/浏览器都会以相同方式渲染。用户正在阅读较早内容时,应保留其滚动位置,而不是始终将日志自动锚定到最新位置。
报告补丁、实际测试命令/结果,以及尚未测试的终端/浏览器路径。不要声称脚手架、语法解析或黄金截图证明了生产就绪。将 测试、浏览器交付 和 打包 作为特定主题的参考资料。
维护者:python "$SKILL_DIR/scripts/self_check.py" 会解析所有本地脚手架输出;python -m unittest discover -s "$SKILL_DIR/tests" -v 会测试脚手架引擎。这两者都不会执行生成的应用。
已审阅的来源(2026-09-13):Textual 元数据、工作线程、响应性和测试。