{"id":28907293,"url":"https://github.com/killthebuddh4/arcangel","last_synced_at":"2026-04-24T20:34:06.885Z","repository":{"id":249326465,"uuid":"828309553","full_name":"killthebuddh4/arcangel","owner":"killthebuddh4","description":"An agent and programming language(s) for solving ARC-AGI","archived":false,"fork":false,"pushed_at":"2024-08-13T20:59:43.000Z","size":3348,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-14T07:51:59.042Z","etag":null,"topics":["agent","ai","anthropic","arc-agi","llm","openai","programming-language"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/killthebuddh4.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"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}},"created_at":"2024-07-13T18:31:13.000Z","updated_at":"2024-12-25T17:29:08.000Z","dependencies_parsed_at":"2024-08-12T23:54:15.110Z","dependency_job_id":null,"html_url":"https://github.com/killthebuddh4/arcangel","commit_stats":null,"previous_names":["killthebuddh4/arcangel"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/killthebuddh4/arcangel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/killthebuddh4%2Farcangel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/killthebuddh4%2Farcangel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/killthebuddh4%2Farcangel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/killthebuddh4%2Farcangel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/killthebuddh4","download_url":"https://codeload.github.com/killthebuddh4/arcangel/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/killthebuddh4%2Farcangel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32239813,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","ai","anthropic","arc-agi","llm","openai","programming-language"],"created_at":"2025-06-21T15:11:31.214Z","updated_at":"2026-04-24T20:34:06.879Z","avatar_url":"https://github.com/killthebuddh4.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Arcangel\n\nArcangel is a programming language and agent for solving [ARC](https://arcprize.org/arc). It's a first step on a path to the world's first [system 2 compiler](https://gadfly.run) and, eventually, AGI.\n\n# Language\n\n_The language will certainly change as we experiment with various tradeoffs between expressiveness, compactness, etc._\n\nSo, `arcangel` is a language for solving ARC, so it's fundamentally about colored grids. But also the colors produce structure, so we need something more flexible than just grid. Let's just brainstorm some primitives:\n\n- field\n- point\n- row\n- column\n- boundary\n- line\n- ray\n- shape\n- color\n- direction\n- predicate\n- region\n- set\n- box\n- coordinate\n\nWhat about LLM primitives like maybe \"system\" or \"message\" or \"natural language\"? Or conversation?\n\n- system\n- message\n- model\n- language\n- conversation\n- agent\n\nOr maybe the agent is another language altogether?\n\nWhat about ARC primitives that aren't about the Grid?\n\n- task\n- pair\n- rule\n\nWhat about primitives for exploration?\n\n- fork\n- merge\n- select\n- expand\n- generate\n- evolution\n- simulate\n- commit\n\nIs this another language as well?\n\n- git\n- agent\n- arc\n\nAnd these languages interact with eachother?\n  \n\n---\n\nSo I think we have\n\n- Point := (x, y, energy)\n- Set := Predicate\n\n- Predicate (Grid, Point) -\u003e Boolean\n- Property Grid -\u003e Boolean\n- Relation Grid, Grid -\u003e Boolean\n- Invariant Grid[] -\u003e Boolean\n\nPoint, Set\n\n1P:1P\n1P:NP\n1P:1S\n1P:NS\nNP:1P\nNP:NP\nNP:1S\nNP:NS\n1S:1S\n1S:NS\n1S:1P\n1S:NP\nNS:1S\nNS:NS\nNS:1P\nNS:NP\n\nthe set of all points within 1 unit from (x, y)\n\nthe set of all blue points\n\npredicate\n  isRay\nconditions\n  isField\n  isBlue\n  isGood\ndescription\n  \"\"\nsignature\n  (set, point)\nfunction\n  // do stuff\nend\n\nNW    N    NE\nW  (x, y)  E\nSW    S    SE\n\n\niter ray\n  (point, dir) =\u003e {\n    //\n  }\nend\n\nwith\n  X\nray\n  (2, 3), NE\ndo |point|\n  // do stuff\nend\n\n\nkw\n  exp\n  exp\n  exp\nend\n\nkw  \n  exp\nname\n  exp\nname\n  exp\nend\n\n(a: Type, b: Type, c: Type): Type =\u003e {\n  return ...\n}\n\n\ndef\nset\nfunc\ncall\nstruct\nsequence\nread\nwrite\nmap\nfilter\nreduce\nif\nand\nor\nswitch\n\nswitch\n  if \n    x === 10\n  then\n    ...\n  else\n    ...\n  end\n\n  if \n    x === 10\n  then\n    ...\n  else\n    ...\n  end\n\nend\n\n\ncase y =\u003e y \u003c 0:\n  ...\ncase z =\u003e z \u003e 0:\n  ...\nend\n\nmap\n  numbers\n\n  do\n\n\n  end\nend\n\nfilter\n  numbers\n\n  do\n\n\n  end\nend\n\nreduce\n  numbers\n\n  func\n\n  end\n\n  init\nend\n\n\n\n\n\ndef\n  X\nwith:\n  Field\nselect:\n  (Field, P) -\u003e boolean\n  (Field, P) -\u003e boolean\nend\n\nkw1 exp\nkw2 exp\nkw3 exp\nend\n\nSIGNATURE IS DIFF\n\nfn signature\n\nend\n\nCALL DATA IS DIFF\n\ndef\n  x\n  exp\nend\n\nset\n  x\n  exp\nend\n\nfunc signature\n  ...\nend\n\ncall f\n  a exp\n  b exp\n  ...\nend\n\nstruct\n  key k value v end\n  key k2 value v2 end\n  ...\nend\n\nsequence\n  exp \n  exp\n  exp\n  ...\nend\n\nread\n  o\n  v\nend\n\nwrite\n  o\n  k\n  v\nend\n\n\n\n\n@ name\n  a1 exp1\n  a2 exp2\n  a3 exp3\nend\n\nseq\n  exp\n  exp\n  exp\n  exp\n  exp\n  ...\nend\n\ndef\n  obj\nstruct\n  key\n    x\n  value\n    ...\n  end\n\n  key\n    y\n  value\n    ...\n  end\nend\n\nread x v end\n\nwrite x vvv end\n\nstruct\n  key\n    x\n  value\n    y\n  end\n\n\n  key\n    x\n  value\n    z\n  end\nend\n\nsequence\n\nread\n  o\nkey\n  k\nend\n\nwrite\n  o\nkey\n  y\nvalue\n  ...\nend\n\nread\n  structObj or seqObj\ndo\n  key\n    whatever\n  value\n    thing\n  end\n\n  key\n    other\n  value\n    other value\n  end\nend\n\nwrite\n  structObj or seqObj\ndo\n  key\n    whatever\n  value\n    thing\n  end\n\n  key\n    other\n  value\n    other value\n  end\nend\n\n\n\ndef\n  name\ndo\n  ...\nend\n\nkw exp\nkw exp\nkw exp\nkw exp\n...\n\ndo\n  exp\n  exp\n  exp\n  ...\nend\n\nand\n  exp\n  exp\n  exp\n  ...\nend\n\nor\n  exp\n  exp\n  exp\n  ...\nend\n\n\n\ndo\n  def\n    piped\n  do\n    map\n      y\n    do\n      double\n    end\n  end\n\n  let\n    piped\n  do\n    map\n      piped\n    do\n      decrement\n    end\n  end\n\n  let\n    piped\n  do\n    reduce\n      piped\n    do\n      sum\n    end\n  end\nend\n\n\n\n\n\n\nwith\n  thing\nmap\n  y\ndo\n  ...\nfilter\n  thing\ndo\n  ...\nend\n\n\n- Point := (x, y, z)\n- Set := Point, Point, ...\n- Iterator := Set -\u003e Sequence\n- Sequence := Point[]\n- Predicate := Set =\u003e Boolean\n- Type := Predicate, Predicate, Predicate...\n- Structure := (Set, Type)\n\n__TODO__\n\nI need to think just a little bit more about what are the primitives. I mean, I'm not even 100% sure I have it clear in my head what makes a good primitive set. The more keywords you have the more \"domain knowledge\" you need in your head but also your programs will be short. What is the sweet spot for a human programmer? What is the sweet spot for an LLM? Is there a difference?\n\n\nmap, filter, reduce\n\n\nA Set starts out Unknown -\u003e -\u003e add predicates -\u003e Workable (or whatever)\n\ntype X =\n  predicate 1\n  predicate 2\n  predicate 3\n  predicate 4\n\ndo\n\n\n\nend\n\nand\n  () end\n  () end\n  () end\n  () end\n  () end\nend\n\n\n---\n\ntime language\ndsl language\ndialogue language\nstate tree\n\nyou have a language\nyou have a program\nyou have a history\nyou have an engine\n\n\ndef\n  options\nwith\n  goal\ndo\n  'do this thing'\n\n  'do that thing'\n\n  'do something else'\nend\n\ndef\n  best_option\nfilter\n  options\ndo\n  succeeded?\n  quickly?\nend\n\n\n// with arc\n\ninputs -\u003e outputs\n\nwhat is the rule?\n\nthe rule is basically\n\nwhat properties do the inputs have?\nwhat language do the inputs speak?\nwhat properites do the outputs have?\nwhat language do the outputs speak?\nwhat is a description of the relationship between the two?\nwhat is a program written in\n\ntype Coordinate = number;\n\ntype Energy = number;\n\ntype Dimension = number;\n\ntype Time = number;\n\ntype Datum = {\n  t: Time;\n  x: Coordinate;\n  y: Coordinate;\n  energy: Energy;\n}\n\ntype Set := unordered\n\ntype Sequence := ordered\n\ntype Field = {\n  height: Dimension;\n  width: Dimension;\n  data: Set\u003cDatum\u003e;\n}\n\n\n\n\nPrimitive Types\n\n- Void\n- Null\n- Number\n- Boolean\n- String\n- Map\n- Array\n- Struct\n\nNamed Parameters\n\nkw\n  name exp\n  name exp\n  name exp\nend\n\nOrdered Parameters\n\nkw\n  exp\n  exp\n  exp\nend\n\nFunction Call\n\n@name\n  name =\u003e exp\n  name =\u003e exp\n  name =\u003e exp\nend\n\nFunction Definition\n\nfn\n  (a: C: b: C c: C): P\n  do\n\n  end\n\nStruct\n\n@struct\n  id =\u003e String\n  name =\u003e String\nend\n\nType\n\n...TODO...\n\nMap Literal\n\n{}\n\nArray Literal\n\n[]\n\nNumerical Operators\n\n+, *, /, -,\n\nBoolean Operators\n\n\u0026\u0026, ||, !\n\nComments\n\n\"hash\"\n\nFeedback, Commentary, Thoughts\n\n...TODO...\n\nreturn\n  do\n\n  end\nend\n\ndef x 10\n\ndef\n  symbol x end\n  value 10 end\nend\n\ndef x y + 10\n\n\n\nif\n  when x \u003e 10 end\n  then x end\n  else null end\nend\n\n\nKeywords\n\n- {}\n- keys\n- []\n- ...\n- def\n- let (redef)\n- () =\u003e {}\n- @ (call)\n- do\n- if\n  - when\n  - then\n  - else\n- switch\n  - when\n  - then\n- return\n\nread, write, def, () =\u003e {}, do, for, call, struct, map, array, return\n\n\ndef x 5 end\n\n\ndef\n  y\n\n  do\n    x + x\n  end\nend\n\nrows\n  grid\nend\n\ncolumns\n  grid\nend\n\ncall f\n  a n\n  b n\n  c v\n  \n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkillthebuddh4%2Farcangel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkillthebuddh4%2Farcangel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkillthebuddh4%2Farcangel/lists"}