← All posts

AI Assistants. Handing Off the Boring Half.

Çağdaş TuncaÇağdaş Tunca

Most of the time I spend in a task manager is not thinking. It is typing. Copying a decision out of a conversation into four tasks. Opening three boards to remember what I said I would finish this week. Coming back from a few days away and scrolling to work out what moved.

None of that is hard. It is just work about work, and it adds up.

So you can now connect Claude or ChatGPT to Jinear and hand that part over. You ask in plain language, and the assistant reads and writes in your Jinear, as you, with your permission.

What I actually use it for

  • Turning a conversation into tasks. I paste the thread or the notes, say "make tasks for my team from this", and it writes them with real titles instead of the three words I would have typed myself.
  • The Monday question. "What is assigned to me this week, and what is overdue?" One answer, instead of opening every board.
  • Catching up. After a week off: "what changed in this workspace while I was away?" It reads the tasks, the comments and the calendar and tells me.
  • Filing. "Put this on the right board and set it to in progress." Sorting is the chore I put off most, and it is the one I now never do by hand.
  • Writing it up. "Summarise what we finished this month." It reads the notes and the closed tasks and drafts the update I was going to write anyway.
  • Finding the thing. "Where is the file with the invoice from March?" It looks through the files and the notes and hands me a link.

The pattern, once you get used to it, is that you stop opening the app to look things up. You ask, and you open the app to work.

What it will not do

This is the part I thought about most, because handing an assistant the keys to your work only feels fine if the keys are small.

  • It cannot delete anything. Not a task, not a note, not a file. There is no delete, so the worst case is a mess to tidy up rather than something gone.
  • It can only write to tasks. Creating and updating tasks, moving them between boards, setting a status, leaving a comment, attaching a file. That is the whole list of things it can change.
  • Notes, calendar and files are read only. It can read your notes to answer a question and it can find a file for you, but it cannot rewrite the note or touch your calendar.
  • You choose what it sees. When you connect it, you approve each area on its own, and reading and writing are separate. Letting it write tasks does not hand over your calendar.
  • It works inside one workspace, checked against your account on every request.
  • You can disconnect it at any time, from your profile. That takes effect on the next request, not whenever some token happens to expire.

In numbers: twenty-seven things it can do, twenty of which are only reading.

Turning it on

On the hosted version it is ready now. Open your profile, copy the address Jinear shows you, and paste it into Claude or ChatGPT where they ask for a custom connector. You sign in to Jinear once, tick what you are willing to allow, and that is the setup.

It is quicker to watch than to describe. Here it is in each of them, start to finish. No narration, just the clicks.

Connecting Claude to Jinear Watch on YouTube
Connecting ChatGPT to Jinear Watch on YouTube

If you self-host, it is off until you turn it on, and your instance has to be reachable from the internet over HTTPS, because Claude and ChatGPT connect from their own servers rather than from your browser. The switch is in the admin panel, under AI Assistants. There is a page with the full setup and the complete list of what an assistant can touch at jinear.co/mcp.

Updating to this version

If you already self-host, update the way you always do:

cd ~/jinear
docker compose pull && docker compose up -d

That is the whole job. Nothing in this release breaks an instance that ignores it. Every new setting carries a default, your own config files are left exactly as they were, and the new tables apply themselves when the server starts. If you never switch assistants on, the only thing that changed is the version number.

When you do want them on, the switches and the exact blocks to paste are in the upgrade guide.

What is not in it yet

It cannot create a note or a calendar event, which is the request I expect first. I left writing out of both on purpose for now: a note is a document several people can be editing at once, and a calendar write can mean writing into someone's Google calendar. Both deserve more care than task writing needed.

Jinear also schedules nothing of its own. It answers when something asks, and I am in no hurry to change that.

Scheduling it is your side of the line, though, and that is where this gets interesting. Assistants you can run from a command line take the same connection, so anything you can put on a timer can use it. Mine goes off and searches for a few things I care about personally, on a schedule, the kind of looking up I would otherwise keep forgetting to do, and files whatever it finds into Jinear as tasks on a board I keep for exactly that. I never go and check. The findings turn up where the rest of my work already is, and I deal with them when I am there anyway.

A scheduled job, written out

That one is personal, so here is a work example in full, because "put it on a timer" is easy to say and everything useful is in the details.

I submitted Jinear to awesome-selfhosted, which means waiting on a pull request I do not control. The task sat on my board collecting pushed dates, and I kept opening GitHub to see whether anything had happened. Now it runs every morning without me.

Daily job: has the awesome-selfhosted PR been merged yet?

Fixed values (do not search, use these):
- workspaceUsername: <my workspace handle>
- Task jin-559 "Add Jinear to awesome-selfhosted"
  taskId: <task id>
- Workflow status ids, from list_workflow_statuses for the jin team:
  Completed: <status id>
  Cancelled: <status id>
- PR state sources, in order:
  1. https://img.shields.io/github/pulls/detail/state/awesome-selfhosted/awesome-selfhosted-data/2868.json
  2. https://github.com/awesome-selfhosted/awesome-selfhosted-data/pull/2868
- Time zone: Europe/Istanbul

Steps:
1. Read the task with get_task (workspaceUsername above, teamTag: jin,
   taskNumber: 559). If it is already Completed or Cancelled, do nothing,
   say "already closed" and stop.
2. If it is open, then before checking the PR and whatever that check
   returns, use update_task to set startDate and dueDate both to today at
   00:00 Europe/Istanbul. Jinear stores the two as a pair, so send both.
3. Work out the PR state. Fetch source 1; its "message" field is "open",
   "merged" or "closed". If that fails, try source 2. If neither answers,
   leave the status alone and go to step 4.
   - merged: set_task_status to Completed, then add_task_comment with a
     dated "PR merged".
   - closed: set_task_status to Cancelled, then add_task_comment with a
     dated "PR closed without merging".
   - open: do nothing else.
4. Report one line: whether the dates moved, what the PR state was (or why
   it could not be determined), and what changed in the status.

Four details in there do the real work, and none of them are about pull requests:

  • The ids are pinned and searching is banned. A run that starts by looking things up is slower, costs more and can settle on the wrong task. Look the ids up once by hand, paste them in, and every run after that is three calls.
  • It reads before it writes. If the task is already closed it stops there. That makes the job safe to leave running forever: on a finished task it does nothing, every morning, quietly.
  • The unconditional half is separate from the conditional half. The dates move whatever the pull request is doing. Only the status waits on an answer.
  • It is told what to do when it learns nothing. If neither source responds, leave the status alone. Without that line an assistant eventually guesses, and guessing is how a scheduled job makes a mess while nobody is watching.

Two notes on the Jinear side. startDate and dueDate have to be sent together, because Jinear stores them as a pair, which is why the prompt always sets both. And the fetch in step 3 is the assistant's own web tool rather than one of Jinear's: Jinear's tools only ever touch Jinear.

That shape works for anything you currently check by hand on a schedule. Something outside decides, Jinear records the decision, and you find the result where the rest of your work already is.


If you connect it and it does something silly, or there is an obvious chore it should be able to take and cannot, email me. That is how this list gets shorter.

The whole thing is on GitLab and GitHub.

changelogmcp
Çağdaş Tunca

Written by Çağdaş Tunca

I build and maintain Jinear in the open. Mostly I write here when something ships, or when I've changed my mind about how the product should work.