agentix-cliBLOCK
Self-hosted AI agents for small teams. Route Telegram, WhatsApp, GitHub, GitLab, crons, webhooks and mesh tasks to agents on Claude Code, Codex, OpenCode or any LLM API. Web dashboard + CLI. MIT.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Put an AI teammate on the tools your team already uses.
[](https://www.npmjs.com/package/agentix-cli) [](https://github.com/anis-marrouchi/agentx/actions/workflows/ci.yml) [](LICENSE) [](package.json)
Watch it · See the demo · Install · Read the guide
AgentX routes messages and scheduled jobs to AI agents you host. Connect Telegram, WhatsApp, GitLab, GitHub, or a webhook. Give each agent a clear job. Watch the result in a browser dashboard.
Watch it
Short videos show AgentX running, one task each. Click the picture to open the Learn AgentX playlist on YouTube.
[](https://www.youtube.com/playlist?list=PLWyRWfXkYvlw)
b5d4850b6beeOBSERVED · 2026-10-11Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add agentx-plugin-echo-channel --env ACME_AGENT_TOOLS_SECRET=${ACME_AGENT_TOOLS_SECRET} --env AGENTX_CHAT_SECRET=${AGENTX_CHAT_SECRET} --env AGENTX_MESH_AUTH=${AGENTX_MESH_AUTH} --env AGENTX_TOKEN=${AGENTX_TOKEN} -- npx -y [email protected]{
"mcpServers": {
"agentx-plugin-echo-channel": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"ACME_AGENT_TOOLS_SECRET": "${ACME_AGENT_TOOLS_SECRET}",
"AGENTX_CHAT_SECRET": "${AGENTX_CHAT_SECRET}",
"AGENTX_MESH_AUTH": "${AGENTX_MESH_AUTH}",
"AGENTX_TOKEN": "${AGENTX_TOKEN}"
}
}
}
}Exposed tools (121)
89 read · 30 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
AgentX | read | Talk to your agents and watch your fleet. |
Bad-Name | read | x |
Main | read | The first computer |
add_deliverable | write | Record a shipped artefact against a task (repo URL, preview URL, design file, document, etc.). type: repo|preview|design|artifact|document|screenshot|figma|spreadsheet|presentation|video|audio|image|other. |
admin | read | Administration |
agent.call | read | Dispatch a task to a local agent on the same daemon (fresh session by default — replaces ad-hoc |
agentx | read | AI-powered agentic code generation agent. Generates components, pages, APIs, documents, skills, and more for any tech stack. |
agentx_agents | read | List all agents registered on the daemon with their status (active tasks, total tasks, errors, tier). |
agentx_approval | read | Ask the operator for a yes/no decision by raising a decision card in their Approvals inbox, instead of asking in chat. |
agentx_attach_answer | read | Explicitly answer the message currently claimed by this session (attach mode). Usually unnecessary — replying normally after agentx_attach_next is captured automatically. Use this only when your reply to the channel should differ from what you told the user in the terminal. |
agentx_call_owner | read | Ring the owner for a live voice call on their desktop widget, when you need them directly and a message will not do. |
agentx_camera_ask | read | Ask the owner to show you their phone camera, when you need to see something (a rack, a cable, a document). |
agentx_camera_look | read | The newest picture from the owner |
agentx_channel_label | destructive | Add and/or remove labels on a GitLab issue or merge_request through the canonical adapter (per-agent token, ledger). Use this instead of curl when changing labels on the entity that triggered the current task. |
agentx_crons | read | List cron jobs and their health. Shows healthy, failing, disabled counts and per-job status with consecutive error counts. |
agentx_debug | write | Toggle debug mode on the daemon. Enable verbose logging for specific categories (webhook, agent, channel, cron, mesh, context, memory, all) or disable it. |
agentx_detect_output_type | read | Auto-detect the best output type for a given task description based on keyword analysis. |
agentx_events | read | Read what happened on this node that matches your event subscriptions (agents.<id>.subscriptions in agentx.json): tasks other agents finished or failed, workflow runs, mesh hand-offs. |
agentx_generate | read | Generate code, components, pages, APIs, documents, tests, workflows, schemas, emails, diagrams, and more using AI. Understands the project |
agentx_graph_review | read | Triage pending intent-graph classifications via the configured review agent. The review agent sees each pending classification, may call |
agentx_health | read | Get the daemon health status including node info, agents, crons, mesh peers, and uptime. |
agentx_inspect | read | Analyze a project and return its tech stack, frameworks, databases, schemas, installed skills, and dependencies. Use this to understand a project before generating code. |
agentx_recent | read | Read the most recent messages from a chat across ALL agents that have sessions for it. Returns inbound + each agent |
agentx_request | read | Say what you are doing with a request the owner gave you, so it stays on their list of open requests until it is closed. |
agentx_schedule | write | Manage recurring routines (schedules) in plain English. Actions: list, create, pause, resume, delete. |
agentx_send | write | Low-level outbound send when you ALREADY have a channel-native chatId (Telegram numeric chat id, GitLab |
agentx_signal | write | Stop a running agent task cleanly, or resume one that was stopped (#857). |
agentx_skill_match | read | Find installed skills that are relevant to a given task description. Returns matched skills with relevance scores. |
agentx_task | write | Send a task to a specific agent on the daemon. The agent processes it and returns a response. Use to delegate work to specialized agents. |
agentx_voice_queue | read | See what this host is saying out loud and what waits to be said: every agent |
agentx_wiki_interview | write | Run a scripted wiki interview — synthesize ONE typed article from a list of Q&A answers, and save it. Non-interactive: caller supplies the answers upfront. Use for capturing tacit knowledge (person/project/decision/pattern/...) that never hit a channel. For editing an existing article, use |
agentx_wiki_patch | write | Edit a single wiki article via an LLM-applied instruction and write the result. Use this for targeted fixes, additions, or clarifications to an existing article when you already know what |
agentx_workflow | write | Run a request that has several steps as a workflow, so AgentX follows it to the end instead of you chasing each step. |
api-service | read | REST API service with auth, validation, error handling, and tests |
ask_user | read | Ask the user a clarifying question when you need more information to proceed. Use this when the request is ambiguous or you need to confirm important decisions. |
billing-cutoff | read | Invoices close on the 25th |
boom | read | Always errors |
branching | read | Classify, then route on the result via a branch node. |
channel.assign | write | Set assignees on a GitLab issue or MR (replaces the assignee list). Pass empty array to unassign. Use during Triage→To Do flip to assign the coding agent, or to designate reviewer/merger on an MR. |
channel.create_issue | write | Create a GitLab issue from an agent (PM test cases, CX client requests). Honors per-agent identity; resolves assignee usernames to ids; optional /relate to a parent issue. |
channel.label | destructive | Add and/or remove labels on a GitLab issue/MR through the adapter (per-agent token, ledger, no raw curl). |
channel.reply | write | Post a reply to a channel (gitlab/github comment, telegram/whatsapp message, ...) through the canonical adapter — auto-marker, auto-dedupe within 60s, identity resolved from agentMappings. |
chrome-extension | read | Browser extension with popup, content script, background worker, and options |
cli-tool | read | CLI application with commands, flags, interactive prompts, and config |
code | read | Software work |
component-library | read | UI component library with Storybook, tests, and documentation |
create_files | write | Create one or more files as output. Use this when you need to generate code, documents, configs, or any file-based output. |
create_task | write | Queue a new task for the user. Use when they ask you to build, fix, or work on something. CONFIRM the summary verbally first. |
data-pipeline | read | Data processing pipeline with ingestion, transformation, and output stages |
deploy.staging | write | Deploy |
drift.test | read | test |
echo | read | Echo back input |
edit_file | write | Apply search-and-replace edits to an existing file. Use this for targeted modifications to existing code rather than rewriting entire files. |
extract | read | Pull typed fields from free-form text via extract.structured. |
extract.structured | read | Single-call typed extraction: prompt + JSON-Schema → structured data via forced tool_use |
f1 | read | d |
failure-0123456789 | read | beta: Bash keeps failing |
file.read_lines | read | Read a text file as an array of lines (utf-8, 8MB cap, scoped to allowed roots) |
file.write_jsonl | write | Append JSON records to a file as newline-delimited JSON (utf-8, scoped to allowed roots) |
fix.bug | read | Fix a defect |
foo.bar_baz | read | x |
fullstack-app | read | Full-stack application with database, API, UI, and deployment config |
gadget-key | read | Gadget admin key |
gadget-owner | write | Gadget service is run by the platform team |
gadget-port | write | Gadget service listens on port 7420 since the move |
get_credit_balance | read | Get the user |
get_project | read | Get a single project with its tasks and recent conversations. Use after list_projects when the user picks one. |
http.fetch | read | GET a URL, return body + status + headers (1MB cap, http/https only) |
http.post | write | POST a JSON body to a URL, return body + status + headers (1MB cap, http/https only) |
infra-x | write | deploy and ssh notes |
initech-broken | read | broken |
initech-cx-email | read | email skill |
initech-cx-email-v2 | read | email skill |
initech-stale | read | infra |
initech-v2-deploy | write | Deploy Initech V2 |
linear | write | Trigger → Agent → End. Smallest workflow that runs. |
list_attachments | read | List files the user has uploaded to the workspace. Filter by project_id and/or task_id. |
list_directory | read | List files and directories at a given path. Use this to explore project structure. |
list_projects | read | List the example.com user |
mesh.delegate | write | Send a task to a remote mesh peer |
mixed-subjects | read | 12 turns over three unrelated subjects with genuine follow-ups inside each. |
mobile-app | read | Mobile application with navigation, screens, and native features |
no-mock-db | read | Use a real database in tests |
ops | read | Infrastructure |
p1 | read | d |
p2 | read | d2 |
parking | read | Parking |
pick | read | d |
ping | read | HTTP echo |
ports | read | d |
pref | read | terse |
r1 | read | d |
rag.lexical | read | BM25-style lexical search over an agent |
read_file | read | Read the contents of a file. Use this to inspect existing code, understand patterns, check implementations, or gather context before generating code. |
release-follow-up | write | Deploy, check it is live, tell the client (with your approval). Followed to the end; one summary for you. |
report | read | Report what is visible and how it bears on the question |
respond_with_structure | read | Return a structured value matching the schema |
restart.service | write | Restart |
retry | read | Per-node retry policy with a branch fallback path. |
review.merge-request | write | Review an MR |
role | read | Alex is a solo founder — prefers terse tech replies. |
run_command | write | Execute a shell command. Use this to run build tools, test commands, linters, or inspect the environment. Commands run in the project root directory. |
saas-starter | read | Full-stack SaaS starter with auth, billing, dashboard, and landing page |
search_files | read | Search for files matching a pattern and optionally search their content with a regex. Use this to find relevant code, understand project structure, or locate specific patterns. |
server_ports | read | daemon ports |
signal.resume | write | Resume a task a stop signal paused, from its resume plan, in the same chat |
single-thread | read | 8 turns on one continuous task. Every turn after the first depends on the last. |
slow.thing | read | test |
spawn_agent | read | Spawn a sub-agent to handle a task in the background. The sub-agent runs in its own session and returns results. Use this for parallel research, long-running tasks, or delegating work to a specialized agent. |
terse-switches | read | 10 short turns with unsignposted subject changes and one-word follow-ups. |
test.capture | read | test |
test.echo | read | test |
test.strict | read | test |
tone | read | Gadget replies stay short |
u1 | read | d |
unnamed | read | No description |
update_task | write | Update a task |
wacli | read | d |
x | read | d |
x.y | read | v1 |
y | read | d |
Trust audit
BLOCKgrade F · trust 32/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | FAIL |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (9 observation(s))
- Network
- declared (7 observation(s))
- Shell
- declared (14 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
event-payload.ts
const parsed = yaml.load(raw)
const parsed = yaml.load(raw)
const parsed = yaml.load(raw)
const raw = yaml.load(readFileSync(full, "utf-8")) as { project?: string } | nullconst rule = (yaml.load(before) ?? {}) as ProjectRuleexec(cmd, { cwd, env, timeout: action.timeoutMs, maxBuffer: MAX_OUTPUT }, (err, stdout, stderr) => {if (helper && await exec(helper, ["notify", "--title", title, "--message", message])) return
const r = await exec(settings.bin, [...base(settings), "send", "text", "--to", to, "--message", text, "--no-preview"], { timeoutMs: 60_000 })const r = await exec(settings.bin, [...base(settings), "--read-only", "media", "download", "--chat", chat, "--id", id, "--output", output], { timeoutMs: 120_000 })gradle-wrapper.jar
console.log(chalk.red(` --token-env must be uppercase identifier (got "${tokenEnv}")`)); process.exit(1)console.log(chalk.red(` Invalid token: ${e.message}`))console.log(chalk.dim(` Secret token: ${answers.webhookSecret}`))console.log(` Token: ${chalk.dim(maskToken(config.token))}`)console.log(` ${chalk.green.bold(secret)}`)function PhoneHome({ transit, windowH, onLine }: { transit: Transit; windowH: number; onLine: (id: string) => void }) {{!pl ? <PhoneHome transit={transit} windowH={windowH} onLine={(id) => { setPhoneLine(id); setSel(null) }} /> : (static let daemonURL = env("AGENTX_DAEMON_URL") ?? "http://127.0.0.1:18800"const text = raw.replace(/^/, "").replace(/\r\n/g, "\n")
"AKIAABCDEFGHIJKLMNOP",
const env = { DATABASE_URL: "postgres://u:[email protected]:5432/app", X: "y" }"postgres://app:[email protected]/app",
"-----BEGIN OPENSSH PRIVATE KEY-----",
agentx_channel_label, channel.label
Gates applied: no_behavioural_pass.
b5d4850b6beefull audit observations/trust-audit/mcp-server/anis-marrouchi__agentx.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | b5d4850b6bee | BLOCK | F | 32 | first audit |
Questions
What is the agentix-cli MCP server?
Self-hosted AI agents for small teams. Route Telegram, WhatsApp, GitHub, GitLab, crons, webhooks and mesh tasks to agents on Claude Code, Codex, OpenCode or any LLM API. Web dashboard + CLI. MIT.
What tools does agentix-cli expose?
121 in total: 89 read-only, 30 that write, and 2 that can delete or overwrite (agentx_channel_label, channel.label). Every one is listed on this page with its risk.
Is agentix-cli safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (32/100) and found 10 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does agentix-cli need?
It reads ACME_AGENT_TOOLS_SECRET, AGENTX_CHAT_SECRET, AGENTX_MESH_AUTH, AGENTX_TOKEN, AGENTX_TOOLS_SECRET, AGENTX_WORKFLOW_AUTHOR_AGENT, ANTHROPIC_API_KEY, ANTHROPIC_OAUTH_TOKEN, CLAUDE_CODE_OAUTH_TOKEN, ELEVENLABS_API_KEY, EXAMPLE_TOKEN and GITHUB_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How current is this page?
The grade is for one exact copy of the source (b5d4850b6bee), read on 2026-10-11. The repository is watched and re-audited when it changes.