Public

Building a persistent task runner, `dude suite`

Like if your Makefile and vim's leader key had a baby. Wait, why am I always making babies with leader key?

Stats
Prompts
61
Tool calls
668
Messages
1844
Assets
9
Meta
Author
@mikker
Created At
February 08, 2026
Source
Codex
Share
Permalink
Thought 0 times. Used 0 tool calls. +0 -0 [Expand]
System prompt

AGENTS.md instructions for ~/dev/suite

  • We want the simplest change possible. We don't care about migration. Code readability matters most, and we're happy to make bigger changes to achieve it.
  • If I pass you URLs, fetch them directly. You may also use the web command line tool (~/.dotfiles/bin/web) for a text-only version.
  • mise is installed and generally used to manage language versions. Don't force it everywhere but notice it when it's there.
  • ast-grep and ripgrep are available.
  • If I ask you to commit, you decide the message. Use format "[Imperative] [description] [optional: two newlines and an extended description"
    • Examples: "Add pricing page", "Fix whatever", "Change the universe"
  • Whenever you're done working, as the very last thing before returning to the user, run ~/.dotfiles/bin/bootledoot to notify.

--- project-doc ---

Skills

A skill is a set of local instructions to follow that is stored in a SKILL.md file. Below is the list of skills that can be used. Each entry includes a name, description, and file path so you can open the source for full instructions when using a specific skill.

Available skills

  • agent-native-architecture: This skill should be used when building AI agents using prompt-native architecture where features are defined in prompts, not code. Use it when creating autonomous agents, designing MCP servers, implementing self-modifying systems, or adopting the "trust the agent's intelligence" philosophy. (file: ~/.codex/skills/agent-native-architecture/SKILL.md)
  • andrew-kane-gem-writer: This skill should be used when writing Ruby gems following Andrew Kane's proven patterns and philosophy. It applies when creating new Ruby gems, refactoring existing gems, designing gem APIs, or when clean, minimal, production-ready Ruby library code is needed. Triggers on requests like "create a gem", "write a Ruby library", "design a gem API", or mentions of Andrew Kane's style. (file: ~/.codex/skills/andrew-kane-gem-writer/SKILL.md)
  • beads: Tracks complex, multi-session work using the Beads issue tracker and dependency graphs, and provides persistent memory that survives conversation compaction. Use when work spans multiple sessions, has complex dependencies, or needs persistent context across compaction cycles. Trigger with phrases like "create task for", "what's ready to work on", "show task", "track this work", "what's blocking", or "update status". (file: ~/.codex/skills/beads/SKILL.md)
  • coding-tutor: Personalized coding tutorials that build on your existing knowledge and use your actual codebase for examples. Creates a persistent learning trail that compounds over time using the power of AI, spaced repetition and quizes. (file: ~/.codex/skills/coding-tutor/SKILL.md)
  • compound-docs: Capture solved problems as categorized documentation with YAML frontmatter for fast lookup (file: ~/.codex/skills/compound-docs/SKILL.md)
  • create-agent-skills: This skill provides expert guidance for creating, writing, building, and refining Claude Code Skills. It should be used when working with SKILL.md files, authoring new skills, improving existing skills, or understanding skill structure and best practices. (file: ~/.codex/skills/create-agent-skills/SKILL.md)
  • dhh-rails-style: This skill should be used when writing Ruby and Rails code in DHH's distinctive 37signals style. It applies when writing Ruby code, Rails applications, creating models, controllers, or any Ruby file. Triggers on Ruby/Rails code generation, refactoring requests, code review, or when the user mentions DHH, 37signals, Basecamp, HEY, or Campfire style. Embodies REST purity, fat models, thin controllers, Current attributes, Hotwire patterns, and the "clarity over cleverness" philosophy. (file: ~/.codex/skills/dhh-rails-style/SKILL.md)
  • dhh-ruby-style: This skill should be used when writing Ruby and Rails code in DHH's distinctive 37signals style. It applies when writing Ruby code, Rails applications, creating models, controllers, or any Ruby file. Triggers on Ruby/Rails code generation, refactoring requests, code review, or when the user mentions DHH, 37signals, Basecamp, HEY, or Campfire style. Embodies REST purity, fat models, thin controllers, Current attributes, Hotwire patterns, and the "clarity over cleverness" philosophy. (file: ~/.codex/skills/dhh-ruby-style/SKILL.md)
  • dspy-ruby: This skill should be used when working with DSPy.rb, a Ruby framework for building type-safe, composable LLM applications. Use this when implementing predictable AI features, creating LLM signatures and modules, configuring language model providers (OpenAI, Anthropic, Gemini, Ollama), building agent systems with tools, optimizing prompts, or testing LLM-powered functionality in Ruby applications. (file: ~/.codex/skills/dspy-ruby/SKILL.md)
  • every-style-editor: This skill should be used when reviewing or editing copy to ensure adherence to Every's style guide. It provides a systematic line-by-line review process for grammar, punctuation, mechanics, and style guide compliance. (file: ~/.codex/skills/every-style-editor/SKILL.md)
  • file-todos: This skill should be used when managing the file-based todo tracking system in the todos/ directory. It provides workflows for creating todos, managing status and dependencies, conducting triage, and integrating with slash commands and code review processes. (file: ~/.codex/skills/file-todos/SKILL.md)
  • frontend-design: This skill should be used when creating distinctive, production-grade frontend interfaces with high design quality. It applies when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics. (file: ~/.codex/skills/frontend-design/SKILL.md)
  • gemini-imagegen: This skill should be used when generating and editing images using the Gemini API (Nano Banana Pro). It applies when creating images from text prompts, editing existing images, applying style transfers, generating logos with text, creating stickers, product mockups, or any image generation/manipulation task. Supports text-to-image, image editing, multi-turn refinement, and composition from multiple reference images. (file: ~/.codex/skills/gemini-imagegen/SKILL.md)
  • git-worktree: This skill manages Git worktrees for isolated parallel development. It handles creating, listing, switching, and cleaning up worktrees with a simple interactive interface, following KISS principles. (file: ~/.codex/skills/git-worktree/SKILL.md)
  • playwright-skill: Complete browser automation with Playwright. Auto-detects dev servers, writes clean test scripts to /tmp. Test pages, fill forms, take screenshots, check responsive design, validate UX, test login flows, check links, automate any browser task. Use when user wants to test websites, automate browser interactions, validate web functionality, or perform any browser-based testing. (file: ~/.codex/skills/playwright-skill/SKILL.md)
  • refactor-pass: Perform a refactor pass focused on simplicity after recent changes. Use when the user asks for a refactor/cleanup pass, simplification, or dead-code removal and expects build/tests to verify behavior. (file: ~/.codex/skills/refactor-pass/SKILL.md)
  • solidify-codebase: Deep investigation and solidification pass on an existing codebase. Use when asked to audit, simplify, or future-proof a system; perform a deep cleanup/refactor pass; identify high-impact improvement opportunities; or present a vetted change list before implementing selected items. (file: ~/.codex/skills/solidify-codebase/SKILL.md)
  • swiftui-ui-patterns: Best practices and example-driven guidance for building SwiftUI views and components. Use when creating or refactoring SwiftUI UI, designing tab architecture with TabView, composing screens, or needing component-specific patterns and examples. (file: ~/.codex/skills/swiftui-ui-patterns/SKILL.md)
  • skill-creator: Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Codex's capabilities with specialized knowledge, workflows, or tool integrations. (file: ~/.codex/skills/.system/skill-creator/SKILL.md)
  • skill-installer: Install Codex skills into $CODEX_HOME/skills from a curated list or a GitHub repo path. Use when a user asks to list installable skills, install a curated skill, or install a skill from another repo (including private repos). (file: ~/.codex/skills/.system/skill-installer/SKILL.md)

How to use skills

  • Discovery: The list above is the skills available in this session (name + description + file path). Skill bodies live on disk at the listed paths.
  • Trigger rules: If the user names a skill (with $SkillName or plain text) OR the task clearly matches a skill's description shown above, you must use that skill for that turn. Multiple mentions mean use them all. Do not carry skills across turns unless re-mentioned.
  • Missing/blocked: If a named skill isn't in the list or the path can't be read, say so briefly and continue with the best fallback.
  • How to use a skill (progressive disclosure):
    1. After deciding to use a skill, open its SKILL.md. Read only enough to follow the workflow.
    2. If SKILL.md points to extra folders such as references/, load only the specific files needed for the request; don't bulk-load everything.
    3. If scripts/ exist, prefer running or patching them instead of retyping large code blocks.
    4. If assets/ or templates exist, reuse them instead of recreating from scratch.
  • Coordination and sequencing:
    • If multiple skills apply, choose the minimal set that covers the request and state the order you'll use them.
    • Announce which skill(s) you're using and why (one short line). If you skip an obvious skill, say why.
  • Context hygiene:
    • Keep context small: summarize long sections instead of pasting them; only load extra files when needed.
    • Avoid deep reference-chasing: prefer opening only files directly linked from SKILL.md unless you're blocked.
    • When variants exist (frameworks, providers, domains), pick only the relevant reference file(s) and note that choice.
  • Safety and fallback: If a skill can't be applied cleanly (missing files, unclear instructions), state the issue, pick the next-best approach, and continue.
System prompt

<environment_context>
~/dev/suite
<approval_policy>never</approval_policy>
<sandbox_mode>danger-full-access</sandbox_mode>
<network_access>enabled</network_access>
zsh
</environment_context>

Permalink

I want to build a sort of task runner which is a shell process a script that I run and then it's a sort of Tui interface for that's listening for input
and if I press certain keys it runs certain scripts so we'll have a definition file of sorts where you map keys to actions I think we should just use
some sort of yaml probably and then for example you give it a setting of like key colon T and then command or like cmd colon bin slash test and so when
you spawn the script it reads the definition file and then presents a UI that shows all the configuration configuration options and then as you press a
key for example T in our case it runs the test command and once it's done it's ready and maybe it is even like using a split view yeah so so all the
configurations on the left in a sort of sidebar thing with yeah and then on the right you can get the output so it's so it isn't blocking while it's
running and you can maybe arrow up and down to select the scripts and maybe they're like white when at rest and then when it's running it's yellow if it
fails it's red yeah yeah but actually I think we should build this in a on its own somewhere else

So this is a brand new directory, there's nothing here. The first thing we need to do is decide on what tech to use. And I think it could be fun to try something new, maybe Rust or Go or Zig. But that's up for discussion. So yeah, I guess that's the first thing we'll discuss. And other than that, interview me about the rest of what I've said here so we can scope out this thing and get a working first version. you

Permalink
Thought 1 time. Used 1 tool call. +0 -0 [Expand]
Thinking

Preparing technical discussion and questions

$ ~/.dotfiles/bin/bootledoot
Permalink

Got it — new project, TUI task runner, key‑bound scripts, split view output. Let’s pick a tech stack and then I’ll drill into scope.

First, quick take on options:

  • Go + Bubble Tea: fastest to prototype; great TUI ecosystem; easy static binary.
  • Rust + Ratatui/Crossterm: very solid TUI, strong types; more setup; best for long‑term robustness.
  • Zig + Vaxis: fun/lean, but smaller ecosystem and steeper lift for “first version.”

My default suggestion is Go + Bubble Tea for fastest MVP, unless you want Rust’s rigor or Zig for novelty.

Answer these so I can scope an MVP and pick tech:

  1. Preferred language? Go/Rust/Zig (or something else)?
  2. Target OSes? macOS only or also Linux/Windows?
  3. Where should the repo live? New directory path?
  4. Config format: YAML ok? (or TOML/JSON)? Single file name?
  5. How should keys work — direct “press T runs test” or arrow‑select + Enter?
  6. Do you want both: hotkeys + selectable list?
  7. Can multiple commands run concurrently, or only one at a time?
  8. Should output be live‑streamed in the right pane, with scrollback?
  9. Should output from previous runs persist (history), or only last run?
  10. How should failure/success be shown — color + exit code? anything else?
  11. Any per‑command settings: cwd, env vars, shell, timeout?
  12. Need “stop/kill” a running command? keybinding?
  13. Need templates or inheritance (e.g., shared env across commands)?
  14. Should it watch the config and hot‑reload?
  15. Should it support multiple config files / profiles?
  16. Any opinion on split view layout (fixed width sidebar? resizable? tabbed output)?

Once you answer those, I’ll propose the MVP feature list + config schema, then we can scaffold.

Permalink
  1. lets go with go (haha)
  2. macos/linux at least. Windows not a requirement yet
  3. cwd
  4. yaml (wdyt?)
  5. both
  6. exactly. I suspect we'll mostly run things with the hotkeys but we need arrow key focus management for choosing which script output to show
  7. yes. Only one of each type but more types can run at once. I'd think we should also have combo options so a single key can trigger multiple others. Like "a" for all or "c" for deploy or whatever. Maybe it's even a settting for whether to run parallel or sequential. Like lint and test can run at once but deploy wants to run lint+test THEN push or whatever.
  8. yes
  9. good question. Lets do last run for a first round
  10. color + exit code fine
  11. hmm, lets omit at first
  12. ya. I think we should have ctrl bindings for "meta" things so we leave the non-modifier space open. So ctrl-k (or ctrl-c maybe) can be kill, ctrl-q can be quit, etc. Feel free to suggest more. Maybe ctrl-j/k for vim style movement. ctrl-h/l for focus movement list/output pane
  13. explain?
  14. no
  15. no
  16. fixed width sidebar, right pane autosizes
Permalink
Thought 10 times. Used 11 tool calls. +0 -0 [Expand]
Thinking

Outlining Go TUI project design and implementation

$ ls -la
total 0
drwxr-xr-x   2 mikker  staff    64 Jan  9 10:05 .
drwxr-xr-x@ 90 mikker  staff  2880 Jan  9 10:05 ..
Thinking

Designing task runner specifications and structure

Initiating project setup and config validation

I’m ready to start coding by initializing the Go module with go mod init suite and will design the config YAML with validation to ensure unique task IDs and references in combos. I’ll also keep the config simple while preparing to explain command settings later.

$ go mod init suite
go: creating new go.mod: module suite
Thinking

Structuring project files and planning config.go creation

$ cat <<'EOF' > ~/dev/suite/config.go\npackage main\n\nimport (\n    \
Thinking

Designing task management model and UI

I'm sketching out ui.go to handle task states, combos, and output display with bubbletea, defining structs, task lifecycle, combo sequencing, and key event handling—all while planning a tidy, colorful terminal UI that keeps output scrollable and interactive.

Outlining model.go and runner.go architecture

I’m laying out model.go to define the model, update logic, view rendering, and key interactions, while moving task execution and output listening into runner.go; this split keeps concerns clear and sets up clean bubbletea integration for task management and UI updates.

$ cat <<'EOF' > ~/dev/suite/main.go\npackage main\n\nimport (\n    \
$ cat <<'EOF' > ~/dev/suite/runner.go\npackage main\n\nimport (\n    \
Thinking

Correcting return types to tea.Cmd

$ cat <<'EOF' > ~/dev/suite/runner.go\npackage main\n\nimport (\n    \
Thinking

Starting to create ui.go

$ cat <<'EOF' > ~/dev/suite/ui.go\npackage main\n\nimport (\n    \
Thinking

Creating style.go for UI styles

$ cat <<'EOF' > ~/dev/suite/style.go\npackage main\n\nimport \
Thinking

Reviewing padding and width in styles

$ cat <<'EOF' > ~/dev/suite/style.go\npackage main\n\nimport \
Thinking

Analyzing task rendering and config setup

$ cat <<'EOF' > ~/dev/suite/tasks.yml\ntitle: suite\nsidebar_width: 32\n\ntasks:\n  - id: lint\n    label: Lint\n    key: l\n    cmd: bin/lint\n\n  - id: test\n    label: Test\n    key: t\n    cmd: bin/test\n\ncombos:\n  - id: all\n    label: All\n    key: a\n    mode: parallel\n    run: [lint, test]\nEOF\n
Thinking

Drafting README content

$ cat <<'EOF' > ~/dev/suite/README.md\n# suite\n\nTiny TUI task runner with hotkeys and a split output view.\n\n## Run\n\n```bash\ngo run .\n```\n\nOr build a binary:\n\n```bash\ngo build -o suite\n./suite\n```\n\nBy default it reads `tasks.yml` from the current directory. Use `-config` to override:\n\n```bash\n./suite -config path/to/tasks.yml\n```\n\n## Key bindings\n\n- `enter` run selected task\n- `up/down` (or `j/k`) move selection\n- `ctrl+h` / `ctrl+l` move focus between list and output\n- `ctrl+k` kill selected task\n- `ctrl+q` quit\n- task/combos keys run immediately\n\nWhen the output pane is focused, scrolling keys control output.\n\n## Config\n\n```yaml\ntitle: suite\nsidebar_width: 32\n\ntasks:\n  - id: lint\n    label: Lint\n    key: l\n    cmd: bin/lint\n\n  - id: test\n    label: Test\n    key: t\n    cmd: bin/test\n\ncombos:\n  - id: all\n    label: All\n    key: a\n    mode: parallel # or sequential\n    run: [lint, test]\n    # stop_on_fail: false\n```\n\nNotes:\n- `label` defaults to `id` if omitted.\n- `mode` defaults to `sequential` for combos.\n- `stop_on_fail` defaults to `true` for sequential combos.\n- Only one instance of a task runs at a time; re-triggering a running task is ignored.\n- Only the most recent run output is kept per task.\n\n## Future ideas\n\nPer-command `cwd`, `env`, `shell`, and timeouts are intentionally omitted in this first version.\nEOF\n
Loading more...