Docs ·

Run your day automatically

Hand each day's work to your coding agent on a schedule — fetch the queue, do the work, report it back — and keep the two things a machine must never do alone.

Your plan already decides what to do each day: one thing on your own site, one place where assistants are reading and you are not. This page hands that day to a machine.

You need an API key with read and write scope. Create one on Plan & settings; it looks like tf_….

The whole job, in one command

claude -p "$(curl -s 'https://tangentflow.com/api/sites/4/today.md?key=tf_…')"

today.md is the day: what to do, the page it touches, roughly how long it takes, a written brief for each item, and the line that reports it back. Point any agent at it — Claude Code, Codex, Cursor, or your own script.

Swap 4 for your site id, which is the number in your dashboard URL.

On a schedule

A GitHub Action in the repo that holds your site. It runs each weekday morning, does the work, and opens a pull request rather than pushing to your main branch.

name: TangentFlow daily
on:
  schedule: [{ cron: "0 8 * * 1-5" }]
  workflow_dispatch:
jobs:
  today:
    runs-on: ubuntu-latest
    permissions: { contents: write, pull-requests: write }
    steps:
      - uses: actions/checkout@v4
      - run: npm install -g @anthropic-ai/claude-code
      - name: Do today's work
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          TF_KEY: ${{ secrets.TANGENTFLOW_KEY }}
        run: |
          curl -s "https://tangentflow.com/api/sites/4/today.md?key=$TF_KEY" > /tmp/today.md
          claude -p "$(cat /tmp/today.md)

          Work in this repository. Open a pull request with your changes; do not
          push to main. If a fact is missing, stop and write what you need in the
          PR description instead of guessing."
      - uses: peter-evans/create-pull-request@v6
        with:
          title: "TangentFlow: today's work"
          branch: tangentflow/daily

Any scheduler works the same way — cron on a box, a Cloudflare Worker, a Zapier step. The only requirement is something that can run your agent.

With MCP instead

If your agent speaks MCP, connect once and it can read the day and report back without curl:

claude mcp add --transport http tangentflow https://tangentflow.com/api/mcp/site \
  --header "Authorization: Bearer tf_…"

Then the daily prompt is simply:

Call get_today for site 4. Do the items marked who: agent in order, in this repository. Call complete_agenda for each with a one-line note. For items marked who: owner, draft what is needed and show it to me instead of sending it. If any fact is missing, stop and ask.

What a machine must not do alone

Two things, and the product will keep saying so:

It must not invent a fact. A price, a limit, a launch date, a customer count. If a brief needs one and you have not given it, the agent stops and asks. That is the correct behaviour, not a failure — a confident wrong price in an AI answer is worse than no price at all.

It must not speak as you. Items marked who: owner are the Reddit reply, the email to a roundup, the review-site profile. An agent drafts those; you read and send them. Automated outreach in your name gets accounts banned and is not something we will help with.

Everything else — titles, headings, JSON-LD, llms.txt, thin pages, the paste-ready sentences once you have supplied the facts — a machine can finish.

Reporting back

Both routes do the same thing, and a row backed by a plan item also triggers the page re-check, so the reply tells you whether the fix is actually live:

curl -X POST "https://tangentflow.com/api/sites/4/agenda/12/complete" \
  -H "Authorization: Bearer tf_…" -H "content-type: application/json" \
  -d '{"note":"added the price sentence to /pricing"}'
{ "ok": true, "itemKey": "fact:price", "verdict": "The fact now appears in the page text." }

The dashboard shows what your agent did, and the weekly check tells you whether the answers moved. Nothing an agent reports is taken on trust: we re-read the page.

Machine-readable, without MCP

  • GET /api/sites/:id/today.md?key=… — the day, as markdown
  • GET /api/sites/:id/today.json?key=… — the same, structured
  • POST /api/sites/:id/agenda/:agenda_id/complete — close one row
  • GET /api/sites/:id/plan.md?key=… — the whole plan, if you would rather work ahead than a day at a time