agentleFS
filt3rrfilt3rr/vael/.github/copilot-instructions.md

vael

Copilot instructions5 starsChanged 6 months agoMITView on GitHub

Guidance for AI coding assistants working on this codebase. This is not Vael's runtime persona — for that, see vael_system_prompt.txt. The full ESI OpenAPI spec is at docs/esi-swagger.json (fetched by script/esi-swagger.sh). When researching, planning, or implementing ESI-related features, consult this file for endpoint paths, parameters, response schemas, and required scopes. VAEL is a Python MCP (Model Context Protocol) server that exposes 48 tools backed by EVE Online's ESI API, the Fuzzwork SDE SQLite mirror, and zKillboard. It is consumed by…

  • Reads credentials
  • Where files are headingNew Copilot instructions files have more rules about branches and pull requests, and fewer about code style.

    Of the Copilot instructions files we read, the 2,349 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.

The file

Show its rules and text

We split this copilot-instructions.md into the rules it gives an agent

13 rules. About 0 are common, 4 are distinctive, and 9 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈4

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  • could be automatic: a setting could enforce it
  1. Distinctive:

    When researching, planning, or implementing ESI-related features, consult this file for endpoint paths, parameters, response schemas, and …

    line 8
  2. Very specific:

    Tool registration: every public capability is an @mcp.tool() in server.py that delegates to a domain module.

    line 32
  3. Very specific:

    ESI access: always through ESIClient as an async context manager (async with ESIClient() as esi:).

    line 35
  4. Very specific:

    Add a test in tests/test_all_tools.py.

    line 44
  5. Very specific:

    Document it in docs/tools_reference.md.

    line 45
  6. Very specific:

    Run python tests/test_all_tools.py — it hits live ESI, SDE, zKillboard, and Discord.

    line 49
  7. Very specific:

    Never commit .env, tokens, or anything in data/.

    line 54
  8. Very specific:

    All third-party API access must include the configured EVE_USER_AGENT per CCP's ESI rules.

    line 56
  9. Distinctive:

    Do not add features that automate gameplay, inject into the EVE client, or violate CCP's EULA/ToS.

    line 57
  10. Distinctive:

    Don't refactor unrelated code while making a targeted change.

    line 61
  11. Distinctive:

    Don't add docstrings, type hints, or comments to code you didn't modify.

    line 62
  12. Very specific:

    Don't introduce new dependencies without checking requirements.txt for an existing equivalent.

    line 63
  13. Very specific:

    Don't hardcode character names, IDs, or pilot-specific config in source — that belongs in data/ or .env.

    line 64

≈ “Common” is an estimate: at least 1 in 5 of the 3,779 Copilot instructions files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
copilot-instructions.md

Copilot Instructions — VAEL Repository

Guidance for AI coding assistants working on this codebase. This is not Vael's runtime persona — for that, see vael_system_prompt.txt.

ESI API Reference

The full ESI OpenAPI spec is at docs/esi-swagger.json (fetched by script/esi-swagger.sh). When researching, planning, or implementing ESI-related features, consult this file for endpoint paths, parameters, response schemas, and required scopes.

What this repo is

VAEL is a Python MCP (Model Context Protocol) server that exposes 48 tools backed by EVE Online's ESI API, the Fuzzwork SDE SQLite mirror, and zKillboard. It is consumed by Claude Desktop, where a system prompt (vael_system_prompt.txt) turns the raw tools into the "Vael" persona. There are also two parallel processes: a tkinter game overlay (overlay.py) and a background notifier (notifier.py) that pushes Discord/overlay alerts.

Project layout

  • src/eve_agent/server.py — MCP server entrypoint registering all tools via @mcp.tool()
  • src/eve_agent/tools/ — domain modules: character.py, market.py, industry.py, skills.py, intel.py
  • src/eve_agent/esi_client.py — async ESI HTTP client (rate limits, retries, caching). Always use this; never hit ESI directly.
  • src/eve_agent/cache.py — SQLite cache that respects ESI Expires headers
  • src/eve_agent/sde.py — read-only queries against data/sde.sqlite
  • src/eve_agent/pilot_memory.py — JSON-backed cross-session memory at data/pilot_memory.json
  • src/eve_agent/event_engine.py + notifier.py + discord_alerts.py + overlay.py — the watch/alert pipeline
  • src/eve_agent/auth.py — EVE SSO OAuth2 + PKCE, tokens encrypted via OS keyring
  • tests/test_all_tools.py — single integration suite that hits live ESI; must pass before merging
  • docs/ — user-facing docs (scopes.md, configuration.md, tools_reference.md, pilot-profile.md)
  • vael_system_prompt.txt — canonical Vael persona (pasted into Claude Desktop project)

Conventions

  • Python 3.11+, async-first. All tool functions are async def.
  • Tool registration: every public capability is an @mcp.tool() in server.py that delegates to a domain module. Keep docstrings concrete — Claude reads them to decide when to call.
  • Generic wording in docstrings: refer to "the capsuleer" / "the pilot", not a specific character name. Character-specific data belongs in runtime memory or docs/pilot-profile.md, never hardcoded.
  • Logging: the @mcp.tool() wrapper in server.py logs each call as log.info("tool: <name>(...)"). Domain modules in tools/ define a module logger (log = logging.getLogger(__name__)) for their own use but do not need to re-log the tool entry.
  • ESI access: always through ESIClient as an async context manager (async with ESIClient() as esi:). Respect cache headers — don't bypass cache.py. Direct httpx usage is only acceptable for non-ESI endpoints (e.g. zKillboard in intel.py).
  • Errors: tools should return {"error": "..."} dicts rather than raising, so the MCP layer surfaces them cleanly to Claude. Internal helpers (e.g. _current_character_id()) may raise — the tool wrapper catches and formats.
  • Money/numbers: ISK is a float in raw ESI responses. Format with thousands separators in user-facing strings, keep raw values in API responses.
  • No write scopes. This project is read-only by ESI policy. Do not add tools that mutate game state.

Adding a new tool

  1. Implement the async function in the appropriate src/eve_agent/tools/<domain>.py module.
  2. Register it in server.py with @mcp.tool() and a one-line docstring that tells Claude when to call it.
  3. Add a test in tests/test_all_tools.py.
  4. Document it in docs/tools_reference.md.

Testing

  • Run python tests/test_all_tools.py — it hits live ESI, SDE, zKillboard, and Discord. Requires .env configured and tokens authenticated via python -m eve_agent.auth.
  • There is no mock layer; tests are integration-only by design.

Security & safety

  • Never commit .env, tokens, or anything in data/.
  • data/tokens.json.enc is encrypted via OS keyring; never log decrypted tokens.
  • All third-party API access must include the configured EVE_USER_AGENT per CCP's ESI rules.
  • Do not add features that automate gameplay, inject into the EVE client, or violate CCP's EULA/ToS.

What not to do

  • Don't refactor unrelated code while making a targeted change.
  • Don't add docstrings, type hints, or comments to code you didn't modify.
  • Don't introduce new dependencies without checking requirements.txt for an existing equivalent.
  • Don't hardcode character names, IDs, or pilot-specific config in source — that belongs in data/ or .env.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.