{"id":51007998,"url":"https://github.com/Necmttn/ax","last_synced_at":"2026-06-22T13:00:40.398Z","repository":{"id":360203597,"uuid":"1232710515","full_name":"Necmttn/ax","owner":"Necmttn","description":"the agent experience layer · observability + memory for AI coding agents (Claude Code + Codex) · local-first, typed, yours","archived":false,"fork":false,"pushed_at":"2026-06-17T06:58:47.000Z","size":25295,"stargazers_count":28,"open_issues_count":23,"forks_count":6,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-17T07:21:04.898Z","etag":null,"topics":["agent-memory","agent-observability","ai-agents","bun","claude-code","codex","developer-tools","effect-ts","evidence-graph","llm-observability","surrealdb","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Necmttn.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-08T07:34:30.000Z","updated_at":"2026-06-17T06:58:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Necmttn/ax","commit_stats":null,"previous_names":["necmttn/ax"],"tags_count":40,"template":false,"template_full_name":null,"purl":"pkg:github/Necmttn/ax","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Necmttn%2Fax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Necmttn%2Fax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Necmttn%2Fax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Necmttn%2Fax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Necmttn","download_url":"https://codeload.github.com/Necmttn/ax/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Necmttn%2Fax/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34649822,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-memory","agent-observability","ai-agents","bun","claude-code","codex","developer-tools","effect-ts","evidence-graph","llm-observability","surrealdb","typescript"],"created_at":"2026-06-20T23:00:29.593Z","updated_at":"2026-06-22T13:00:40.388Z","avatar_url":"https://github.com/Necmttn.png","language":"TypeScript","funding_links":[],"categories":["LLM and Agent Observability","Servers"],"sub_categories":["Monitoring \u0026 Observability"],"readme":"# ax\n\n###### the retro loop for AI coding agents\n\n**Make your agent learn.**\nTurn every agent session into a better next run.\n\n---\n\nEvery sub-agent you spawn finishes its work and disappears. Whatever it\nfigured out - which command failed three times before the right one, which\nfile actually mattered, which approach to skip - dies with it. The next\nsub-agent rediscovers it from scratch. Your own next session does too.\n\n`ax` watches every session your harness runs, spots the mistakes it\nrepeats, and turns them into small, repo-specific fixes you review and\napply - one at a time.\n\nUnder the hood, it's the loop that closes before the session ends. A Stop hook fires\nat session-end (main or sub-agent), asks the agent for a structured retro\n(*tried · worked · failed · next*), and indexes the result as a typed\nexperiment in a local graph. Friction patterns become proposals you\ntriage. Accepted proposals become experiments with t+7 / t+30 / t+90\nverdicts. The next session reads what worked.\n\n\u003e *What did this sub-agent learn? Which experiments are still open?\n\u003e Which skills earned their keep? What did that branch cost in tokens?*\n\u003e `ax` answers these by reading what already happened.\n\n![ax · the retro loop for AI coding agents](docs/images/og.png)\n\n## 60 seconds in\n\n```bash\ncurl -fsSL ax.necmttn.com/install | sh\nPATH=\"$HOME/.local/bin:$PATH\" ax setup   # agent skills + first ingest + doctor\n```\n\nOr skip the terminal entirely - paste this into Claude Code / Codex and your\nagent installs ax, ingests your history, labels your skills, and tells you\nwhich ones to actually use:\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003ethe setup prompt - give this to your agent\u003c/strong\u003e\u003c/summary\u003e\n\n\u003c!-- MANUAL MIRROR of AGENT_ONBOARDING_WITH_INSTALL in packages/onboarding-prompt/src/index.ts\n     (README can't import TS). If you change the prompt, regenerate this block:\n     bun -e \"import('@ax/onboarding-prompt').then(m=\u003eprocess.stdout.write(m.AGENT_ONBOARDING_WITH_INSTALL))\" --\u003e\n\n```text\nSet up ax for me, end to end. ax is a local agent-experience graph over my Claude Code + Codex history - it runs locally and I review every change.\n\nPRIVACY (read first, so you can answer if I ask whether this is safe to run): ax is fully local. Ingest reads my transcripts, git history, and tool calls into a SurrealDB on 127.0.0.1 - nothing is uploaded, there is no account, no cloud, and no outbound call at ingest. The ONLY thing that can ever leave my machine is `ax profile publish`, which is opt-in and consent-gated: it shares an aggregates-only JSON (counts, day streaks, model split, skill/hook names, taste-pattern summaries) to a public gist I control - NEVER transcript content, code, project names, or file paths. `--no-cost` strips the dollar figures too, and `ax profile unpublish` deletes it. Do NOT run `ax profile publish` as part of this setup. If I ask about privacy or data handling, answer from these facts; it's AGPL-3.0, so you can also read the source to confirm.\n\nA note from Neco (ax's founder): ax is early and I'm hungry for feedback - every bug, wrong number, or rough edge you send back makes it sharper for everyone. Please don't hold back; if something's off, help me fix it.\n\nCONTRIBUTE-BACK (do this whenever a trigger below fires; never publish anything without showing it to me first and getting an explicit yes): Triggers - a step fails; a fact you report looks wrong or surprising to me; you spot a clear bug or improvement in ax itself. When one fires: ask me 2-3 sharp questions to pin down what I expected, which command/hook/agent is involved, and how often - enough for a repro. Then draft a GitHub issue for github.com/Necmttn/ax, show me the full draft, and on my yes file it via `gh` (the ax-repo skill). If a session is the evidence, run `ax share --dry-run` first, show me the redacted gist, and only publish with `ax share` on my yes - then link it in the issue.\n\n1. INSTALL - run `curl -fsSL ax.necmttn.com/install | sh` to install the ax CLI. Reference: https://ax.necmttn.com/docs\n\n2. INGEST MY HISTORY - first run `ax ingest --dry-run` and tell me, in plain words, how long a full backfill will take. Then start the ingest in the BACKGROUND so we can keep working: run `ax ingest` as a background job with AX_PROGRESS=plain, and watch its output for progress and completion. Tell me I can watch it fill live in the dashboard - run `ax serve` and open http://127.0.0.1:1738. If it fails or lands zero data after finishing, that's a CONTRIBUTE-BACK trigger. When the ingest finishes, summarize what landed: total sessions, turns, and the top skills/tools I actually use.\n\n3. VERIFY - run `ax doctor`. If anything isn't ok, diagnose and fix it, then re-run until it is. If the cause is a bug in ax itself (not my environment), that's a CONTRIBUTE-BACK trigger.\n\n4. REALITY CHECK - show me the headline facts (sessions, turns, top skills + tools), then ask: does this match how I actually work? Heads-up: verification often hides inside PR commands, hooks, and subagents, so if a number reads lower than my gut says, that's a likely miss. If I disagree with any fact, that's a CONTRIBUTE-BACK trigger - my disagreement is the repro.\n\n5. LABEL what ax can't classify - run `ax skills classify`. It writes one `.ax/tasks/classify-\u003cskill\u003e.md` brief per skill I use but ax can't role-tag. For each brief: read the skill, decide its role(s), and fill the YAML frontmatter at the top (`primary_role:` is required; `secondary`, `confidence`, `rationale` are optional). Run `ax roles` to see labels already in use. Then run `ax skills lint` to apply them. If it says \"no unclassified skills\", that's fine. Then show `ax skills weighted` and `ax skills config`; tell me which skills you labeled and why, and flag anything ax marked orphan or out-of-scope.\n\n6. BUILD MY PROFILE + AGENT WRAPPED - first run `ax profile show` for a quick text fingerprint (sessions, active days + streak, model split, top skills, installed hooks, workflow arcs, taste patterns) and read it back to me in a few sentences. THEN build my Agent Wrapped deck, because the dashboard's Wrapped tab stays BLANK until you do - ingest does not fill it. Run `ax wrapped generate`; it writes a brief to `.ax/tasks/wrapped-generate-\u003cdate\u003e.md`. Follow that brief: mine my graph for the answers and assemble the recap cards as `{ \"cards\": [{question, headline, body, sensitivity?}] }` JSON, then publish them with `ax wrapped publish --file=\u003cyour-cards.json\u003e` (or pipe the JSON on stdin). Now my Wrapped deck is populated - tell me to run `ax serve` and open http://127.0.0.1:1738 to see it. All of this stays LOCAL: `ax profile show` and `ax wrapped publish` write only to my own machine and upload nothing. Do NOT run `ax profile publish` (that is the one command that leaves my machine).\n\n7. GATHER MY INSIGHTS IN PARALLEL - the three areas below are independent and only READ the local graph, so fan them out instead of running them one by one: dispatch one subagent per area, all at once (cap ~3 concurrent - they share one local SurrealDB). Give each subagent your MOST CAPABLE / strongest-reasoning model - do NOT route these down to a cheap model. This is a one-time setup and the commands can error or return surprising output, so I want an agent that can actually diagnose, retry, and interpret what it sees, not just paste noise back. Brief each one clearly: its area, the exact commands to run, and what to return - the raw output plus a tight read of what stands out (the biggest number, anomalies, anything that looks broken). The areas: (a) SPEND - `ax cost sessions`, `ax cost routability`, `ax dispatches --candidates`; (b) FRICTION - `ax improve recommend`, `ax insights friction`, `ax insights tools`; (c) HISTORY (run inside one of my git repos) - `ax sessions here --days=30`, `ax recall \"\u003ca topic worth searching\u003e\"`. When all three return, synthesize across them for me: my single biggest cost driver and the largest concrete saving, the top 1-2 fixes worth accepting and why (if I say yes, run `ax improve accept \u003cid\u003e` then `ax improve lint`), and one genuinely useful thing from my history.\n\n8. GIVE ME A NEXT STEP - recommend 1-2 under-used skills you'd reach for based on what you saw, then end with a concrete CTA: the exact command or prompt I should run next, and what outcome it will produce.\n```\n\n\u003c/details\u003e\n\nThen ask the graph things you couldn't ask before:\n\n```bash\nax recall \"auth bug\"          # full-text recall across every past session\nax skills taste               # which skills earned their keep\nax costs for --branch main    # what a branch cost in tokens\nax sessions metrics           # graph-derived session health\nax share \u003csession-id\u003e         # publish a session anyone can read\nax serve                      # live dashboard at http://127.0.0.1:1738\n```\n\nRequires Bun ≥ 1.3 and SurrealDB ≥ 3.0. macOS-first; Linux works for ingest\nand CLI (no launchd reactivity). Dev install, schema, queries, benchmarks:\n[`docs/development.md`](docs/development.md).\n\n## Every harness, one graph\n\nFive harnesses - Claude Code, Codex, Pi, OpenCode, Cursor - plus installed\nskills, local git history, and GitHub PRs with their reviews and checks, all\ningested into one local SurrealDB graph: sessions, turns, tool calls, plans,\nskills, commits, files, friction, compaction, derived signals. Ingest is a\nstaged Effect pipeline; unchanged sources are skipped, so re-ingest takes\nseconds. A launchd watcher keeps it current as you work. Everything runs on\n`127.0.0.1` - no network round-trip, no third party.\n\nSignals are normalized across harnesses: \"context ran out and got summarized\"\nis one queryable compaction event whether it came from Claude Code or Codex.\nThe pipeline in one line: **every event → typed graph → ranked interventions**.\n\n```mermaid\nflowchart LR\n  cc[\"~/.claude/projects/\u003cbr/\u003eClaude transcripts\"]\n  cx[\"~/.codex/sessions/\u003cbr/\u003eCodex transcripts\"]\n  pi[\"~/.pi/agent/sessions/\u003cbr/\u003ePi transcripts\"]\n  oc[\"OpenCode + Cursor\u003cbr/\u003eSQLite stores\"]\n  sk[\"installed skills\u003cbr/\u003e(.claude, .agents, plugins)\"]\n  g[(\"local git history\")]\n  gh[\"GitHub PRs\u003cbr/\u003ereviews + checks\"]\n\n  cc --\u003e ingest\n  cx --\u003e ingest\n  pi --\u003e ingest\n  oc --\u003e ingest\n  sk --\u003e ingest\n  g  --\u003e ingest\n  gh --\u003e ingest\n\n  ingest[\"axctl ingest\u003cbr/\u003e(Effect pipelines)\"] --\u003e db\n  db[(\"the ax graph\u003cbr/\u003esession · turn · tool_call · skill · plan\u003cbr/\u003erepository · checkout · commit · file\u003cbr/\u003efriction · diagnostic · compaction · insight\")]\n\n  db --\u003e cli[\"axctl CLI\u003cbr/\u003erecall · skills · insights · evidence\"]\n  db --\u003e dash[\"axctl serve\u003cbr/\u003elive dashboard + studio\"]\n  db --\u003e agent[\"agent skill + ax mcp\u003cbr/\u003eproject context · verify · harness\"]\n```\n\n## Recall every session you ever ran\n\nFull-text BM25 search across turns, commits, and skills - milliseconds, local:\n\n```text\n$ ax recall \"auth middleware\"\n4 matches\n\n2026-05-23T15:19  codex      user       acme-app   alright lets commit auth related work for now\n2026-05-23T14:51  codex      assistant  acme-app   Added the HealthOS just setup. You can now run from repo root: just health dev …\n2026-05-23T14:41  codex      assistant  acme-app   Findings: apple-auth.service.ts accepts extra Apple audiences from ambient env …\n2026-05-19T11:08  claude     user       ax         the auth middleware retry loop - we still see exit-code 1 from bun check after …\n```\n\n## Know which skills earned their keep\n\nComposite score over the last 30 days, across every installed skill:\n\n```text\n$ ax skills taste --limit=8\nskill                              scope        score    7d     30d    total\ncodex:exec_command                 codex-tool  40902.5  1,124  30,500  40,389\ncodex:write_stdin                  codex-tool   6,957     166   4,932   6,451\ncodex:rescue                       command        781       0     389     605\ncodex:update_plan                  codex-tool   766.5      14     338     391\nsimplify                           user         718.5       5      89     101\ncodex:wait_agent                   codex-tool     713       3     497     507\ncodex:spawn_agent                  codex-tool     647       2     439     442\nsuperpowers:systematic-debugging   plugin         26.5      0       6       6\n\n(8 / 288 skills shown)\n```\n\nAnd which tools fail most often, so you know what to skill-up around:\n\n```text\n$ ax insights tools --limit=5\nname           failure_count   exit_code   last_seen\nwrite_stdin    647             1           2026-05-23T14:34\nEdit           483             -           2026-05-23T05:14\nSkill          475             -           2026-05-05T13:34\nexec_command   421             1           2026-05-22T18:50\nBash           318             1           2026-05-21T22:12\n```\n\n31 read-only graph views in `ax insights`; full list in\n[`docs/insights-cli-reference.md`](docs/insights-cli-reference.md).\n\n## Put a price on everything\n\nToken cost resolved through model pricing rows - prompt, output, cache\nread/write, estimated USD - queryable by session, text, commit, or branch:\n\n```bash\nax costs summary --since=7              # by provider/model, last 7 days\nax costs for --query \"live-traces\"      # cost of sessions matching turn text\nax costs for --commit 464c80b           # cost of the sessions behind a commit\nax costs for --branch feat/share        # cost of a whole feature branch\n```\n\nSo \"what did that refactor cost\" has an answer with a dollar sign on it.\n\n## Route the expensive model where it earns its keep\n\nYour frontier model burns 3-10x cheaper-model rates on mechanical subagent\nwork unless you route it. ax measures the leak, nudges at dispatch time, and\nproves whether the routing worked:\n\n```bash\nax cost split --days=7              # main loop vs subagents, by model\nax dispatches --candidates          # model-less dispatches + est savings\nax routing tune                     # mine YOUR history for new routing classes\nax routing compile                  # regenerate the table (user classes preserved)\nax hooks install ~/.ax/hooks/route-dispatch.ts --providers=claude\n```\n\nThe `route-dispatch` hook warns when a mechanical dispatch forgets an explicit\nmodel; the `efficient-dispatch` skill (via `npx skills add Necmttn/ax`) teaches\nthe orchestration pattern; `ax improve recommend` surfaces a proposal when\nmissed savings accumulate; `ax routing tune` mines new routing classes from\nyour own dispatch history (judgment work is never auto-routed - vet those via\n`--emit-brief`). One source of truth - `~/.ax/hooks/routing-table.json` -\nmeasured end to end. See [docs/design/cost-routing.md](docs/design/cost-routing.md).\n\n## Share a session like a gist\n\n```bash\nax share \u003csession-id\u003e\n# → https://ax.necmttn.com/s/\u003cowner\u003e/\u003cgist-id\u003e\n```\n\nExports the full session - subagent transcripts, harness hook fires, per-turn\npricing - sanitizes it, publishes it as a GitHub Gist, and serves it through a\nhosted viewer: unified tool-call cards, session timeline, cost rail, and a\nper-session poster image for the link unfurl. The data stays in your gist,\nunder your account; the viewer just renders it.\n\n## Watch your agents work\n\n`ax serve` runs the dashboard + studio over the same graph. The daemon knows\nitself: re-running `ax serve` while one is already up prints the dashboard URL\ninstead of a port error, and `ax serve status` / `ax serve stop` find and\nmanage the running instance (pidfile + port probe, even for daemons started by\nolder versions):\n\n- **Transcript view** - tool call and result as one card, skill and image\n  turns folded, subagent spawns with their metrics.\n- **Session timeline** - highlights, segments, and events derived from the\n  graph, no LLM in the loop.\n- **Session canvas** - a semantic-zoom lineage graph of sessions and the\n  subagents they spawned: swimlanes, time-axis zoom up to 2000x, hover detail\n  in ~30ms.\n- **Live ingest** - trigger a run from the dashboard and watch stages stream;\n  refresh mid-run and it resumes where it was.\n- **Metrics** - `ax sessions metrics` and `ax signals` surface graph-derived\n  session health (fragility cascades, plan churn, tool retries), and\n  `ax sessions compare` puts two runs side by side.\n- **Harness doctor** - grades how well your setup is actually working;\n  every fix you apply moves the score.\n\n## Close the loop: grounded agent files\n\n![tried · worked · failed · next - the retro loop](docs/images/retro-loop.png)\n\nax recommends changes to your `AGENTS.md` / `CLAUDE.md` / skills - grounded in\nevidence from your own sessions - and tracks which lines came from it:\n\n```text\nsession ends           ax retro emit          # structured note: tried · worked · failed · next\nproposals derive       ax improve recommend   # ranked by confidence × recency × frequency\npick one               ax improve accept \u003cid\u003e # writes .ax/tasks/\u003cid\u003e.md - hand to your agent\nreconcile              ax improve lint        # marker ↔ DB ↔ task files\nverdict at +3/+10/+30  ax improve verdict --set=adopted|ignored|regressed|partial\nsessions               # session-count windows, not calendar days\n```\n\nEvery proposal carries its evidence trail (`ax improve show \u003cid\u003e`). Verdicts\nland on session-count windows, so a skill that stopped firing gets caught, not\nforgotten.\n\n## Author your own guards\n\nWrite a hook once in typed TypeScript, prove it against your own history, run it in Claude Code and Codex.\n\n```bash\nax hooks init                                    # scaffold ~/.ax/hooks (TypeScript, @ax/hooks-sdk)\nax hooks backtest ~/.ax/hooks/my-guard.ts        # replay weeks of real tool calls through it first\nax hooks install ~/.ax/hooks/my-guard.ts --providers=claude,codex\nax hooks latency [--days=7] [--baseline=21]      # regression lens: recent vs baseline p95 per hook event\n```\n\n## Your agent can query all of this mid-session\n\nTwo integration paths, same graph:\n\n```bash\nnpx skills add Necmttn/ax           # agent skills: setup, retro, extract-workflow, dojo, …\nclaude mcp add ax -- ax mcp         # MCP server: read-only graph queries as tools\n```\n\nRecommended agent loop: `ax project context --json` before work (stack, recent\nfriction, verification commands), do the work, `ax project verify --json`\nbefore reporting done. For Codex, add `ax mcp` to `~/.codex/config.toml`. Tool\nlist and details: [`docs/cli.md`](docs/cli.md#mcp-server-tools).\n\n## Why an experience layer\n\nLLM agents are good at tasks. They're bad at remembering what happened.\nMemory tooling today is either a giant rolling context window (expensive,\nslow, lossy) or vague vector retrieval (no structure, no grounding in real\nevents).\n\n`ax` takes a different shape: a **typed graph of evidence** built from the\nagent's own logs. Three things fall out of that, and they're the three things\n\"agent experience\" actually means in practice:\n\n1. **Skill triage** - which of your installed skills get used, which never\n   fire, which correlate with stuck sessions.\n2. **Pre-flight grounding** - `ax project context` hands the next agent\n   stack info, recent friction, and verification commands.\n3. **Retro signal** - query the graph after a hard session: tool retries,\n   plan churn, file edit pairings. Feed it back into the next run.\n\n`AX` (agent experience) is what the agent perceives across sessions, reflects\non at the end of each, and turns into the next experiment. It is to AI coding\nagents what retros and post-mortems are to engineering teams - a structured\nreflection step that compounds. A longer take:\n[`docs/manifesto.md`](docs/manifesto.md).\n\n## Docs\n\n- [`docs/cli.md`](docs/cli.md) - full CLI reference, costs, improve, MCP tools\n- [`docs/manifesto.md`](docs/manifesto.md) - the missing layer in the agent stack\n- [`docs/language.md`](docs/language.md) - coined vocabulary, the AX glossary\n- [`docs/brand.md`](docs/brand.md) - design system + voice rules\n- [`docs/development.md`](docs/development.md) - local setup, schema, queries, benchmarks\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) - PR conventions, ground rules\n- [`CONTEXT.md`](CONTEXT.md) - domain glossary (Repository vs. Checkout vs. …)\n- [`docs/adr/`](docs/adr/) - architecture decisions\n\n## Community\n\nQuestions, feedback, or want to shape where ax goes next? Join the Discord:\n[discord.gg/E4R88Cvr5R](https://discord.gg/E4R88Cvr5R)\n\n## License\n\nIf it shapes your agent, you should be able to fork it.\n\n[AGPL-3.0-only](LICENSE) © 2025 Necmettin Karakaya. A\n[commercial license](docs/COMMERCIAL-LICENSE.md) is available for use that the\nAGPL doesn't permit - reach out via the Discord above.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNecmttn%2Fax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNecmttn%2Fax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNecmttn%2Fax/lists"}