tares@1.56.0
CAUTION· not startedPublisher claims: "Open-source platform for always-on AI agents: a software factory for Claude Code that takes your projects from tickets to merged pull requests, or an AI SRE that watches your systems." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
ROOT_TOKENTARES_AUTH_TOKENTARES_METRICS_TOKENTARES_STATE_DSNTARES_WEBHOOK_ALLOW_PRIVATEConfiguration, not credentials: ANTHROPIC_BASE_URL, CLAUDE_BIN, CLAUDE_PLUGIN_ROOT, FACTORY_CREW_HOME, TARES_AGENT_MODEL, TARES_ANTHROPIC_BASE, TARES_CATALOG, TARES_CATALOG_SYNC, TARES_CLOUD_URL, TARES_DB, TARES_DEGRADED_PCT, TARES_DUCKDB_MEMORY_LIMIT, TARES_DUCKDB_THREADS, TARES_EDITION, TARES_ENTITY_CARDINALITY_CAP, TARES_FACTORY_URL, TARES_GITHUB_CONNECT_URL, TARES_HOME, TARES_HOST, TARES_INGEST_PAUSE_PCT, TARES_INSTANCE_NAME, TARES_KEYRING, TARES_LINEAR_CONNECT_URL, TARES_LOGIN_URL, TARES_LOGOUT_URL, TARES_MAX_DB_SIZE, TARES_MCP_HOST, TARES_MCP_PORT, TARES_MCP_TRANSPORT, TARES_OTLP_GRPC_PORT, TARES_PLUGIN_DIR, TARES_PORT, TARES_PUBLIC_URL, TARES_SCHEDULE_CLOCK_SECONDS, TARES_SEED_PROJECT- Where it talks to
- tares-glassflow.com (its own)Also glassflow.ai, astral.sh, navflow.dev, githubcopilot.com, llm-gateway.internal, linear.app, slack.com, rius-glassflow.com — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- server startup · the tool list · tool behavior
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names glassflow.ai, astral.sh, navflow.dev, githubcopilot.com, llm-gateway.internal, linear.app, slack.com, rius-glassflow.com as well as its own vendor. The guard injects ROOT_TOKEN, TARES_AUTH_TOKEN, TARES_METRICS_TOKEN, TARES_STATE_DSN, TARES_WEBHOOK_ALLOW_PRIVATE only into requests to tares-glassflow.com (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-10 and scored it 75/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Hidden zero-width characters detected; Pipe-to-shell pattern. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
stop_daemon() { [ -n "$DPID" ] && { kill "$DPID" 2>/dev/null || true; wait "$DPID" 2>/dev/null || true; DPID=""; }; return 0; }Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.r = subprocess.run(["git", "-C", str(repo)] + list(args), capture_output=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.cd ui && npm ci && npx tsc --noEmit && npm run build # produces ui/distFix: Pin versions and sources; vendor anything fetched at install time.echo "console: $DAEMON/projects/${UID_P:-} (stop it with: kill $DPID)"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.text = (text or "").lstrip("").replace("\r\n", "\n")Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.curl -s $A/api/home | python -m tares.words --skip name,goal,title,detail,said,textFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.printf '#!/bin/sh\ntouch "%s/tares-mcp-started"\nexit 1\n' "$T" > "$T/bin/tares-mcp"; chmod +x "$T/bin/tares-mcp"Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.Browser suites locally: `cd ui && npm ci && npm run build && npx playwright install chromium`, then from the repo rootFix: Pin versions and sources; vendor anything fetched at install time.cleanup() { local p; for p in $PIDS; do kill "$p" 2>/dev/null || true; wait "$p" 2>/dev/null || true; done; rm -rf "$T"; }Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.except Exception as e: # never let one source kill the loopFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.- Its own quiet check (what `inFlight` and `updatedAt` give today), its own stop (kill the process tree), and its own wake-ups for stations that sleep between turns.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.p = subprocess.Popen(["node", os.path.join("tests", f"{suite}.e2e.cjs")], cwd=ui, env=env,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.out = subprocess.run(["powershell", "-NoProfile", "-NonInteractive", "-Command", ps_cmd],Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."""{text}: add one line to the global AGENTS.md (`agents`) or memory (`memory`). A lineFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.return subprocess.call(["bash", os.path.join(base, "factory", f"{name}_test.sh")])Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["taskkill", "/T", "/F", "/PID", str(pid)], capture_output=True, timeout=15)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."""{text}: add one line to the caller's personal AGENTS.md (`agents`) or memoryFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.if alive(): # it ignored the marker: kill it only when its command line is oursFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.r = subprocess.run([self.claude, "agents", "--json"] + (["--all"] if "--all" in rec["argv"] else []),Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.raise CatalogError(f"mcp_server {m['name']!r}: url must be an http(s) URL "Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.self.p = subprocess.Popen(argv, **kw)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.out = subprocess.run(["ps", "-axo", "pid=,ppid=,command="], capture_output=True, timeout=30).stdout.decode("utf-8", "replace")Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.return subprocess.call([sys.executable, os.path.join(base, f"{t}.py")])Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for tares@1.56.0 as of 4d ago. This is the package itself, not its dependencies.
What would make this Verified
5 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Pipe-to-shell pattern≈ +9 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- Unclaimed publisher≈ +8 on the totalClaim glassflow: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Hidden zero-width characters detected≈ +4 on the totalKeep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.
- Process kill command≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.