Where it is.
The tool ships inside the Call State app, so there is nothing separate to download:
- macOS:
Call State.app/Contents/MacOS/callstate-cli. Right-click the app and choose Show Package Contents to find it. - Windows:
callstate-cli.exein the folder where Call State is installed, next tocallstate.exe.
To type callstate from any folder, link the file into a folder on your PATH, for example with ln -s "/Applications/Call State.app/Contents/MacOS/callstate-cli" ~/bin/callstate. Use the path where you installed the app.
Before you start.
- Open Call State. The tool needs the app running in the menu bar or system tray. It does not start the app for you.
- Sign in. Most commands need a signed-in account. Free accounts sign in again every 24 hours.
- Check the connection. Run
callstate health. A reply with the version means the tool reaches the app.
The commands.
| Command | What it does |
|---|---|
callstate health | Shows that the app runs, with its version and process ID. callstate version does the same. |
callstate status | Prints your current call status and the controls that are available right now, as JSON. |
callstate watch --interval 1 | Prints the status again every second (the interval is in seconds) until you stop it with Ctrl+C. |
callstate probe | Scans Teams on this computer again, without waiting for the next update. Add --tree to include a raw dump of the Teams interface for troubleshooting. |
callstate act <action> | Sends one control command. Actions are listed below. |
callstate react <reaction> | Sends a meeting reaction: applause, laugh, like, love or surprised. |
callstate ws start|stop|status | Turns the Teams Emulation for compatible legacy tools on or off, or shows whether it runs. |
callstate beacon list|test|update|resume | Lists attached Call State Beacons, shows a test state on them, flashes new firmware, or hands the Beacon port back to the app. |
A successful command prints {"ok": true}. Only the next status shows whether Teams has changed.
Actions for act.
The same action names work in the Local REST API, so a script can use either one.
| Action | What it does |
|---|---|
mute, unmute, toggle-mute | Turn the microphone off, on, or switch it. |
camera-on, camera-off, toggle-camera | Turn the camera on, off, or switch it. |
hand-up, hand-down, toggle-hand | Raise or lower your hand, or switch it. |
stop-sharing | Stop your screen sharing. |
leave | Leave the meeting. |
answer-call | Accepts a ringing call on this computer. Outside a meeting only, and never sent to another computer. |
When a command fails.
The tool prints a JSON error with a stable code and a message, and exits with a matching code. Scripts can check the exit code:
| Exit code | Meaning |
|---|---|
| 1 | The request was invalid, for example an unknown action. |
| 2 | The app is not running on this computer. |
| 3 | No meeting is active that you can control. |
| 4 | Teams did not respond to the control. Check the window, for example a blocking dialog or a minimized meeting. |
| 5 | A permission is missing, for example Accessibility on macOS. |
| 6 | You are not signed in. |
| 7 | The request came from another user on this computer and was refused. |
| 8 | Another program already uses the port of the Teams Emulation. |
How it reaches the app.
The tool talks only to the Call State app on the same computer, through a local connection that only your user account can open. It sends nothing to the cloud itself. Commands go through the app, the same way as a click in Call State.
Scripts that run on another device, or that use plain HTTP, can use the Local REST API instead. It offers the same status and commands on port 8125.
Plans and availability.
The command-line tool is included in Free and in Paid. Free needs a sign-in every 24 hours, and the commands work only while you are signed in. Paid removes that daily sign-in.
Your own setup
Start with one status check.
Install Call State, run callstate status during a call and build from there.