Skip to content

Post to X from the terminal

Documented Checked against the CLI's current help and source. Not run end to end. CLI 0.3.1, checked 2026-10-15.

Can I post to X from the terminal?

Draft a post as your X agent from the CLI. It files for your approval, and nothing goes out until you say so.

What you get: a tweet drafted and queued from your terminal, with the one guarantee that matters: the agent never posts on its own. Every post is a card you approve, and the whole thing is witnessed.

Posting to X is scoped to an X agent, not to your session. You attach to the agent, ask it to draft a post, and it files an approval card. You approve the card, and only then does it post. There is no path where the agent posts without you.

attach as the X agent
quox agent attach xtwitter# you now act as the X agent for this session, witnessed.# release it when you are done:quox agent detach xtwitter
From a real run on our own install.

Confirm the handle before you draft anything, so you never post from the wrong account.

verify the account
quox agent exec xtwitter --tool twitter_verify_credentials --input '{}'success    yesusername   Quox_AIconnector  twitter
Real output, trimmed.

Pass the text, and an image by its name in your account’s media store, in the image_paths field. The reply echoes back exactly what will be posted.

draft and queue a post
quox agent exec xtwitter --tool x_post --input '{"text":"Any agent can run a command. The harder question is whether it can choose the right ones. New post: https://quox.ai/blog/the-command-was-never-the-hard-part","image_paths":["hero.webp"]}'success         yesstatus          awaiting_approvalinbox_item_id   01K5056BVQ...action_params  action:       x.post  image_paths:  hero.webp  text:         Any agent can run a command. The harder question is...message         Post queued for owner approval
Real output. Org and credential ids redacted.

The reply is awaiting_approval, never posted. The post is now a card in your inbox. Check the echoed text and image before you approve.

see it waiting, then approve
quox inbox list# find the post card, then approve it:quox inbox respond <inboxItemId> --action approve

Approving the card is the moment it posts. Reject it and nothing goes out. The same gate holds for a thread (x_thread) and a delete (x_delete): each one drafts, then waits for you.

A connected social account is exactly the kind of thing you do not want an agent reaching for on its own. So the reach is leased, not given: the agent can draft all day, but the send is a human decision with a receipt. That is the same pattern Quox uses for every action that touches the outside world, and X is no exception.