# Activity log and undo

> Every change made through the Xholic API, MCP server or CLI is logged with the connection that made it, and can be undone where X allows.

Source: https://docs.xholic.ai/api/activity/

Every change made from outside the app (MCP, REST or CLI) is recorded in the activity log of the connection that made it. Open **Settings → API / MCP / CLI**, find the API key or connected app under **Connections**, and open its activity:

- what was done, in one readable line (the action's `summary`)
- the surface it came through (MCP, REST or CLI)
- the X account it acted on, the time, and whether it worked or failed with which error code
- the IDs it produced, such as the scheduled post

Reads aren't logged as activity; they show up in the connection's usage numbers.

## Undo

Where an action can be reversed, its log entry has an **Undo** button. Undo runs the reversing action with the IDs from the original result. For example:

| Action | Undo runs |
| --- | --- |
| `schedule_post` (`posts.schedule`) | `queue.unschedule`: the post goes back to drafts |
| `create_article` (`articles.create`) | `articles.delete` |
| `schedule_article` (`articles.schedule`) | `articles.cancel_schedule` |

Each action's reference entry says whether it can be undone. A post that is already live on X can't be unposted from the log, which is why `publish_now` asks for an idempotency key and your AI asks before posting.

## Why this exists

Your AI reads other people's posts through Xholic, and posts can contain instructions written to trick a model. Xholic's tools tell the model to act only when you asked in the conversation, the most damaging changes are [app-only](/api/app-only/), and the activity log lets you see and reverse anything that happened. If a connection does something you didn't expect, revoke it from the same list.
