Standalone TypeScript framework for composing secure personal AI agents from one universal primitive: the Component.
Elliott exposes 12 tools with minimal quality standards. All tools have basic descriptions (10-50 chars), but lack critical structure: NO input schemas are visible in the source code, only parameter names and types are listed informally. Parameters lack descriptions entirely. Output schemas are undocumented. Tool names are generic (e.g., 'files', 'terminal', 'ssh') without action verbs. Critically, 7 of 12 tools accept credentials (passwords, tokens, API keys) as parameters, a severe security violation. Error handling is absent. This server would fail code review by any production standard.
Cloudflare Tunnel integration tool for secure ingress
File system access tool for reading and writing files
Home Assistant integration tool for home automation
Pi-hole DNS ad blocker integration tool
DuckDuckGo search tool
Email sending tool via SMTP
SSH client tool for remote host access
Subscription usage tracking tool for multiple LLM providers
NO input schemas visible in source code. All 12 tools list parameters informally without JSON Schema definitions, type constraints, or enums. Cannot verify parameter validation or LLM-readable constraints.
Credentials exposed as tool parameters: 'ssh' accepts privateKey, 'smtp' accepts password, 'homeAssistant' accepts token, 'pihole' accepts password, 'vault' accepts token, 'cloudflared' accepts apiToken. Secrets in parameters leak into logs and LLM traces. Use server-side secret injection via environment variables or vault.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 30 | 2026-07-28+ | v2 |
Terminal command execution tool with allowed command restrictions
Traefik reverse proxy integration tool
HashiCorp Vault secret management tool
Webhook provisioning tool for gateway configuration
Tool names lack action verbs. 'files', 'terminal', 'ssh', 'smtp', 'pihole', 'traefik', 'vault', 'cloudflared' do not start with verbs (get_, create_, update_, delete_, search_). LLMs cannot infer intent from names alone. Rename to 'read_file', 'write_file', 'execute_command', 'send_email', etc.
Parameter descriptions are missing entirely. 'root', 'allowedCommands', 'user', 'hosts', 'privateKey', 'host', 'port', 'username', 'password', 'from', 'allowedRecipients', 'baseUrl', 'token', 'apiUrl', 'certResolver', 'entryPoint', 'lanAddress', 'enabled', 'hooksBaseUrl', 'claudeAccounts', 'codexAccounts', 'litellm', 'address', 'paths', 'readyUrl', 'accountId', 'zoneId', 'hostname' have no descriptions. LLMs cannot determine what each parameter controls or what format is expected.
Output schemas are undocumented. No tool specifies what fields it returns, what types they are, or how to chain results to downstream tools. LLMs cannot plan multi-step workflows or extract required IDs for follow-up calls.