Skip to content

Search these docs from your AI tool

  • Antigravity
    {
      "mcpServers": {
        "edisyl-docs": {
          "serverUrl": "https://docs.edisyl.com/mcp"
        }
      }
    }
  • Claude CodeCLI
    claude mcp add edisyl-docs https://docs.edisyl.com/mcp --transport http --scope user
  • CodexCLI
    codex mcp add --url https://docs.edisyl.com/mcp edisyl-docs
  • Cursor
    {
      "mcpServers": {
        "edisyl-docs": {
          "type": "http",
          "url": "https://docs.edisyl.com/mcp"
        }
      }
    }
  • Gemini CLI
    gemini mcp add --transport http edisyl-docs https://docs.edisyl.com/mcp
  • Goose
    {
      "extensions": {
        "edisyl-docs": {
          "enabled": true,
          "name": "edisyl-docs",
          "type": "streamable_http",
          "uri": "https://docs.edisyl.com/mcp",
          "envs": {},
          "env_keys": [],
          "headers": {},
          "description": "",
          "timeout": 300,
          "bundled": null,
          "available_tools": []
        }
      }
    }
  • JetBrains AI Assistant
    {
      "mcpServers": {
        "edisyl-docs": {
          "type": "http",
          "url": "https://docs.edisyl.com/mcp"
        }
      }
    }

    Paste into Settings → Tools → AI Assistant → Model Context Protocol → Add → As JSON. Direct file writing isn’t supported — JetBrains stores this per-version as XML.

  • Junie (JetBrains)
    {
      "mcpServers": {
        "edisyl-docs": {
          "url": "https://docs.edisyl.com/mcp"
        }
      }
    }
  • OpenCode
    {
      "mcp": {
        "edisyl-docs": {
          "type": "remote",
          "url": "https://docs.edisyl.com/mcp"
        }
      }
    }
  • VS CodeCLI
    code --add-mcp '{"name":"edisyl-docs","type":"http","url":"https://docs.edisyl.com/mcp"}'
  • Windsurf
    {
      "mcpServers": {
        "edisyl-docs": {
          "serverUrl": "https://docs.edisyl.com/mcp"
        }
      }
    }

    Supports both stdio and native HTTP connections.

Declaring objectives

Closing gaps is reactive: an ask falls short, and you route the miss. Objectives are the standing version of the same instinct: write down what a pack must be able to answer before anyone asks it, and let the pack converge on its own. Each objective is a question the pack owns; its exercise loop asks it, records which tier answered, and keeps working until the answer is cheap.

The main entry point is paste-a-blob. People develop their questions somewhere else (a doc, a meeting note, a Claude session) and hand the whole thing over; one LLM call splits it into questions, extracts any inline hints, and topics each one.

Terminal window
edisyl pack objectives structure growth-metrics -f questions.md --dry-run # preview — nothing is written
edisyl pack objectives structure growth-metrics -f questions.md # create them
pbpaste | edisyl pack objectives structure growth-metrics
edisyl pack objectives structure growth-metrics --text "how many swaps last week? and by chain?"

When the user doesn’t yet know what to ask, work from the data instead:

Terminal window
edisyl pack objectives examples growth-metrics --limit 10 # drafts sample questions, creates nothing
edisyl pack objectives brainstorm growth-metrics --seed "revenue and churn" # a chat session proposing candidates

examples reads one data source’s catalog and returns a menu to pick from. brainstorm opens a chat session where an agent proposes candidates against that schema. Neither creates anything; approve what survives with add:

Terminal window
edisyl pack objectives add growth-metrics --question "How many active wallets last week?" --topic activity \
--hint "active = a swap in 30d; use the wallet_daily table"

A hint is human knowledge the pack can’t guess, the same instinct as teach, aimed at one question.

Terminal window
edisyl pack objectives list growth-metrics # every objective: status, asks, last tier
edisyl pack objectives list growth-metrics --status pending # what hasn't landed yet
edisyl pack objectives asks <objective-id> # the timeline for one

asks is the one to read: every attempt the pack made at that question, oldest first.

ASKED STATUS TIER PLANE DURATION IN OUT COST
2026-08-13 21:28:50 resolved deep data 102.6s 647252 11039 $0.933
2026-08-13 21:43:32 resolved rank data 881ms — — —

That is convergence in two rows. The first attempt went to the deep tier, a full agentic navigation costing 102 seconds and 93 cents. Fifteen minutes later the same question came back from rank in under a second, because the pack had learned the route and cached it. That’s the whole payoff of declaring objectives: you pay for the walk once, and every later ask rides it.

Terminal window
edisyl pack objectives get <objective-id>
edisyl pack objectives update <objective-id> --hint "<better steering>"
edisyl pack objectives archive <objective-id> # soft delete; stops the exercise loop

An objective’s status stays pending until answerable, then answered. blocked means the pack gave up; read asks for the reason beneath the table, or take blockedReason from get <objective-id> -j. Archive a bad objective rather than leaving it pending: while it’s live it keeps buying deep navigations.

See pack objectives for the full command reference.

Report incorrect code

Please provide a detailed description of the incorrect code.