Markdown Converter
Agent skill for markdown-converter
Guide for AI agents working in this repository.
Sign in to like and favorite skills
Guide for AI agents working in this repository.
See also: DEVELOPMENT.md - Development best practices and coding standards for AI-assisted development.
This is Task You - a personal task management system with:
┌─────────────────────────────────────────────────────────────────┐ │ Local / Server │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌───────────────────┐ │ │ │ Wish SSH │───▶│ Bubble Tea │───▶│ SQLite │ │ │ │ :2222 │ │ TUI │ │ tasks.db │ │ │ └──────────────┘ └──────┬───────┘ └───────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ Background │ │ │ │ Executor │ │ │ │ (goroutine) │ │ │ └────────┬────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────┐ │ │ │ Claude Code │ │ │ │ (in tmux) │ │ │ └─────────────────┘ │ └─────────────────────────────────────────────────────────────────┘ Local: ty -l (launches TUI + daemon) Remote: ssh -p 2222 user@server
workflow/ ├── cmd/ │ ├── task/ │ │ └── main.go # Local CLI + TUI + daemon management │ └── taskd/ │ └── main.go # SSH daemon + executor ├── internal/ │ ├── config/ │ │ └── config.go # Configuration management │ ├── db/ │ │ ├── sqlite.go # Database connection, migrations │ │ └── tasks.go # Task CRUD operations │ ├── executor/ │ │ ├── executor.go # Background Claude runner + hooks │ │ └── project_config.go # .taskyou.yml configuration │ ├── github/ │ │ └── github.go # PR status tracking │ ├── hooks/ │ │ └── hooks.go # Task lifecycle hooks │ ├── mcp/ │ │ └── mcp.go # MCP server integration │ ├── server/ │ │ └── ssh.go # Wish SSH server │ └── ui/ │ ├── app.go # Main Bubble Tea app + key bindings │ ├── kanban.go # Kanban board view (4 columns) │ ├── detail.go # Task detail view with logs │ ├── form.go # New/edit task forms (Huh) │ ├── retry.go # Retry task with feedback │ ├── settings.go # Settings view │ ├── command_palette.go # Quick task navigation │ ├── attachments.go # File attachment handling │ ├── filebrowser.go # File browser component │ ├── theme.go # Theme configuration │ ├── styles.go # Lip Gloss styles │ └── url_parser.go # URL detection in text ├── scripts/ │ └── install-service.sh # Systemd service installer ├── go.mod ├── go.sum ├── Makefile └── README.md
make build # Build bin/ty and bin/taskd make build-ty # Build just the CLI make build-taskd # Build just the daemon make install # Install to ~/go/bin make test # Run tests make lint # Run linter make fmt # Format code
./bin/ty -l # Launch TUI locally (starts daemon) ./bin/ty daemon # Start background executor ./bin/ty daemon stop # Stop daemon ./bin/ty daemon status # Check daemon status ./bin/ty daemon restart # Restart daemon ./bin/ty claudes list # List running Claude sessions
./bin/taskd # Start SSH server on :2222 ./bin/taskd -addr :22222 # Custom port ./bin/taskd -db /path/to/tasks.db # Custom database
ssh -p 2222 user@server # Opens TUI directly
CREATE TABLE tasks ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, body TEXT DEFAULT '', status TEXT DEFAULT 'backlog', -- backlog, queued, processing, blocked, done type TEXT DEFAULT '', -- Customizable via task_types table project TEXT DEFAULT '', worktree_path TEXT DEFAULT '', -- Path to git worktree branch_name TEXT DEFAULT '', -- Git branch name port INTEGER DEFAULT 0, -- Unique port (3100-4099) claude_session_id TEXT DEFAULT '',-- For resuming Claude conversations daemon_session TEXT DEFAULT '', -- tmux session name dangerous_mode INTEGER DEFAULT 0,-- Skip Claude permissions pr_url TEXT DEFAULT '', -- Pull request URL pr_number INTEGER DEFAULT 0, -- Pull request number scheduled_at DATETIME, -- When to next run recurrence TEXT DEFAULT '', -- Deprecated recurrence pattern (kept for legacy display) last_run_at DATETIME, -- Last scheduled execution time created_at DATETIME, updated_at DATETIME, started_at DATETIME, completed_at DATETIME ); CREATE TABLE task_logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE, line_type TEXT DEFAULT 'output', -- system, text, tool, error, output content TEXT NOT NULL, created_at DATETIME ); CREATE TABLE projects ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, path TEXT NOT NULL, aliases TEXT DEFAULT '', instructions TEXT DEFAULT '', -- Project-specific AI instructions actions TEXT DEFAULT '[]', -- Custom actions color TEXT DEFAULT '', -- Hex color for label created_at DATETIME ); CREATE TABLE task_types ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, label TEXT NOT NULL, instructions TEXT DEFAULT '', -- Type-specific AI instructions sort_order INTEGER DEFAULT 0, is_builtin INTEGER DEFAULT 0, created_at DATETIME ); CREATE TABLE task_attachments ( id INTEGER PRIMARY KEY AUTOINCREMENT, task_id INTEGER NOT NULL REFERENCES tasks(id) ON DELETE CASCADE, filename TEXT NOT NULL, mime_type TEXT DEFAULT '', size INTEGER DEFAULT 0, data BLOB NOT NULL, created_at DATETIME ); CREATE TABLE settings ( key TEXT PRIMARY KEY, value TEXT NOT NULL );
Database location:
~/.local/share/task/tasks.db (configurable via WORKTREE_DB_PATH)
backlog → queued → processing → done ↘ blocked (needs input) blocked can return to processing via retry
Recurring scheduling has been removed from TaskYou. Use external schedulers (cron, calendar apps, etc.) to invoke the CLI whenever a task should repeat.
| Key | Action |
|---|---|
or | Navigate columns |
or | Navigate tasks |
| View task details |
| New task |
| Edit task |
| Execute (queue) selected task |
| Retry task with feedback |
| Close selected task |
| Delete selected task |
| Pin/unpin selected task |
| Settings |
| Change task status |
| Refresh list |
/ | Command palette (go to task) |
| Toggle dangerous mode |
| Focus Backlog column |
| Focus In Progress column |
| Focus Blocked column |
| Focus Done column |
| Toggle help |
/ | Back / Quit |
| Force quit |
The background executor (
internal/executor/executor.go):
queued tasks every 2 secondstask_logs tableTaskYou supports multiple AI coding agent backends:
Each task can specify its executor in the task form. The executor runs in an isolated git worktree with environment variables for task context.
Tasks run in tmux windows with hooks that track state:
Each task gets an isolated git worktree:
~/.local/share/task/worktrees/{project}/task-{id}
Environment variables available in worktrees:
WORKTREE_TASK_ID - Task identifierWORKTREE_PORT - Unique port (3100-4099)WORKTREE_PATH - Worktree directory pathWORKTREE_SESSION_ID - tmux session IDWORKTREE_DANGEROUS_MODE - If permissions are skippedPrompts are built with:
⚡ IMPORTANT: TaskYou caches codebase exploration results to avoid redundant work.
Best Practice Workflow:
taskyou_get_project_context MCP tooltaskyou_set_project_contextExample:
Agent: taskyou_get_project_context() TaskYou: "## Cached Project Context\n\nThis is a Go project using Bubble Tea..." [Agent uses the context to work efficiently]
Or if no context exists:
Agent: taskyou_get_project_context() TaskYou: "No cached project context found. Please explore and save a summary." Agent: [explores key files and directories] Agent: taskyou_set_project_context("This is a Go project using: - Bubble Tea for TUI - SQLite for storage Key directories: internal/db/, internal/executor/, internal/ui/...") TaskYou: "Project context saved. Future tasks will use this."
What to include in context:
When to update context:
This feature is inspired by Boris Cherny's Claude Code improvements and dramatically improves multi-task efficiency.
Build for Linux:
make build-linux
Deploy to server:
make deploy
Install systemd service:
./scripts/install-service.sh
Currently accepts all keys. To restrict, edit
internal/server/ssh.go:
wish.WithPublicKeyAuth(func(ctx ssh.Context, key ssh.PublicKey) bool { // Compare key fingerprint against allowed list return allowed[ssh.FingerprintSHA256(key)] })
| Variable | Description | Default |
|---|---|---|
| SQLite database path | |
| Overrides the executor name shown in the UI (e.g., ) | |
| Current task ID (set by executor) | - |
| Task-specific port | - |
| Worktree directory | - |
| tmux session ID | - |
| Skip Claude permissions | - |
| Working directory for project detection | - |
| Overrides the Gemini CLI flags used when dangerous mode is enabled | |
Set
TASK_EXECUTOR before launching task -l/task daemon to change the executor label shown in the UI (e.g., TASK_EXECUTOR=codex). For compatibility, WORKFLOW_EXECUTOR, TASKYOU_EXECUTOR, and WORKTREE_EXECUTOR are also recognized.
Create
.taskyou.yml in your project root:
worktree: init_script: bin/worktree-setup
The init script runs after worktree creation for setup tasks like: