elnora-platform

Use when the user asks about Elnora platform, Elnora AI, bioprotocol generation, platform API, elnora projects, elnora tasks, elnora files, protocol generation, platform search, elnora orgs, elnora fo

SKILL.md

GitHub

Elnora Platform CLI

Route Elnora Platform queries to the correct sub-skill. Load only what is needed.

Tool Access

Elnora is available via two methods. Use whichever is configured.

Option A — CLI via Bash (preferred)

Run commands via your Bash/Shell tool as elnora <group> <action> .... Verify with elnora --version. CLI uses ~5× fewer tokens than MCP.

Option B — MCP tools (when CLI isn't installed)

Look for tools prefixed mcp__elnora__ in your available tools. Each domain-specific sub-skill (elnora-projects, elnora-tasks, etc.) has an MCP Tool Names table showing the mapping from CLI commands to MCP tool names.

If neither is available, tell the user to install one:

  • CLI: curl -fsSL https://cli.elnora.ai/install.sh | bash (macOS/Linux) or irm https://cli.elnora.ai/install.ps1 | iex (Windows)
  • MCP: claude mcp add elnora --transport http --scope user https://mcp.elnora.ai/mcp then /mcp to authenticate.

Never fabricate tool names. This skill routes to sub-skills; each sub-skill lists its valid commands and their MCP equivalents.

Troubleshooting

If anything looks wrong — auth errors, unexpected hosts, or connectivity failures — run elnora doctor first. It reports the actual API / AI-server / MCP hosts, auth state, version, and connectivity. Run elnora config show to print the resolved endpoints and active profile. Do not guess hostnames or URLs.

Invocation

CLI="elnora"

Global flags go BEFORE the subcommand (recommended, always works):

$CLI --compact projects list            # recommended
$CLI projects list --compact            # also works for most commands

Global Flags

Flag Effect
--compact Minified JSON — always use for agent workflows
--output <json|csv> Output format (default: json)
--fields "id,name" Return only these fields
--profile <name> Named profile (default: default). Set with auth login --api-key <KEY> --profile <name>
--json Force JSON output

Updates

On first use in a session, run elnora update to check for updates. If an update is available, inform the user and follow the printed instructions to update.

Auth

Requires ELNORA_API_KEY environment variable (prefix: elnora_live_), ELNORA_MCP_API_KEY, or a saved profile in ~/.elnora/profiles.toml.

$CLI --compact auth status
# -> {"profile":"default","authenticated":true,"projectCount":N}

Get keys: platform.elnora.ai > Settings > API Keys

Routing Table

Need Sub-skill Trigger keywords
List/get/create/update/archive projects, manage members elnora-projects project, workspace, create project, members, add member
Create/manage/message tasks, protocol generation elnora-tasks task, protocol, send message, conversation, generate
Browse/read/upload/version/fork/share/move files elnora-files file, content, version history, upload, download, fork, working copy, share file, move file
Find tasks or files by keyword elnora-search search, find, query
Browse/create/rename/move/delete/share Knowledge Base folders elnora-folders folder, KB folder, create folder, move folder, share folder
Approve/reject Knowledge Base auto-tidy proposals elnora-review review queue, KB review, approve, reject, auto-tidy
Org management, members, billing, invitations, member directory, auto-tidy, shared library elnora-orgs organization, org, billing, invite, member directory, auto-tidy, library
Auth, API keys, account, health, diagnostics elnora-admin login, logout, profiles, api key, health, account, feedback, audit, completion
Feature flags (SystemAdmin) elnora-admin feature flag, flags, set flag, list flags
What can the Elnora Agent do? (tools, search, memory) elnora-agent agent capabilities, agent tools, what can agent do

Positional Argument Convention

Required string fields ending in Id (e.g. taskId, projectId, fileId) become positional arguments. Everything else becomes a flag.

elnora tasks get <task-id>              # taskId -> positional
elnora tasks list --project <UUID>      # project -> flag (doesn't end in "Id")
elnora files fork <file-id> --target-project <UUID>  # fileId -> positional, targetProject -> flag

Rule: positional if and only if the field is: required + not boolean + no enum choices + key ends in "Id".

ID Format

All IDs are UUIDs: bfdc6fbd-40ed-4042-9ea7-c79a5ec90085. Invalid format exits 1 with a validation error to stderr.

Exception: account get and account update use userId which accepts any string (typically an integer like 42).

Pagination

List endpoints return:

{"items":[...],"page":1,"pageSize":25,"totalCount":N,"totalPages":N,"hasNextPage":true,"hasPreviousPage":false}

Use --page N --page-size N (max 100). Check hasNextPage to paginate.

Message endpoints use cursor-based pagination: check hasMore and pass --cursor <nextCursor>.

Error Contract

Errors -> stderr, exit code > 0:

{"error":"message","code":"AUTH_FAILED","suggestion":"how to fix"}
Code Exit Action
AUTH_FAILED 3 Check ELNORA_API_KEY env var or profile
NOT_FOUND 4 Verify the UUID
VALIDATION_ERROR 2 Check parameters
RATE_LIMITED 5 Wait and retry (see Rate Limits below)
SERVER_ERROR 6 Retry later
ELNORA_ERROR 1 Unexpected — report bug

Rate Limits

HTTP 429 on limit. Check the Retry-After header for seconds to wait.

Context Limit Window
API key (CLI/agent default) 200 req 1 min
Agent processing endpoints 100 req per task 1 min
AI processing (tasks send, protocol generate) 20 req 1 min
Auth endpoints (login, register) 5 req 1 min
Global fallback (per IP) 1000 req 1 min

Agent strategy: On exit code 5, read Retry-After from stderr if available, otherwise wait 60 seconds before retrying. Do not retry in a tight loop.

File Upload Limits

Constraint Value
Max file size 100 MB
Max filename length 255 characters
Max files per batch upload 50
Accepted MIME types Unrestricted (any type)
Upload presigned URL expiry 15 minutes
Download presigned URL expiry 5 minutes

Common Workflow

Projects contain tasks and files. Typical flow:

  1. --compact --fields "id,name" projects list -> list projects, pick one by name
  2. tasks create --project <ID> --message "..." --stream -> create task and stream the agent response
  3. tasks send <TASK_ID> --message "..." --stream -> send follow-up and stream response
  4. tasks messages <TASK_ID> -> read conversation history (or use --wait instead of --stream in steps 2-3)
  5. files list --project <ID> -> browse generated outputs
  6. files content <FILE_ID> -> read a protocol file

Project ID: List projects once (step 1), pick the one matching the user's context, and reuse the ID for all subsequent commands. Don't re-list projects for every task.

See elnora-tasks skill for full response retrieval details (--stream, --wait, MCP behavior).

All Command Groups

elnora account      Manage user account, agreements, and legal docs
elnora api-keys     Manage API keys and creation policy
elnora audit        View audit logs
elnora auth         Manage authentication
elnora completion   Generate shell completion script
elnora doctor       Run diagnostics (API, auth, version, config checks)
elnora feedback     Submit feedback
elnora files        Manage files (share, move, versions, batch upload)
elnora flags        Manage global feature flags (SystemAdmin)
elnora folders      Manage Knowledge Base folders (browse, share)
elnora health       Check platform reachability
elnora library      Manage organization library
elnora mcp          Run as MCP server (--http or --stdio)
elnora open         Open platform pages in browser
elnora orgs         Manage organizations (members, directory, set-autotidy, billing)
elnora projects     Manage projects
elnora review       Approve/reject Knowledge Base review-queue items
elnora search       Search tasks, files, and file content
elnora setup        Configure AI coding tools (Claude Code, Cursor, VS Code, Codex)
elnora tasks        Manage tasks
elnora update       Check for updates (use --install to apply)
elnora whoami       Show current profile and org