By jongwony
Automate full task lifecycle in dev workflows: capture chat context as structured, dependency-ordered tasks; execute eligible ones with sync to detect stales, generate handovers; commit to branches, create GitHub PRs, and register extracted checklist items as tasks.
npx claudepluginhub jongwony/claudepanel.spoon --plugin task-workflowThis skill should be used when the user asks to "ship", "ship it", "commit and create PR with tasks", "commit push pr and register tasks", or wants to commit, push, create a pull request, AND register test plan items as tasks. This combines the commit-push-pr workflow with automatic task registration from PR checklists. Use this skill instead of commit-push-pr when the user wants test plan tracking. Usage: /ship
This skill should be used when the user asks to "run tasks", "execute tasks", "work through tasks", "do my tasks", "task-run", "sync tasks", "clean up tasks", "review stale tasks", "check task status", "handover session", "prepare next session", "save handover", "session handover", "hand off tasks", "rearrange dependencies", "reorder tasks", or wants to execute, sync, or handover tasks from the current session's task list. Usage: /task-run [--all] [--sync [--dry-run]] [--handover [query]]
This skill should be used when the user asks to "save current task", "save progress", "create task from context", "task-save", "break down tasks", "decompose work", or wants to capture current work state as structured tasks with dependency ordering. Usage: /task-save [--cwd <path>] [query] --cwd: Cross-project handoff (records target directory in metadata for ClaudePanel.spoon).
Hammerspoon Spoon for viewing Claude Code tasks in a floating window.
git clone https://github.com/jongwony/ClaudePanel.spoon.git
ln -sf $(pwd)/ClaudePanel.spoon ~/.hammerspoon/Spoons/ClaudePanel.spoon
Download and extract to ~/.hammerspoon/Spoons/ClaudePanel.spoon/
Add to your ~/.hammerspoon/init.lua:
hs.loadSpoon("ClaudePanel")
spoon.ClaudePanel:bindHotkeys(spoon.ClaudePanel.defaultHotkeys)
spoon.ClaudePanel:start()
| Hotkey | Action |
|---|---|
opt+. | Toggle task viewer |
cmd+alt+T | Show task status summary |
| Key | Action |
|---|---|
j / k / ↓ / ↑ | Navigate tasks |
Space | View task detail |
Enter | Launch Claude session |
⌘⌫ | Delete selected task |
/ | Search mode |
= | Session input mode |
Escape | Return to navigation |
? | Show shortcuts help |
⌘E | Quick Task dialog |
⌘Enter | Create task |
All keyboard shortcuts can be customized via bindShortcuts().
hs.loadSpoon("ClaudePanel")
spoon.ClaudePanel:configure({
width = 500,
height = 700,
margin = 30,
debugMode = true,
-- Specify paths explicitly if auto-discovery fails
claudePath = "/usr/local/bin/claude",
terminalApp = "/Applications/iTerm.app/Contents/MacOS/iTerm2",
shell = "/bin/bash",
})
spoon.ClaudePanel:bindHotkeys({
toggle = {{"cmd", "shift"}, "t"},
status = {{"cmd", "alt"}, "t"}
})
-- You can customize all in-app keyboard shortcuts
spoon.ClaudePanel:bindShortcuts({
navigateDown = {modifiers = {}, keys = {'j', 'ㅓ', 'ArrowDown'}},
navigateUp = {modifiers = {}, keys = {'k', 'ㅏ', 'ArrowUp'}},
deleteTask = {modifiers = {'cmd'}, keys = {'Backspace'}},
openTask = {modifiers = {}, keys = {' '}},
launchTask = {modifiers = {}, keys = {'Enter'}},
})
spoon.ClaudePanel:start()
obj:init() - Initialize the Spoon (called automatically)obj:start() - Start file watching and load saved stateobj:stop() - Stop file watching and cleanupobj:show() - Show the task viewerobj:hide() - Hide the task viewerobj:toggle() - Toggle visibilityobj:refresh() - Manually refresh the task listobj:setTaskListId(id) - Set the session ID filterobj:createTask(subject) - Create a new task via Claude CLIobj:quickTaskUpdate(prompt) - Run quick TaskUpdate via haiku modelobj:launchClaudeWithTaskList() - Launch Claude in terminal with current sessionobj:launchClaudeWithCwd(sessionId, cwd) - Launch Claude with specific working directoryobj:launchClaudeWithSession(sessionId) - Launch Claude with session env varobj:showTaskDetailWindow(subject, description, metadata) - Show task detail popupobj:deleteTask(taskId, sessionId) - Delete a task by IDobj:status() - Get current status infoobj:configure(options) - Update configurationobj:bindHotkeys(mapping) - Bind hotkeys| Option | Default | Description |
|---|---|---|
width | 420 | Window width |
height | 580 | Window height |
margin | 20 | Screen edge margin |
refreshDebounce | 0.2 | Debounce delay for file changes (seconds) |
debugMode | false | Enable debug logging |
taskListId | $CLAUDE_CODE_TASK_LIST_ID | Session ID filter |
claudePath | nil | Path to claude CLI (auto-discovered if nil) |
terminalApp | nil | Path to terminal app (auto-discovered if nil) |
shell | nil | Shell to use (defaults to $SHELL or /bin/zsh) |
keyBindings | (see below) | Customizable keyboard shortcuts (use bindShortcuts()) |
claude command)MIT License - see LICENSE
Cotask — task management with TASKS.md kanban dashboard
Share bugs, ideas, or general feedback.
Install and manage TaskYou — a personal task management system with Kanban board, background AI execution, and git worktree isolation.
Installer for TÂCHES' Get-Shit-Done workflow system - meta-prompting, context engineering and spec-driven development
Personal task tracker — invisible kanban that tracks your work automatically
Commands for automating repetitive tasks and workflows
Cross-session Save/Load, and Ultrawork inspired by oh-my-opencode with Ralph Loops