Show help text when task invoked without args


Move dev instructions from README.md to AGENTS.md


Task ids should be shorter. Use the sqids package in haskell to generate ids


Tasks should have an optional namespace associated with them. Namespaces are first class citizens in this monorepo


There should be a command to list all projects.


Instruct agents too use git-branchless and a patch based workflow rather than traditional git commands if and when they need to record things in git.


instruct agents to include tests with all new features and bug fixes


instruct agents to run 'bild --test' and 'lint' for whatever namespace(s) they are working on after completing a task and fix any reported errors


The script Omni/Ide/typecheck.sh needs to support Haskell type checking in a similar fashion as how Omni/Ide/repl.sh is able to handle multiple languages


Remove the old aider config in .aider* files and directories. Aider stinks and we will use amp going forward


Implement child ID generation (t-abc123.1)


Update createTask to auto-generate child IDs


Implement task tree visualization command


Add filtering by type and parent (list improvements)


Add enhanced dependency types (blocks, discovered-from, related)


Add migration support for old task format


Investigate and implement prettier tree drawing with box characters


Fix Recent Episodes refresh to prepend instead of reload (interrupts audio playback)


Implement billing page UI component with pricing and upgrade options


Add a 'task show <id>' command that prints out a long, easy to read (for humans) version of the task. Include dependencies and all information fields in the output


Make PodcastItLater UI mobile-friendly and responsive


Add dark mode support to PodcastItLater UI


Separate navbar into user navbar and callout box for plan info


Make 'Upgrade Now' button go directly to Stripe checkout (not /billing page)


Add plan details to callout box (unlimited articles, $12/month)


Delete /billing page and all related code (billing_page, BillingPage component)


Update billing_checkout to use 'paid' tier instead of 'pro'


Update success/cancel URLs to redirect to / instead of /billing


Remove 'Billing' button from navbar (paid users will use Stripe portal link in callout)


Test the complete flow and verify all changes


Remove BLE001 noqa for bare Exception catches - use specific exceptions


Fix PLR0913 violations - refactor functions with too many parameters


Extract format_duration utility to shared UI or Core module (used only in Web.py)


Extract extract_og_metadata and send_magic_link to Core module for reusability


Review and fix type: ignore comments - improve type safety


Remove PLR2004 magic number - use constant for month check


Implement cancel subscription functionality


Implement change email address functionality


Replace Coming Soon placeholder with full account management UI


Remove button classes from navbar links (make them regular nav links)


Left-align navbar links instead of right-aligned buttons


Remove logout button from navbar (will be in account page)


Add ruff to the developer environment, the 'env' attribute in Bild.nix


Fix dev mode banner styling and pre-fill login email


Fix Stripe portal error handling and account page padding


Add mapConcurrentlyBounded helper using QSemN


Refactor build function to extract buildTarget worker


Replace forM with mapConcurrentlyBounded in build


Test basic parallel builds without UI changes


Research ansi-terminal and design LineManager API


Create Omni/Log/Concurrent.hs module with LineManager


Implement line reservation and release logic


Implement concurrent line update with ANSI codes


Thread LineManager through build/nixBuild functions


Create runWithLineManager and logsToLine functions


Test parallel builds with ANSI multi-line output


PodcastItLater: Public Feed, Metrics & Audio Improvements


Add database migrations for new columns (is_public, user_episodes table, episode_metrics table, original_url_hash)


Implement URL hashing and normalization function for episode deduplication


Add Core.py database functions for public episodes (mark_public, unmark_public, get_public_episodes)


Add Core.py database functions for user_episodes junction table


Add Core.py database functions for episode metrics tracking


Modify submission flow to check for existing episodes by URL hash


Add /public route to display public feed


Add /public.rss route for public RSS feed generation


Update home page to show public feed when user is logged out


Add admin toggle button to episode cards for public/private status


Add POST /admin/episode/{id}/toggle-public endpoint


Add '+ Add to your feed' button on episode pages for logged-in users


Add POST /episode/{id}/add-to-feed endpoint


Add POST /episode/{id}/track endpoint for metrics tracking


Add JavaScript to episode player for tracking play events


Enhance Worker.py to extract publication date and author metadata from articles


Add intro TTS generation with metadata (title, author, date)


Add outro TTS generation with title and author


Combine intro, pauses, article content, and outro in Worker.py


Write tests for public feed functionality


Write tests for audio intro/outro generation


Add comprehensive CLI tests for task command


Add priority flag support to task create


Fix bild --plan to output only JSON without logging


PodcastItLater: Add Stripe Checkout Route


PodcastItLater: Add Stripe Webhook Handler


PodcastItLater: Enforce Paid Limits in UI


Implement 'task progress <epic-id>' command


Implement 'task stats --epic=<id>' filtering


Add colored output to 'task list' and 'task tree'


Namespace normalization incorrect for Haskell files ending in .hs


Research and add intro/outro sound effects


Implement audio crossfading for intro/outro


Design Omni/Agent.hs CLI and module structure


Implement worker process management (start/stop/pid)


Implement git worktree and sync logic in Haskell


Implement log streaming and filtering (replace monitor-worker.sh)


Add integration tests for Agent workflow


bild fails in agent environment due to CODEROOT mismatch


Race condition in generateChildId when concurrent tasks are created


Remove horizontal bars from task show output


Implement Omni.Agent.Git module with robust checkout


Implement Omni.Agent.Log module with Aeson parsing


Implement enhanced 2-line status logging


Revive authkey authentication in Que/Host


Implement smart base branch selection in Worker


Update start-worker.sh to use Haskell agent


Omni/Bild.hs:776 has a TODO: wrapper should just be removed, instead rely on upstream nixpkgs builders to make wrappers. This simplifies the codebase by removing manual bash script generation.

Remove manual wrapper generation in Omni/Bild


Implement a metrics view in the Admin dashboard (Biz/PodcastItLater/Admin.py). Show total users, active subscriptions, and recent submission counts. Ref: Biz/PodcastItLater/DESIGN.md

Implement metrics view in Admin dashboard


Update Omni/Agent/start-worker.sh to invoke the new Haskell-based agent binary ('agent start <name>') instead of running the legacy bash loop. Ensure it still sets up the environment correctly. The agent binary handles the loop internally.


Modify Omni/Agent/Git.hs to proactively clean up stale rebase/merge states before attempting operations. The worker should attempt 'git rebase --abort' (ignoring errors) before syncing to prevent 'already rebase-merge' errors.

Make worker agent robust to stale git states


Modify Omni/Agent/Git.hs to check for .git/rebase-merge or .git/rebase-apply before running git rebase --abort. This avoids blindly running abort commands.

Detect in-progress rebase before aborting in Agent


Modify Omni/Agent/Worker.hs to check if the task branch already exists before trying to create it. If it exists, simply checkout the branch. This prevents 'fatal: a branch named ... already exists' errors when restarting the worker.

Handle existing task branch in Worker Agent


Implement the 2-line status UI described in Omni/Agent/DESIGN.md (Section 4.3). It should reserve 2 lines at the bottom for Meta (Task ID, Time) and Activity (current thought/action), allowing history to scroll above. Use ANSI codes for cursor management.


Test that lowercase task ids are accepted and do not clash with old tasks.


Update Omni/Agent/Worker.hs to spawn a background thread that tails '_/llm/amp.log' while the Amp agent is running. For each new line in the log: 1. Parse it (it's JSON). 2. Extract a user-friendly summary (e.g. 'Thinking...', 'Tool: Bash'). 3. Update the status bar activity line (AgentLog.updateActivity) with this summary. This provides real-time visibility into what the agent is doing.


Replace 'git rebase live' with 'git sync' (which maps to git-branchless sync) in Omni.Agent.Git.syncWithLive. This aligns with the branchless workflow and handles stack rebasing automatically.

Use 'git sync' instead of 'git rebase' in Agent


1. Add Thread ID to the status bar (requires log parsing later, but add field now). 2. Make the status layout responsive or vertical (4 lines) to fit on small screens (iPhone). 3. Reserve more lines in init.

Improve Agent Status UI for mobile & debugging


Split Thread and Credits in Worker status bar


Fix Worker status bar activity not updating


Fix credit calculation in Worker status bar


Map raw Amp log messages to human-friendly status updates (e.g. 'READ: ...', 'TOOL: ...'), similar to monitor-worker.sh, but WITHOUT using emojis as they are unnecessary.

Improve Worker status bar activity formatting (No Emojis)


The credits in usage-ledger logs are in cents, but we display them as dollars. We need to divide by 100.

Divide usage-ledger credits by 100 to get dollars


Collection of tasks to improve the robustness of the codebase (builds), the usability of the 'task' tool, and the accuracy of the agent's status reporting.

Codebase Health and Tooling Improvements


Implement a 'task edit <id>' command (or 'task update' extension) that allows modifying a task's title, description, priority, and other fields in-place. Currently 'task update' only changes status.


Update the Worker Agent status bar logic to round the displayed credit usage to 2 decimal places (nearest cent). Currently it may show long floating point numbers.

Round credits to nearest cent in Agent status


Update Omni/Task/Core.hs to handle task IDs case-insensitively for lookups and normalize them to lowercase when storing/creating. This improves user experience when typing IDs manually.


Create an agent or script that iterates through every namespace in the project and runs 'bild' (e.g. 'bild --time 0 **/*'). For every build failure encountered, it should automatically create a new task with the error details and link it to this epic (or the discovery context).

Audit codebase builds and file repair tasks


Update Omni/Agent/Worker.hs to read the content of AGENTS.md and include a relevant summary or the full content in the initial system prompt provided to the Amp agent. This ensures the worker knows about repository conventions, testing standards, and tool usage.

Include AGENTS.md context in Worker initial prompt


Remove unused test files, migrate useful tests to the main suite, and remove legacy bash prototype scripts replaced by the Haskell implementation.


Omni/Agent/LogTest.hs is currently unused by the main 'bild --test Omni/Agent.hs' command. Review its contents, move any valuable tests to Omni/Agent.hs (or Omni/Agent/Log.hs's test section), and delete the file.

Consolidate LogTest.hs into main test suite


Remove bash scripts that have been superseded by the Haskell agent implementation. Candidates for removal: harvest-tasks.sh, merge-tasks.sh, sync-tasks.sh, setup-worker.sh. Ensure functionality is covered by Haskell code before deletion.


We have both 'monitor.sh' and 'monitor-worker.sh'. Consolidate them into a single 'monitor.sh' script and remove the duplicate.


Update AGENTS.md with commit message guidelines


Configure git commit template (.gitmessage)


Update repository setup scripts (e.g. Omni/Ide/hooks or task init) to automatically run 'git config commit.template .gitmessage' so all users get the template.

Automate git commit template configuration


Move detailed documentation (Task Manager, Bild, Git Workflow) to separate README files in their respective namespaces. Keep AGENTS.md focused on critical rules, cheat sheets, and pointers to the detailed docs. Goal is to reduce token usage.


Fix bild failure for Biz/PodcastItLater/Web.py


Fix failing tests in Biz/PodcastItLater/Web.py (UsageLimits and EpisodeDetail)


Configure .gitattributes and .git/config (via Omni/Ide/hooks or setup) to use 'agent merge-driver' for .tasks/tasks.jsonl. This prevents data loss when merging branches with divergent task lists.

Configure git merge driver for tasks.jsonl


Update Task Core to include Approved status, update CLI to support it, update TaskStats, and fix any compilation errors. Reference plan: /home/ben/omni/_/llm/PLAN_Autonomous_Workflow.md


Rewrite Omni/Ci.sh into a robust Haskell program (Omni/Ci.hs). Reference plan: /home/ben/omni/_/llm/PLAN_Autonomous_Workflow.md


The Time, Thread, and Credits fields in the agent status bar are not being populated. Update Omni/Agent/Log.hs to parse these fields from the JSON log output.

Fix missing Time, Thread, and Credits in Agent Log


The 'task ready' command currently lists Epics. Update 'getReadyTasks' in Omni/Task/Core.hs to exclude tasks where taskType == Epic.


Update Omni/Agent/start-worker.sh to run 'git sync' in the worker directory before building 'task' and 'agent'. This ensures the worker has the latest tools and code from live.


Add HumanTask to TaskType in Omni/Task/Core.hs. Update 'task ready' and 'Omni/Agent/Worker.hs' to exclude HumanTask. Update docs (Omni/Task/README.md, AGENTS.md) to explain HumanTask usage.


Revert the agent status bar layout to use 5 vertical lines instead of 2 horizontal lines, as it is easier to read on small screens. Update Omni/Agent/Log.hs 'render' function and 'init' function (to reserve lines).

Restore vertical layout for Agent Status


Sign up for Mailgun, configure domain podcastitlater.com, setup DNS, verify domain, and generate API Key.


Implement Mailgun email sending in Biz/PodcastItLater/Mail.py. Use requests. Blocked by Setup Mailgun Infrastructure.