Move your TODO.md, GitHub Issues or Linear into Taskhold
By Jake Marsh, who builds Taskhold. Updated 2026-10-31. Facts about other tools checked 2026-10-31. 7 min read.
Short answer: Taskhold has no importer. Your coding agent does the move: it reads TODO.md, your TODO comments, gh issue list output or a Linear CSV, and calls taskhold_create once per item with the project, priority and labels. The prompts below are ready to paste. Nothing syncs back, so the originals stay where they are.
Moving a backlog into Taskhold is a job for the agent you already use. Connect it to Taskhold, paste one of the prompts below into Claude Code, Cursor or Codex, and it files each item as a task through the MCP tools. There is nothing extra to install or buy, and you can watch the tasks land on the live board.
Each prompt files into a project named after the repo folder, keeps priority and labels where the source has them, and ends with a count of what it filed and skipped. If you're still deciding, Taskhold vs Linear and Taskhold vs GitHub Issues say when to stay put.
Before you start
- Connect the agent to Taskhold. Start the 7-day trial, make a setup URL in Settings and paste it into the agent.
- Run each prompt from the repo's folder, so the folder name becomes the project. The project is created the first time the agent passes it, so you only need taskhold_create_project if you want a description or color on it.
- Try five items first. Add "only the first five" to the prompt, check them in the web app, then run the rest.
TODO.md: one task per unchecked item
TODO.md items go through taskhold_create, which takes title, description, priority (low, medium, high or urgent; medium if left out), project and up to 20 labels. Paste this:
Move TODO.md into Taskhold.
- Project: this repo's folder name. Pass it as project on every call.
- Each unchecked item in TODO.md ("- [ ]" or a plain bullet) becomes one task. Skip checked items ("- [x]").
- Call taskhold_create for each one:
- title: the item text (500 characters at most)
- description: any notes or sub-bullets under it, then "From TODO.md, section: <heading>"
- priority: urgent, high, medium or low, from what the item says (P0, P1, "urgent", "later"). Otherwise medium.
- labels: the section heading and any #tags in the item, lowercase, up to 20, each under 50 characters
- Don't start or plan the tasks. They go to To Do.
- Don't edit TODO.md.
- When you finish, tell me how many tasks you filed and how many items you skipped, and why.Once the tasks look right, delete TODO.md yourself or keep it as a record. Taskhold doesn't read the file again.
TODO and FIXME comments in code
Comments in code go through taskhold_create_from_todo, which takes title, file_path, line_number, description and project. The tool adds the label todo-from-code and puts the file:line in the description. Priority and labels aren't arguments of this tool, so the prompt sets priority afterwards with taskhold_set_priority.
File the TODO and FIXME comments in this repo as Taskhold tasks.
- Project: this repo's folder name. Pass it as project on every call.
- Find them with: git grep -n -w -e TODO -e FIXME
Skip vendored, generated and lock files.
- For each real one, call taskhold_create_from_todo with:
- title: what the comment asks for, as a short task title
- file_path and line_number: from the grep output
- description: the function it's in and a sentence on what the code around it does
- Skip comments with no clear task (a bare "TODO") and repeats of the same TODO.
- For FIXMEs and TODOs that describe a bug, call taskhold_set_priority with priority high on the new task. Leave the rest at medium.
- Don't change any code.
- When you finish, tell me how many tasks you filed and list the ones you skipped as file:line.Turning code TODOs into tasks covers asking agents to file new ones as they work.
GitHub Issues: from gh issue list
GitHub's gh CLI prints your open issues as JSON. gh returns 30 issues unless you raise --limit, and the url field gives the agent each issue's link to keep:
gh issue list --state open --limit 1000 --json number,title,body,labels,url > issues.jsonAdd --assignee @me to take only your own issues. Then paste:
Move the open GitHub issues in issues.json into Taskhold.
- Project: this repo's folder name. Pass it as project on every call.
- One taskhold_create per issue:
- title: the issue title
- description: the issue body, then a last line "GitHub issue #<number>: <url>". If the body is longer than 9,000 characters, cut it there and add "(cut, full text at the link)".
- labels: the issue's label names, up to 20
- priority: urgent, high or low when a label says so ("priority: high", "P0", "critical", "low priority"). Otherwise medium.
- Don't close, comment on or edit anything in GitHub.
- When you finish, tell me how many tasks you filed and list any issue you skipped with its number.The issue stays open in GitHub. Taskhold has no two-way sync, so finishing the task doesn't close the issue and later edits to the issue don't reach Taskhold. Close the issues yourself if you're moving for good, and delete issues.json once you're done (don't commit it).
Linear: a CSV export or Linear's MCP server
Linear exports issues as CSV two ways. Any member can open the command menu (Cmd+K or Ctrl+K) in an issue view and choose Export issues as CSV, up to 250 issues at a time (admins up to 2,000). Admins can also export the whole workspace from Settings > Administration > Import Export, which emails a download link that expires after 12 hours. The CSV has ID, Title, Description, Status, Priority and Labels columns, but no URL column.
Move the Linear issues in linear.csv into Taskhold.
- Project: this repo's folder name. Pass it as project on every call.
- Skip issues whose Status is done, canceled or a duplicate.
- One taskhold_create per remaining issue:
- title: Title
- description: Description, then a last line "Linear <ID>: https://linear.app/<workspace>/issue/<ID>". My workspace is <workspace>.
- priority: Urgent = urgent, High = high, Medium = medium, Low = low, No priority = medium
- labels: the Labels column split into names, plus the Project name if there is one, up to 20
- Don't change anything in Linear.
- When you finish, tell me how many tasks you filed and how many you skipped, by status.With Linear's MCP server connected as well (https://mcp.linear.app/mcp, or https://mcp.linear.app/mcp/readonly to keep the agent read-only), skip the CSV. Ask the agent to list your open Linear issues and apply the same mapping, with each issue's ID and link in the description. As with GitHub, the issues stay open in Linear and nothing syncs back.
If the agent files something wrong
- Wrong title, priority or project: ask the agent to fix it with taskhold_update (title, description, priority, project) or taskhold_set_priority.
- Tasks that shouldn't exist: delete them in the web app. Open the task and click Delete Task; deleting a task deletes its steps too. The MCP tools have no delete, and the web app deletes one task at a time, which is why the five-item trial run helps.
- Duplicates from a second run: the prompts ask for a count, so compare it with the source before running again, and delete the extras in the web app.
Fair-use ceilings apply to an import like anything else: 500 projects, 100,000 tasks and 50 API keys per account. Past the task ceiling, taskhold_create returns an error and creates nothing, and nothing past a limit is charged. Per task, titles hold 500 characters, descriptions 10,000, and up to 20 labels of 50 characters each.
See how far along your coding agents are.
$12/month or $120/year after the trial. Card up front. Cancel before day 7 and you pay nothing. Every agent you run is included.
Questions
- Does Taskhold have an importer for GitHub Issues or Linear?
- No. Your coding agent does the import: it reads the source (TODO.md, code comments, gh output, a Linear CSV or Linear's MCP server) and calls taskhold_create once per item. The move costs nothing beyond your plan.
- Will finishing a task close the GitHub issue or Linear issue?
- No. Taskhold doesn't sync with GitHub or Linear in either direction. The original stays open until you close it there.
- Can I move tasks back out of Taskhold later?
- Yes. Settings > Your data downloads everything in your account as one JSON file. An agent with both servers connected can also read tasks with taskhold_list and taskhold_get and file them as issues.
- Do I need taskhold_create_project first?
- No. Passing project with a name creates the project on first use. taskhold_create_project is there if you want to set a description or color before the import.
Sources
- GitHub CLI manual: gh issue list, checked 2026-10-31
- Linear docs: exporting data, checked 2026-10-31
- Linear docs: MCP server, checked 2026-10-31
Related
Updated 2026-10-31. Something wrong or out of date? Email hello@greatwork.company.