[{"data":1,"prerenderedAt":2523},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Fconfiguration":135,"\u002Fdocs\u002Fconfiguration-surround":2518},[4],{"title":5,"path":6,"stem":7,"children":8,"page":134},"Docs","\u002Fdocs","docs",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130],{"title":10,"path":11,"stem":12},"AI harnesses: LLM tools, MCP servers and agents","\u002Fdocs\u002Fai-tools","docs\u002Fai-tools",{"title":14,"path":15,"stem":16},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002Farchitecture",{"title":18,"path":19,"stem":20},"Web \u002F native bridges","\u002Fdocs\u002Fbridges","docs\u002Fbridges",{"title":22,"path":23,"stem":24},"Broadcast channels and tests","\u002Fdocs\u002Fchannels-and-tests","docs\u002Fchannels-and-tests",{"title":26,"path":27,"stem":28},"CLI reference","\u002Fdocs\u002Fcli","docs\u002Fcli",{"title":30,"path":31,"stem":32},"Completeness: how far an answer reaches","\u002Fdocs\u002Fcompleteness","docs\u002Fcompleteness",{"title":34,"path":35,"stem":36},"Configuration","\u002Fdocs\u002Fconfiguration","docs\u002Fconfiguration",{"title":38,"path":39,"stem":40},"External systems","\u002Fdocs\u002Fexternal","docs\u002Fexternal",{"title":42,"path":43,"stem":44},"Generated, copied and vendored files","\u002Fdocs\u002Fgenerated","docs\u002Fgenerated",{"title":46,"path":47,"stem":48},"Installing and updating cg","\u002Fdocs\u002Finstall","docs\u002Finstall",{"title":50,"path":51,"stem":52},"Java","\u002Fdocs\u002Fjava","docs\u002Fjava",{"title":54,"path":55,"stem":56},"Kotlin","\u002Fdocs\u002Fkotlin","docs\u002Fkotlin",{"title":58,"path":59,"stem":60},"Known limitations","\u002Fdocs\u002Flimitations","docs\u002Flimitations",{"title":62,"path":63,"stem":64,"children":65},"MCP server","\u002Fdocs\u002Fmcp","docs\u002Fmcp",[66],{"title":67,"path":68,"stem":69},"code-graph MCP: sample outputs (real calls via the MCP Python SDK stdio client)","\u002Fdocs\u002Fmcp\u002Fsample_outputs","docs\u002Fmcp\u002Fsample_outputs",{"title":71,"path":72,"stem":73},"Rust, C and C++","\u002Fdocs\u002Fnative","docs\u002Fnative",{"title":75,"path":76,"stem":77},"Port gaps: cg parity","\u002Fdocs\u002Fparity","docs\u002Fparity",{"title":79,"path":80,"stem":81},"PHP","\u002Fdocs\u002Fphp","docs\u002Fphp",{"title":83,"path":84,"stem":85},"Planned changes","\u002Fdocs\u002Fplans","docs\u002Fplans",{"title":87,"path":88,"stem":89},"Platform-specific code","\u002Fdocs\u002Fplatforms","docs\u002Fplatforms",{"title":91,"path":92,"stem":93},"Protocol links","\u002Fdocs\u002Fprotocols","docs\u002Fprotocols",{"title":95,"path":96,"stem":97},"Python","\u002Fdocs\u002Fpython","docs\u002Fpython",{"title":99,"path":100,"stem":101},"Quick start","\u002Fdocs\u002Fquickstart","docs\u002Fquickstart",{"title":103,"path":104,"stem":105},"Graph schema","\u002Fdocs\u002Fschema","docs\u002Fschema",{"title":107,"path":108,"stem":109},"Attack surface","\u002Fdocs\u002Fsurface","docs\u002Fsurface",{"title":111,"path":112,"stem":113},"Swift","\u002Fdocs\u002Fswift","docs\u002Fswift",{"title":115,"path":116,"stem":117},"TypeScript \u002F JavaScript frameworks","\u002Fdocs\u002Fts-frameworks","docs\u002Fts-frameworks",{"title":119,"path":120,"stem":121},"How we validate","\u002Fdocs\u002Fvalidation","docs\u002Fvalidation",{"title":123,"path":124,"stem":125},"Validation log","\u002Fdocs\u002Fvalidation-log","docs\u002Fvalidation-log",{"title":127,"path":128,"stem":129},"Value facts and resolutions","\u002Fdocs\u002Fvalue-facts","docs\u002Fvalue-facts",{"title":131,"path":132,"stem":133},"Visual view","\u002Fdocs\u002Fviz","docs\u002Fviz",false,{"id":136,"title":34,"body":137,"description":2512,"extension":2513,"meta":2514,"navigation":2515,"path":35,"seo":2516,"stem":36,"__hash__":2517},"docs\u002Fdocs\u002Fconfiguration.md",{"type":138,"value":139,"toc":2504},"minimark",[140,157,162,1022,1025,1150,1273,1286,1314,1318,1340,1357,1375,1400,1423,1427,1433,1566,1602,1606,1613,1743,1772,1782,1923,1927,1944,2228,2244,2248,2476,2500],[141,142,143,144,148,149,152,153,156],"p",{},"code-graph indexes a project with zero configuration. A ",[145,146,147],"code",{},".cg.yaml"," (or ",[145,150,151],{},".cg.yml",") at the indexed root is optional. The CLI, the MCP ",[145,154,155],{},"index"," tool and the visual view read it on every index. Command-line flags take precedence.",[158,159,161],"h2",{"id":160},"project-file","Project file",[163,164,169],"pre",{"className":165,"code":166,"language":167,"meta":168,"style":168},"language-yaml shiki shiki-themes cg-light cg-light cg-dark","version: 1\npython:\n  source_roots: [lib, tools\u002Fscripts]   # directories Python imports from; replaces detection (\".\" = the indexed root)\nexclude: [\"legacy\u002F**\", \"*.generated.ts\"]  # paths no plugin indexes and the coverage scan leaves out\ninclude: [src\u002Fgenerated, build\u002Fapi]   # directories indexed although a built-in skip leaves them out\nskip_dirs:\n  add: [fixtures_big]                  # more directory names to skip everywhere\n  keep: [static]                       # directory names skipped by default that hold project code here\ngenerated:\n  paths: [\"src\u002Fapi\u002Fgenerated\u002F**\"]      # generated files detection misses (kept out of the graph, listed by coverage)\n  vendored: [\"third_party\u002F**\"]         # vendored copies of other projects\n  keep: [\"src\u002Fschema.gen.ts\"]          # hand-maintained files a detection rule would classify\n  include: false                       # true: index them, labelled attrs.generated\nframeworks:\n  add: [nest]                          # turn on a framework layer detection did not pick\n  remove: [flutter]                    # turn off one that was detected\nauth:\n  extra_patterns: [\"requireTenantMember\", \"withOrgScope\"]   # guard names (regex) that count as auth\nsecret:\n  extra_patterns: [\"verifyStripeSignature\"]                 # guard names that check a shared secret \u002F signature\ngates: config\u002Fgates.json               # gate scenarios file (cg index --gates)\nplans:\n  dir: docs\u002Fplans                      # plans directory (--plans-dir \u002F --plans)\n  text_mention_dirs: [src, templates]  # where plan checks look for text mentions of a planned name\nviz:\n  presets:                             # canned queries for the visual view's starter cards\n    - {id: orders_writes, label: what writes the orders table, mode: reaches, specs: [\"table:orders\"]}\napps:                                  # workspace: one `cg index \u003Croot>` builds one combined graph\n  - {name: api, root: apps\u002Fapi, role: backend}\n  - {name: web, root: apps\u002Fweb, role: frontend, links: [api]}   # backends it calls (default: every backend)\n  - {name: orders, root: ..\u002Forders-api, role: backend}          # absolute or ..\u002Fother-repo is allowed\nplatforms:\n  targets: [ios, android, web]         # build targets (default: detected)\n  paths: {\"src\u002Fwin32\u002F**\": [windows]}   # files built only for some targets\n  file_suffixes: true                  # React Native .ios.ts \u002F .android.ts \u002F .native.ts \u002F .web.ts\n  path_conventions: true               # C \u002F C++ win\u002F unix\u002F posix\u002F directories and *_win.c names\nrust:\n  targets: off                         # extra rust-analyzer runs: auto (default), off, or [windows, macos]\nprotocols:\n  external: [\"kafka:audit.*\"]          # \u003Cprotocol>:\u003Cname glob> handled outside the analysed repos\nsurface:\n  ignore:                              # accepted `cg surface` findings; reason is required\n    - {finding: unguarded, path: \"app\u002FHttp\u002FControllers\u002FHealthController.php\", reason: public health probe}\nlossy: [squash, \"toDisplay*\"]          # extra lossy-transform names \u002F globs for `cg roundtrip`\n","yaml","",[145,170,171,188,197,225,258,281,289,307,325,333,355,377,398,412,420,437,455,463,494,502,523,537,545,559,582,590,601,657,668,707,757,794,802,829,857,871,884,892,905,913,935,943,954,995],{"__ignoreMap":168},[172,173,176,180,184],"span",{"class":174,"line":175},"line",1,[172,177,179],{"class":178},"s4LKg","version",[172,181,183],{"class":182},"sZ_TN",":",[172,185,187],{"class":186},"sZWGQ"," 1\n",[172,189,191,194],{"class":174,"line":190},2,[172,192,193],{"class":178},"python",[172,195,196],{"class":182},":\n",[172,198,200,203,205,208,212,215,218,221],{"class":174,"line":199},3,[172,201,202],{"class":178},"  source_roots",[172,204,183],{"class":182},[172,206,207],{"class":182}," [",[172,209,211],{"class":210},"sha9Y","lib",[172,213,214],{"class":182},",",[172,216,217],{"class":210}," tools\u002Fscripts",[172,219,220],{"class":182},"]",[172,222,224],{"class":223},"seS0s","   # directories Python imports from; replaces detection (\".\" = the indexed root)\n",[172,226,228,231,233,235,238,241,243,245,248,251,253,255],{"class":174,"line":227},4,[172,229,230],{"class":178},"exclude",[172,232,183],{"class":182},[172,234,207],{"class":182},[172,236,237],{"class":182},"\"",[172,239,240],{"class":210},"legacy\u002F**",[172,242,237],{"class":182},[172,244,214],{"class":182},[172,246,247],{"class":182}," \"",[172,249,250],{"class":210},"*.generated.ts",[172,252,237],{"class":182},[172,254,220],{"class":182},[172,256,257],{"class":223},"  # paths no plugin indexes and the coverage scan leaves out\n",[172,259,261,264,266,268,271,273,276,278],{"class":174,"line":260},5,[172,262,263],{"class":178},"include",[172,265,183],{"class":182},[172,267,207],{"class":182},[172,269,270],{"class":210},"src\u002Fgenerated",[172,272,214],{"class":182},[172,274,275],{"class":210}," build\u002Fapi",[172,277,220],{"class":182},[172,279,280],{"class":223},"   # directories indexed although a built-in skip leaves them out\n",[172,282,284,287],{"class":174,"line":283},6,[172,285,286],{"class":178},"skip_dirs",[172,288,196],{"class":182},[172,290,292,295,297,299,302,304],{"class":174,"line":291},7,[172,293,294],{"class":178},"  add",[172,296,183],{"class":182},[172,298,207],{"class":182},[172,300,301],{"class":210},"fixtures_big",[172,303,220],{"class":182},[172,305,306],{"class":223},"                  # more directory names to skip everywhere\n",[172,308,310,313,315,317,320,322],{"class":174,"line":309},8,[172,311,312],{"class":178},"  keep",[172,314,183],{"class":182},[172,316,207],{"class":182},[172,318,319],{"class":210},"static",[172,321,220],{"class":182},[172,323,324],{"class":223},"                       # directory names skipped by default that hold project code here\n",[172,326,328,331],{"class":174,"line":327},9,[172,329,330],{"class":178},"generated",[172,332,196],{"class":182},[172,334,336,339,341,343,345,348,350,352],{"class":174,"line":335},10,[172,337,338],{"class":178},"  paths",[172,340,183],{"class":182},[172,342,207],{"class":182},[172,344,237],{"class":182},[172,346,347],{"class":210},"src\u002Fapi\u002Fgenerated\u002F**",[172,349,237],{"class":182},[172,351,220],{"class":182},[172,353,354],{"class":223},"      # generated files detection misses (kept out of the graph, listed by coverage)\n",[172,356,358,361,363,365,367,370,372,374],{"class":174,"line":357},11,[172,359,360],{"class":178},"  vendored",[172,362,183],{"class":182},[172,364,207],{"class":182},[172,366,237],{"class":182},[172,368,369],{"class":210},"third_party\u002F**",[172,371,237],{"class":182},[172,373,220],{"class":182},[172,375,376],{"class":223},"         # vendored copies of other projects\n",[172,378,380,382,384,386,388,391,393,395],{"class":174,"line":379},12,[172,381,312],{"class":178},[172,383,183],{"class":182},[172,385,207],{"class":182},[172,387,237],{"class":182},[172,389,390],{"class":210},"src\u002Fschema.gen.ts",[172,392,237],{"class":182},[172,394,220],{"class":182},[172,396,397],{"class":223},"          # hand-maintained files a detection rule would classify\n",[172,399,401,404,406,409],{"class":174,"line":400},13,[172,402,403],{"class":178},"  include",[172,405,183],{"class":182},[172,407,408],{"class":186}," false",[172,410,411],{"class":223},"                       # true: index them, labelled attrs.generated\n",[172,413,415,418],{"class":174,"line":414},14,[172,416,417],{"class":178},"frameworks",[172,419,196],{"class":182},[172,421,423,425,427,429,432,434],{"class":174,"line":422},15,[172,424,294],{"class":178},[172,426,183],{"class":182},[172,428,207],{"class":182},[172,430,431],{"class":210},"nest",[172,433,220],{"class":182},[172,435,436],{"class":223},"                          # turn on a framework layer detection did not pick\n",[172,438,440,443,445,447,450,452],{"class":174,"line":439},16,[172,441,442],{"class":178},"  remove",[172,444,183],{"class":182},[172,446,207],{"class":182},[172,448,449],{"class":210},"flutter",[172,451,220],{"class":182},[172,453,454],{"class":223},"                    # turn off one that was detected\n",[172,456,458,461],{"class":174,"line":457},17,[172,459,460],{"class":178},"auth",[172,462,196],{"class":182},[172,464,466,469,471,473,475,478,480,482,484,487,489,491],{"class":174,"line":465},18,[172,467,468],{"class":178},"  extra_patterns",[172,470,183],{"class":182},[172,472,207],{"class":182},[172,474,237],{"class":182},[172,476,477],{"class":210},"requireTenantMember",[172,479,237],{"class":182},[172,481,214],{"class":182},[172,483,247],{"class":182},[172,485,486],{"class":210},"withOrgScope",[172,488,237],{"class":182},[172,490,220],{"class":182},[172,492,493],{"class":223},"   # guard names (regex) that count as auth\n",[172,495,497,500],{"class":174,"line":496},19,[172,498,499],{"class":178},"secret",[172,501,196],{"class":182},[172,503,505,507,509,511,513,516,518,520],{"class":174,"line":504},20,[172,506,468],{"class":178},[172,508,183],{"class":182},[172,510,207],{"class":182},[172,512,237],{"class":182},[172,514,515],{"class":210},"verifyStripeSignature",[172,517,237],{"class":182},[172,519,220],{"class":182},[172,521,522],{"class":223},"                 # guard names that check a shared secret \u002F signature\n",[172,524,526,529,531,534],{"class":174,"line":525},21,[172,527,528],{"class":178},"gates",[172,530,183],{"class":182},[172,532,533],{"class":210}," config\u002Fgates.json",[172,535,536],{"class":223},"               # gate scenarios file (cg index --gates)\n",[172,538,540,543],{"class":174,"line":539},22,[172,541,542],{"class":178},"plans",[172,544,196],{"class":182},[172,546,548,551,553,556],{"class":174,"line":547},23,[172,549,550],{"class":178},"  dir",[172,552,183],{"class":182},[172,554,555],{"class":210}," docs\u002Fplans",[172,557,558],{"class":223},"                      # plans directory (--plans-dir \u002F --plans)\n",[172,560,562,565,567,569,572,574,577,579],{"class":174,"line":561},24,[172,563,564],{"class":178},"  text_mention_dirs",[172,566,183],{"class":182},[172,568,207],{"class":182},[172,570,571],{"class":210},"src",[172,573,214],{"class":182},[172,575,576],{"class":210}," templates",[172,578,220],{"class":182},[172,580,581],{"class":223},"  # where plan checks look for text mentions of a planned name\n",[172,583,585,588],{"class":174,"line":584},25,[172,586,587],{"class":178},"viz",[172,589,196],{"class":182},[172,591,593,596,598],{"class":174,"line":592},26,[172,594,595],{"class":178},"  presets",[172,597,183],{"class":182},[172,599,600],{"class":223},"                             # canned queries for the visual view's starter cards\n",[172,602,604,607,610,613,615,618,620,623,625,628,630,633,635,638,640,643,645,647,649,652,654],{"class":174,"line":603},27,[172,605,606],{"class":182},"    -",[172,608,609],{"class":182}," {",[172,611,612],{"class":178},"id",[172,614,183],{"class":182},[172,616,617],{"class":210}," orders_writes",[172,619,214],{"class":182},[172,621,622],{"class":178}," label",[172,624,183],{"class":182},[172,626,627],{"class":210}," what writes the orders table",[172,629,214],{"class":182},[172,631,632],{"class":178}," mode",[172,634,183],{"class":182},[172,636,637],{"class":210}," reaches",[172,639,214],{"class":182},[172,641,642],{"class":178}," specs",[172,644,183],{"class":182},[172,646,207],{"class":182},[172,648,237],{"class":182},[172,650,651],{"class":210},"table:orders",[172,653,237],{"class":182},[172,655,656],{"class":182},"]}\n",[172,658,660,663,665],{"class":174,"line":659},28,[172,661,662],{"class":178},"apps",[172,664,183],{"class":182},[172,666,667],{"class":223},"                                  # workspace: one `cg index \u003Croot>` builds one combined graph\n",[172,669,671,674,676,679,681,684,686,689,691,694,696,699,701,704],{"class":174,"line":670},29,[172,672,673],{"class":182},"  -",[172,675,609],{"class":182},[172,677,678],{"class":178},"name",[172,680,183],{"class":182},[172,682,683],{"class":210}," api",[172,685,214],{"class":182},[172,687,688],{"class":178}," root",[172,690,183],{"class":182},[172,692,693],{"class":210}," apps\u002Fapi",[172,695,214],{"class":182},[172,697,698],{"class":178}," role",[172,700,183],{"class":182},[172,702,703],{"class":210}," backend",[172,705,706],{"class":182},"}\n",[172,708,710,712,714,716,718,721,723,725,727,730,732,734,736,739,741,744,746,748,751,754],{"class":174,"line":709},30,[172,711,673],{"class":182},[172,713,609],{"class":182},[172,715,678],{"class":178},[172,717,183],{"class":182},[172,719,720],{"class":210}," web",[172,722,214],{"class":182},[172,724,688],{"class":178},[172,726,183],{"class":182},[172,728,729],{"class":210}," apps\u002Fweb",[172,731,214],{"class":182},[172,733,698],{"class":178},[172,735,183],{"class":182},[172,737,738],{"class":210}," frontend",[172,740,214],{"class":182},[172,742,743],{"class":178}," links",[172,745,183],{"class":182},[172,747,207],{"class":182},[172,749,750],{"class":210},"api",[172,752,753],{"class":182},"]}",[172,755,756],{"class":223},"   # backends it calls (default: every backend)\n",[172,758,760,762,764,766,768,771,773,775,777,780,782,784,786,788,791],{"class":174,"line":759},31,[172,761,673],{"class":182},[172,763,609],{"class":182},[172,765,678],{"class":178},[172,767,183],{"class":182},[172,769,770],{"class":210}," orders",[172,772,214],{"class":182},[172,774,688],{"class":178},[172,776,183],{"class":182},[172,778,779],{"class":210}," ..\u002Forders-api",[172,781,214],{"class":182},[172,783,698],{"class":178},[172,785,183],{"class":182},[172,787,703],{"class":210},[172,789,790],{"class":182},"}",[172,792,793],{"class":223},"          # absolute or ..\u002Fother-repo is allowed\n",[172,795,797,800],{"class":174,"line":796},32,[172,798,799],{"class":178},"platforms",[172,801,196],{"class":182},[172,803,805,808,810,812,815,817,820,822,824,826],{"class":174,"line":804},33,[172,806,807],{"class":178},"  targets",[172,809,183],{"class":182},[172,811,207],{"class":182},[172,813,814],{"class":210},"ios",[172,816,214],{"class":182},[172,818,819],{"class":210}," android",[172,821,214],{"class":182},[172,823,720],{"class":210},[172,825,220],{"class":182},[172,827,828],{"class":223},"         # build targets (default: detected)\n",[172,830,832,834,836,838,840,843,845,847,849,852,854],{"class":174,"line":831},34,[172,833,338],{"class":178},[172,835,183],{"class":182},[172,837,609],{"class":182},[172,839,237],{"class":182},[172,841,842],{"class":210},"src\u002Fwin32\u002F**",[172,844,237],{"class":182},[172,846,183],{"class":182},[172,848,207],{"class":182},[172,850,851],{"class":210},"windows",[172,853,753],{"class":182},[172,855,856],{"class":223},"   # files built only for some targets\n",[172,858,860,863,865,868],{"class":174,"line":859},35,[172,861,862],{"class":178},"  file_suffixes",[172,864,183],{"class":182},[172,866,867],{"class":186}," true",[172,869,870],{"class":223},"                  # React Native .ios.ts \u002F .android.ts \u002F .native.ts \u002F .web.ts\n",[172,872,874,877,879,881],{"class":174,"line":873},36,[172,875,876],{"class":178},"  path_conventions",[172,878,183],{"class":182},[172,880,867],{"class":186},[172,882,883],{"class":223},"               # C \u002F C++ win\u002F unix\u002F posix\u002F directories and *_win.c names\n",[172,885,887,890],{"class":174,"line":886},37,[172,888,889],{"class":178},"rust",[172,891,196],{"class":182},[172,893,895,897,899,902],{"class":174,"line":894},38,[172,896,807],{"class":178},[172,898,183],{"class":182},[172,900,901],{"class":186}," off",[172,903,904],{"class":223},"                         # extra rust-analyzer runs: auto (default), off, or [windows, macos]\n",[172,906,908,911],{"class":174,"line":907},39,[172,909,910],{"class":178},"protocols",[172,912,196],{"class":182},[172,914,916,919,921,923,925,928,930,932],{"class":174,"line":915},40,[172,917,918],{"class":178},"  external",[172,920,183],{"class":182},[172,922,207],{"class":182},[172,924,237],{"class":182},[172,926,927],{"class":210},"kafka:audit.*",[172,929,237],{"class":182},[172,931,220],{"class":182},[172,933,934],{"class":223},"          # \u003Cprotocol>:\u003Cname glob> handled outside the analysed repos\n",[172,936,938,941],{"class":174,"line":937},41,[172,939,940],{"class":178},"surface",[172,942,196],{"class":182},[172,944,946,949,951],{"class":174,"line":945},42,[172,947,948],{"class":178},"  ignore",[172,950,183],{"class":182},[172,952,953],{"class":223},"                              # accepted `cg surface` findings; reason is required\n",[172,955,957,959,961,964,966,969,971,974,976,978,981,983,985,988,990,993],{"class":174,"line":956},43,[172,958,606],{"class":182},[172,960,609],{"class":182},[172,962,963],{"class":178},"finding",[172,965,183],{"class":182},[172,967,968],{"class":210}," unguarded",[172,970,214],{"class":182},[172,972,973],{"class":178}," path",[172,975,183],{"class":182},[172,977,247],{"class":182},[172,979,980],{"class":210},"app\u002FHttp\u002FControllers\u002FHealthController.php",[172,982,237],{"class":182},[172,984,214],{"class":182},[172,986,987],{"class":178}," reason",[172,989,183],{"class":182},[172,991,992],{"class":210}," public health probe",[172,994,706],{"class":182},[172,996,998,1001,1003,1005,1008,1010,1012,1015,1017,1019],{"class":174,"line":997},44,[172,999,1000],{"class":178},"lossy",[172,1002,183],{"class":182},[172,1004,207],{"class":182},[172,1006,1007],{"class":210},"squash",[172,1009,214],{"class":182},[172,1011,247],{"class":182},[172,1013,1014],{"class":210},"toDisplay*",[172,1016,237],{"class":182},[172,1018,220],{"class":182},[172,1020,1021],{"class":223},"          # extra lossy-transform names \u002F globs for `cg roundtrip`\n",[141,1023,1024],{},"Comments in the file are the meanings. Flags and env vars that override a key:",[1026,1027,1028,1041],"table",{},[1029,1030,1031],"thead",{},[1032,1033,1034,1038],"tr",{},[1035,1036,1037],"th",{},"key",[1035,1039,1040],{},"override",[1042,1043,1044,1058,1070,1082,1093,1109,1121,1133],"tbody",{},[1032,1045,1046,1052],{},[1047,1048,1049],"td",{},[145,1050,1051],{},"python.source_roots",[1047,1053,1054,1057],{},[145,1055,1056],{},"cg index --python-root DIR"," (repeatable)",[1032,1059,1060,1065],{},[1047,1061,1062],{},[145,1063,1064],{},"generated.include",[1047,1066,1067],{},[145,1068,1069],{},"cg index --include-generated",[1032,1071,1072,1077],{},[1047,1073,1074],{},[145,1075,1076],{},"auth.extra_patterns",[1047,1078,1079],{},[145,1080,1081],{},"--auth-pattern",[1032,1083,1084,1088],{},[1047,1085,1086],{},[145,1087,528],{},[1047,1089,1090],{},[145,1091,1092],{},"cg index --gates FILE",[1032,1094,1095,1100],{},[1047,1096,1097],{},[145,1098,1099],{},"plans.dir",[1047,1101,1102,1105,1106],{},[145,1103,1104],{},"--plans-dir DIR"," \u002F ",[145,1107,1108],{},"--plans DIR",[1032,1110,1111,1116],{},[1047,1112,1113],{},[145,1114,1115],{},"viz.presets",[1047,1117,1118],{},[145,1119,1120],{},"cg serve --presets FILE",[1032,1122,1123,1127],{},[1047,1124,1125],{},[145,1126,662],{},[1047,1128,1129,1132],{},[145,1130,1131],{},"cg index --no-apps"," indexes the root as one project",[1032,1134,1135,1140],{},[1047,1136,1137],{},[145,1138,1139],{},"rust.targets",[1047,1141,1142,1145,1146,1149],{},[145,1143,1144],{},"CG_RUST_TARGETS"," (takes precedence; ",[1147,1148,71],"a",{"href":72},")",[141,1151,1152,1155,1156,1159,1160,1163,1164,1167,1168,1170,1171,1173,1174,1177,1178,1181,1182,1184,1185,1188,1189,1188,1192,1188,1195,1188,1198,1188,1201,1188,1203,1188,1205,1188,1208,1188,1211,1188,1214,1217,1218,1188,1221,1188,1224,1188,1227,1230,1231,1234,1235,1188,1237,1188,1240,1188,1243,1188,1245,1188,1248,1251,1252,1255,1256,1259,1260,1263,1264,1188,1266,1188,1269,1272],{},[145,1153,1154],{},"surface.ignore"," entries need a ",[145,1157,1158],{},"reason"," (",[145,1161,1162],{},"cg config validate"," rejects one without) and are read from the file at query time (",[1147,1165,107],{"href":1166},"\u002Fdocs\u002Fsurface#ignores","). ",[145,1169,263],{}," walks only the path down to those directories; ",[145,1172,230],{}," still applies inside them. ",[145,1175,1176],{},"skip_dirs.keep"," also lets a walk into a hidden directory such as ",[145,1179,1180],{},".storybook",". ",[145,1183,417],{}," names include ",[145,1186,1187],{},"laravel",", ",[145,1190,1191],{},"nuxt",[145,1193,1194],{},"django",[145,1196,1197],{},"djangorestframework",[145,1199,1200],{},"django-ninja",[145,1202,449],{},[145,1204,431],{},[145,1206,1207],{},"nextjs",[145,1209,1210],{},"astro",[145,1212,1213],{},"express",[145,1215,1216],{},"spring"," (aliases such as ",[145,1219,1220],{},"nestjs",[145,1222,1223],{},"next",[145,1225,1226],{},"fastify",[145,1228,1229],{},"drf"," work). ",[145,1232,1233],{},"platforms.targets"," accepts ",[145,1236,851],{},[145,1238,1239],{},"linux",[145,1241,1242],{},"macos",[145,1244,814],{},[145,1246,1247],{},"android",[145,1249,1250],{},"web","; ",[145,1253,1254],{},"unix"," and ",[145,1257,1258],{},"native"," work in ",[145,1261,1262],{},"platforms.paths",". Details: ",[1147,1265,95],{"href":96},[1147,1267,1268],{"href":43},"Generated files",[1147,1270,1271],{"href":88},"Platforms",".",[141,1274,1275,1276,1188,1279,1188,1282,1285],{},"The settings are stored with the graph, so ",[145,1277,1278],{},"cg serve",[145,1280,1281],{},"cg routes",[145,1283,1284],{},"cg plan"," and the MCP server read plans, auth patterns and presets from the DB without repeating the flags.",[141,1287,1288,1291,1292,1294,1295,1298,1299,1302,1303,1306,1307,1310,1311,1313],{},[145,1289,1290],{},"cg config show [ROOT]"," prints each effective value and where it comes from (flag, ",[145,1293,147],{},", preset or detection); ",[145,1296,1297],{},"--json"," prints the same as data. ",[145,1300,1301],{},"cg config validate [ROOT]"," checks the file and exits 2 when it is invalid. Unknown top-level keys are kept and listed under ",[145,1304,1305],{},"stats.config.ignored_keys","; validate suggests a likely typo (",[145,1308,1309],{},"skip_dir"," → ",[145,1312,286],{},").",[158,1315,1317],{"id":1316},"apps-and-workspace","Apps and workspace",[141,1319,1320,1323,1324,1327,1328,1332,1333,1336,1337,1339],{},[145,1321,1322],{},"cg index \u003Croot> --db out\u002Fmono.db"," indexes each app into ",[145,1325,1326],{},"out\u002Fmono.\u003Capp>.db"," and writes ",[1329,1330,1331],"strong",{},"one"," combined ",[145,1334,1335],{},"out\u002Fmono.db"," for every app. Per-pair databases are not written. With a single app, ",[145,1338,1335],{}," is that app's graph.",[141,1341,1342,1343,1345,1346,1348,1349,1352,1353,1356],{},"Each app reads its own ",[145,1344,147],{},". The root file's ",[145,1347,662],{}," decides what is indexed. ",[145,1350,1351],{},"root"," is relative to the workspace, or absolute, or ",[145,1354,1355],{},"..\u002Fother-repo",", so separate checkouts can share one config. A missing directory is rejected with the same message as a missing in-repo root.",[141,1358,1359,1362,1363,1366,1367,1370,1371,1374],{},[145,1360,1361],{},"role"," is ",[145,1364,1365],{},"backend"," (publishes routes, and may call other backends) or ",[145,1368,1369],{},"frontend"," (calls servers, does not publish routes). ",[145,1372,1373],{},"links:"," on a frontend is the allow-list of backends it calls; omit it to call every backend. Client calls in every app are matched against every other backend, including backend-to-backend HTTP.",[163,1376,1380],{"className":1377,"code":1378,"language":1379,"meta":168,"style":168},"language-bash shiki shiki-themes cg-light cg-light cg-dark","cg index . --db out\u002Fworkspace.db\n","bash",[145,1381,1382],{"__ignoreMap":168},[172,1383,1384,1388,1391,1394,1397],{"class":174,"line":175},[172,1385,1387],{"class":1386},"sZJo5","cg",[172,1389,1390],{"class":210}," index",[172,1392,1393],{"class":210}," .",[172,1395,1396],{"class":210}," --db",[172,1398,1399],{"class":210}," out\u002Fworkspace.db\n",[141,1401,1402,1403,1159,1406,1410,1411,1414,1415,1418,1419,1422],{},"The same merge from graphs you already built is ",[145,1404,1405],{},"cg link --repo",[1147,1407,1409],{"href":1408},"\u002Fdocs\u002Fcli#workspace","workspace","). An id shared by two apps is stored as ",[145,1412,1413],{},"repo:"," plus the original id. ",[145,1416,1417],{},"orders:Order"," selects one app; ",[145,1420,1421],{},"Order"," matches every app that defines it.",[158,1424,1426],{"id":1425},"framework-presets","Framework presets",[141,1428,1429,1430,183],{},"A detected language or framework brings a preset from ",[145,1431,1432],{},"cg_code_graph\u002Fpresets\u002F*.yaml",[1026,1434,1435,1445],{},[1029,1436,1437],{},[1032,1438,1439,1442],{},[1035,1440,1441],{},"preset",[1035,1443,1444],{},"what it adds",[1042,1446,1447,1457,1489,1498,1511,1537,1550],{},[1032,1448,1449,1454],{},[1047,1450,1451],{},[145,1452,1453],{},"common",[1047,1455,1456],{},"auth and secret name patterns, shared skip directories",[1032,1458,1459,1486],{},[1047,1460,1461,1188,1464,1188,1466,1188,1469,1188,1472,1188,1474,1188,1477,1188,1480,1188,1483],{},[145,1462,1463],{},"php",[145,1465,193],{},[145,1467,1468],{},"typescript",[145,1470,1471],{},"dart",[145,1473,889],{},[145,1475,1476],{},"c_cpp",[145,1478,1479],{},"kotlin",[145,1481,1482],{},"java",[145,1484,1485],{},"swift",[1047,1487,1488],{},"per-language skip lists",[1032,1490,1491,1495],{},[1047,1492,1493],{},[145,1494,1187],{},[1047,1496,1497],{},"auth and signature middleware, plan prefixes, text-mention dirs",[1032,1499,1500,1508],{},[1047,1501,1502,1188,1504,1188,1506],{},[145,1503,1194],{},[145,1505,1197],{},[145,1507,1200],{},[1047,1509,1510],{},"view access decorators, DRF permissions, ninja auth",[1032,1512,1513,1523],{},[1047,1514,1515,1188,1517,1188,1519,1188,1521],{},[145,1516,431],{},[145,1518,1207],{},[145,1520,1213],{},[145,1522,1191],{},[1047,1524,1525,1526,1529,1530,1188,1533,1536],{},"Nest guards, Next.js auth helpers, Express-family middleware, Nuxt session helpers; the Express preset also lists ",[145,1527,1528],{},"session_only"," middleware (",[145,1531,1532],{},"session()",[145,1534,1535],{},"cookie-session","), which creates a session but is never an auth guard",[1032,1538,1539,1544],{},[1047,1540,1541],{},[145,1542,1543],{},"react-router",[1047,1545,1546,1547,1149],{},"React Router and Remix route modules (",[145,1548,1549],{},"presets\u002Freact-router.yaml",[1032,1551,1552,1556],{},[1047,1553,1554],{},[145,1555,1216],{},[1047,1557,1558,1559,1562,1563,1149],{},"Spring Security method annotations and ",[145,1560,1561],{},"SecurityFilterChain"," guard names (",[145,1564,1565],{},"presets\u002Fspring.yaml",[141,1567,1568,1569,1188,1572,1575,1576,1578,1579,1581,1582,1585,1586,1588,1589,1591,1592,1255,1595,1597,1598,1601],{},"A guard matches on its name, ignoring namespace and arguments (",[145,1570,1571],{},"auth:sanctum",[145,1573,1574],{},"AuthGuard('jwt')","). Project guards match the shared name pattern or ",[145,1577,1076],{},". The same ",[145,1580,1076],{}," select inline Laravel checks (",[145,1583,1584],{},"$this->assertCanManage($order)",") when the project is indexed. Merge order: ",[145,1587,1453],{},", languages, frameworks, ",[145,1590,147],{},", then flags. ",[145,1593,1594],{},"cg coverage",[145,1596,1281],{}," name which presets and patterns matched. ",[145,1599,1600],{},"cg config show"," lists every preset value with its source.",[158,1603,1605],{"id":1604},"gate-scenarios","Gate scenarios",[141,1607,1608,1609,1612],{},"A gates file names scenarios and the settings that are true in each (",[145,1610,1611],{},"examples\u002Fbookstore.gates.json","):",[163,1614,1618],{"className":1615,"code":1616,"language":1617,"meta":168,"style":168},"language-json shiki shiki-themes cg-light cg-light cg-dark","{\"scenarios\": [{\n  \"name\": \"new_inventory\",\n  \"description\": \"free text\",\n  \"setting_accessors\": [\"getSetting\"],\n  \"true_settings\": [\"features.new_inventory.enabled\"],\n  \"false_settings\": []\n}]}\n","json",[145,1619,1620,1638,1659,1679,1702,1724,1738],{"__ignoreMap":168},[172,1621,1622,1625,1627,1631,1633,1635],{"class":174,"line":175},[172,1623,1624],{"class":182},"{",[172,1626,237],{"class":182},[172,1628,1630],{"class":1629},"sbOAO","scenarios",[172,1632,237],{"class":182},[172,1634,183],{"class":182},[172,1636,1637],{"class":182}," [{\n",[172,1639,1640,1643,1645,1647,1649,1651,1654,1656],{"class":174,"line":190},[172,1641,1642],{"class":182},"  \"",[172,1644,678],{"class":1629},[172,1646,237],{"class":182},[172,1648,183],{"class":182},[172,1650,247],{"class":182},[172,1652,1653],{"class":210},"new_inventory",[172,1655,237],{"class":182},[172,1657,1658],{"class":182},",\n",[172,1660,1661,1663,1666,1668,1670,1672,1675,1677],{"class":174,"line":199},[172,1662,1642],{"class":182},[172,1664,1665],{"class":1629},"description",[172,1667,237],{"class":182},[172,1669,183],{"class":182},[172,1671,247],{"class":182},[172,1673,1674],{"class":210},"free text",[172,1676,237],{"class":182},[172,1678,1658],{"class":182},[172,1680,1681,1683,1686,1688,1690,1692,1694,1697,1699],{"class":174,"line":227},[172,1682,1642],{"class":182},[172,1684,1685],{"class":1629},"setting_accessors",[172,1687,237],{"class":182},[172,1689,183],{"class":182},[172,1691,207],{"class":182},[172,1693,237],{"class":182},[172,1695,1696],{"class":210},"getSetting",[172,1698,237],{"class":182},[172,1700,1701],{"class":182},"],\n",[172,1703,1704,1706,1709,1711,1713,1715,1717,1720,1722],{"class":174,"line":260},[172,1705,1642],{"class":182},[172,1707,1708],{"class":1629},"true_settings",[172,1710,237],{"class":182},[172,1712,183],{"class":182},[172,1714,207],{"class":182},[172,1716,237],{"class":182},[172,1718,1719],{"class":210},"features.new_inventory.enabled",[172,1721,237],{"class":182},[172,1723,1701],{"class":182},[172,1725,1726,1728,1731,1733,1735],{"class":174,"line":283},[172,1727,1642],{"class":182},[172,1729,1730],{"class":1629},"false_settings",[172,1732,237],{"class":182},[172,1734,183],{"class":182},[172,1736,1737],{"class":182}," []\n",[172,1739,1740],{"class":174,"line":291},[172,1741,1742],{"class":182},"}]}\n",[141,1744,1745,1746,1749,1750,148,1753,1756,1757,1760,1761,1188,1764,1767,1768,1771],{},"Index with ",[145,1747,1748],{},"--gates FILE",", then query with ",[145,1751,1752],{},"reaches … --gate auto",[145,1754,1755],{},"none",", or a scenario name). Each item reports ",[145,1758,1759],{},"gate_status",": ",[145,1762,1763],{},"live",[145,1765,1766],{},"gated_target"," or ",[145,1769,1770],{},"gated_entry",". Beta: one scenario per index (the first one).",[141,1773,1774,1775,1778,1779,1272],{},"Rust, C and C++ scenarios can also switch Cargo features, ",[145,1776,1777],{},"cfg"," atoms and macros. Atoms the scenario does not mention stay unknown, and unknown code stays live. Example: ",[145,1780,1781],{},"examples\u002Fnative.gates.json",[163,1783,1785],{"className":1615,"code":1784,"language":1617,"meta":168,"style":168},"{\"scenarios\": [{\"name\": \"minimal_build\",\n  \"features_off\": [\"kv-core\u002Ffs\"], \"cfg_true\": [\"unix\"], \"cfg_false\": [\"windows\"],\n  \"defines_on\": [\"NDEBUG\"], \"defines_off\": [\"RB_THREADSAFE\"]}]}\n",[145,1786,1787,1819,1880],{"__ignoreMap":168},[172,1788,1789,1791,1793,1795,1797,1799,1802,1804,1806,1808,1810,1812,1815,1817],{"class":174,"line":175},[172,1790,1624],{"class":182},[172,1792,237],{"class":182},[172,1794,1630],{"class":1629},[172,1796,237],{"class":182},[172,1798,183],{"class":182},[172,1800,1801],{"class":182}," [{",[172,1803,237],{"class":182},[172,1805,678],{"class":1629},[172,1807,237],{"class":182},[172,1809,183],{"class":182},[172,1811,247],{"class":182},[172,1813,1814],{"class":210},"minimal_build",[172,1816,237],{"class":182},[172,1818,1658],{"class":182},[172,1820,1821,1823,1826,1828,1830,1832,1834,1837,1839,1842,1844,1847,1849,1851,1853,1855,1857,1859,1861,1863,1866,1868,1870,1872,1874,1876,1878],{"class":174,"line":190},[172,1822,1642],{"class":182},[172,1824,1825],{"class":1629},"features_off",[172,1827,237],{"class":182},[172,1829,183],{"class":182},[172,1831,207],{"class":182},[172,1833,237],{"class":182},[172,1835,1836],{"class":210},"kv-core\u002Ffs",[172,1838,237],{"class":182},[172,1840,1841],{"class":182},"],",[172,1843,247],{"class":182},[172,1845,1846],{"class":1629},"cfg_true",[172,1848,237],{"class":182},[172,1850,183],{"class":182},[172,1852,207],{"class":182},[172,1854,237],{"class":182},[172,1856,1254],{"class":210},[172,1858,237],{"class":182},[172,1860,1841],{"class":182},[172,1862,247],{"class":182},[172,1864,1865],{"class":1629},"cfg_false",[172,1867,237],{"class":182},[172,1869,183],{"class":182},[172,1871,207],{"class":182},[172,1873,237],{"class":182},[172,1875,851],{"class":210},[172,1877,237],{"class":182},[172,1879,1701],{"class":182},[172,1881,1882,1884,1887,1889,1891,1893,1895,1898,1900,1902,1904,1907,1909,1911,1913,1915,1918,1920],{"class":174,"line":199},[172,1883,1642],{"class":182},[172,1885,1886],{"class":1629},"defines_on",[172,1888,237],{"class":182},[172,1890,183],{"class":182},[172,1892,207],{"class":182},[172,1894,237],{"class":182},[172,1896,1897],{"class":210},"NDEBUG",[172,1899,237],{"class":182},[172,1901,1841],{"class":182},[172,1903,247],{"class":182},[172,1905,1906],{"class":1629},"defines_off",[172,1908,237],{"class":182},[172,1910,183],{"class":182},[172,1912,207],{"class":182},[172,1914,237],{"class":182},[172,1916,1917],{"class":210},"RB_THREADSAFE",[172,1919,237],{"class":182},[172,1921,1922],{"class":182},"]}]}\n",[158,1924,1926],{"id":1925},"viz-presets-and-starter-queries","Viz presets and starter queries",[141,1928,1929,1930,1767,1933,1935,1936,1939,1940,1943],{},"Starter cards are built in this order: ",[145,1931,1932],{},"serve --presets FILE",[145,1934,1115],{},"; sample presets for the bundled apps whose targets exist; then starter queries derived at index time (an unguarded write route, the most-written and most-read tables, the busiest connection and env key, the widest page, the most-called functions). ",[145,1937,1938],{},"cg starters --db DB"," and the MCP ",[145,1941,1942],{},"starters"," tool list them.",[163,1945,1947],{"className":1615,"code":1946,"language":1617,"meta":168,"style":168},"[\n  {\"id\": \"warehouse_reaches\", \"label\": \"what reaches the warehouse connection\", \"mode\": \"reaches\",\n   \"specs\": [\"connection:warehouse\", \"table:warehouse_stock\"]},\n  {\"id\": \"report_page_tables\", \"label\": \"report page -> tables\", \"mode\": \"downstream\",\n   \"specs\": [\"page:\u002Freports\u002F:id\"], \"sinks\": [\"table\", \"column\"]},\n  {\"id\": \"plan_preorders\", \"label\": \"plan overlay: pre-orders\", \"mode\": \"plan\", \"specs\": [\"preorders\"]}\n]\n",[145,1948,1949,1954,2012,2045,2100,2149,2223],{"__ignoreMap":168},[172,1950,1951],{"class":174,"line":175},[172,1952,1953],{"class":182},"[\n",[172,1955,1956,1959,1961,1963,1965,1967,1969,1972,1974,1976,1978,1981,1983,1985,1987,1990,1992,1994,1996,1999,2001,2003,2005,2008,2010],{"class":174,"line":190},[172,1957,1958],{"class":182},"  {",[172,1960,237],{"class":182},[172,1962,612],{"class":1629},[172,1964,237],{"class":182},[172,1966,183],{"class":182},[172,1968,247],{"class":182},[172,1970,1971],{"class":210},"warehouse_reaches",[172,1973,237],{"class":182},[172,1975,214],{"class":182},[172,1977,247],{"class":182},[172,1979,1980],{"class":1629},"label",[172,1982,237],{"class":182},[172,1984,183],{"class":182},[172,1986,247],{"class":182},[172,1988,1989],{"class":210},"what reaches the warehouse connection",[172,1991,237],{"class":182},[172,1993,214],{"class":182},[172,1995,247],{"class":182},[172,1997,1998],{"class":1629},"mode",[172,2000,237],{"class":182},[172,2002,183],{"class":182},[172,2004,247],{"class":182},[172,2006,2007],{"class":210},"reaches",[172,2009,237],{"class":182},[172,2011,1658],{"class":182},[172,2013,2014,2017,2020,2022,2024,2026,2028,2031,2033,2035,2037,2040,2042],{"class":174,"line":199},[172,2015,2016],{"class":182},"   \"",[172,2018,2019],{"class":1629},"specs",[172,2021,237],{"class":182},[172,2023,183],{"class":182},[172,2025,207],{"class":182},[172,2027,237],{"class":182},[172,2029,2030],{"class":210},"connection:warehouse",[172,2032,237],{"class":182},[172,2034,214],{"class":182},[172,2036,247],{"class":182},[172,2038,2039],{"class":210},"table:warehouse_stock",[172,2041,237],{"class":182},[172,2043,2044],{"class":182},"]},\n",[172,2046,2047,2049,2051,2053,2055,2057,2059,2062,2064,2066,2068,2070,2072,2074,2076,2079,2081,2083,2085,2087,2089,2091,2093,2096,2098],{"class":174,"line":227},[172,2048,1958],{"class":182},[172,2050,237],{"class":182},[172,2052,612],{"class":1629},[172,2054,237],{"class":182},[172,2056,183],{"class":182},[172,2058,247],{"class":182},[172,2060,2061],{"class":210},"report_page_tables",[172,2063,237],{"class":182},[172,2065,214],{"class":182},[172,2067,247],{"class":182},[172,2069,1980],{"class":1629},[172,2071,237],{"class":182},[172,2073,183],{"class":182},[172,2075,247],{"class":182},[172,2077,2078],{"class":210},"report page -> tables",[172,2080,237],{"class":182},[172,2082,214],{"class":182},[172,2084,247],{"class":182},[172,2086,1998],{"class":1629},[172,2088,237],{"class":182},[172,2090,183],{"class":182},[172,2092,247],{"class":182},[172,2094,2095],{"class":210},"downstream",[172,2097,237],{"class":182},[172,2099,1658],{"class":182},[172,2101,2102,2104,2106,2108,2110,2112,2114,2117,2119,2121,2123,2126,2128,2130,2132,2134,2136,2138,2140,2142,2145,2147],{"class":174,"line":260},[172,2103,2016],{"class":182},[172,2105,2019],{"class":1629},[172,2107,237],{"class":182},[172,2109,183],{"class":182},[172,2111,207],{"class":182},[172,2113,237],{"class":182},[172,2115,2116],{"class":210},"page:\u002Freports\u002F:id",[172,2118,237],{"class":182},[172,2120,1841],{"class":182},[172,2122,247],{"class":182},[172,2124,2125],{"class":1629},"sinks",[172,2127,237],{"class":182},[172,2129,183],{"class":182},[172,2131,207],{"class":182},[172,2133,237],{"class":182},[172,2135,1026],{"class":210},[172,2137,237],{"class":182},[172,2139,214],{"class":182},[172,2141,247],{"class":182},[172,2143,2144],{"class":210},"column",[172,2146,237],{"class":182},[172,2148,2044],{"class":182},[172,2150,2151,2153,2155,2157,2159,2161,2163,2166,2168,2170,2172,2174,2176,2178,2180,2183,2185,2187,2189,2191,2193,2195,2197,2200,2202,2204,2206,2208,2210,2212,2214,2216,2219,2221],{"class":174,"line":283},[172,2152,1958],{"class":182},[172,2154,237],{"class":182},[172,2156,612],{"class":1629},[172,2158,237],{"class":182},[172,2160,183],{"class":182},[172,2162,247],{"class":182},[172,2164,2165],{"class":210},"plan_preorders",[172,2167,237],{"class":182},[172,2169,214],{"class":182},[172,2171,247],{"class":182},[172,2173,1980],{"class":1629},[172,2175,237],{"class":182},[172,2177,183],{"class":182},[172,2179,247],{"class":182},[172,2181,2182],{"class":210},"plan overlay: pre-orders",[172,2184,237],{"class":182},[172,2186,214],{"class":182},[172,2188,247],{"class":182},[172,2190,1998],{"class":1629},[172,2192,237],{"class":182},[172,2194,183],{"class":182},[172,2196,247],{"class":182},[172,2198,2199],{"class":210},"plan",[172,2201,237],{"class":182},[172,2203,214],{"class":182},[172,2205,247],{"class":182},[172,2207,2019],{"class":1629},[172,2209,237],{"class":182},[172,2211,183],{"class":182},[172,2213,207],{"class":182},[172,2215,237],{"class":182},[172,2217,2218],{"class":210},"preorders",[172,2220,237],{"class":182},[172,2222,656],{"class":182},[172,2224,2225],{"class":174,"line":291},[172,2226,2227],{"class":182},"]\n",[141,2229,2230,1362,2232,1188,2234,1188,2237,1188,2239,1767,2242,1272],{},[145,2231,1998],{},[145,2233,2007],{},[145,2235,2236],{},"impact",[145,2238,2095],{},[145,2240,2241],{},"path",[145,2243,2199],{},[158,2245,2247],{"id":2246},"environment-variables","Environment variables",[1026,2249,2250,2260],{},[1029,2251,2252],{},[1032,2253,2254,2257],{},[1035,2255,2256],{},"variable",[1035,2258,2259],{},"effect",[1042,2261,2262,2288,2298,2322,2339,2355,2383,2404,2428,2442,2456],{},[1032,2263,2264,2269],{},[1047,2265,2266],{},[145,2267,2268],{},"CG_MCP_TOOLS=LIST",[1047,2270,2271,2272,2275,2276,2279,2280,2283,2284,1149],{},"tools ",[145,2273,2274],{},"cg-mcp"," lists: ",[145,2277,2278],{},"core",", names, globs, ",[145,2281,2282],{},"-name",". Unset or empty means all (",[1147,2285,2287],{"href":2286},"\u002Fdocs\u002Fmcp#choosing-tools","Choosing tools",[1032,2289,2290,2295],{},[1047,2291,2292],{},[145,2293,2294],{},"CG_NO_CACHE=1",[1047,2296,2297],{},"disable the TS, Dart and native SCIP caches (keyed by file content)",[1032,2299,2300,2305],{},[1047,2301,2302],{},[145,2303,2304],{},"CG_NO_UPDATE_CHECK=1",[1047,2306,2307,2310,2311,2314,2315,2317,2318,2321],{},[145,2308,2309],{},"cg doctor"," does not ask PyPI for a newer release and ",[145,2312,2313],{},"cg --version"," does not show the cached notice (",[1147,2316,26],{"href":27},"); also off when ",[145,2319,2320],{},"CI"," is set",[1032,2323,2324,2329],{},[1047,2325,2326],{},[145,2327,2328],{},"CG_NO_HOOKS=1",[1047,2330,2331,2332,2335,2336,1149],{},"git hooks installed by ",[145,2333,2334],{},"cg hooks"," do nothing for that command (",[1147,2337,26],{"href":2338},"\u002Fdocs\u002Fcli#hooks",[1032,2340,2341,2346],{},[1047,2342,2343],{},[145,2344,2345],{},"CG_NO_STALE_CHECK=1",[1047,2347,2348,2349,1159,2352,1149],{},"MCP tool replies skip the staleness ",[145,2350,2351],{},"index note:",[1147,2353,62],{"href":2354},"\u002Fdocs\u002Fmcp#staleness",[1032,2356,2357,2362],{},[1047,2358,2359],{},[145,2360,2361],{},"CG_CACHE=DIR",[1047,2363,2364,2365,2368,2369,1188,2372,1167,2375,2378,2379,1149],{},"cache root (else ",[145,2366,2367],{},"%LOCALAPPDATA%\\cg"," on Windows, ",[145,2370,2371],{},"$XDG_CACHE_HOME\u002Fcg",[145,2373,2374],{},"~\u002F.cache\u002Fcg",[145,2376,2377],{},"cg clean"," empties it (",[1147,2380,2382],{"href":2381},"\u002Fdocs\u002Fcli#clean","clean",[1032,2384,2385,2390],{},[1047,2386,2387],{},[145,2388,2389],{},"CG_NODE=PATH",[1047,2391,2392,2393,2396,2397,2400,2401,1149],{},"JavaScript runtime for the TypeScript extractor (Node.js or Bun; a path or a name on PATH); else ",[145,2394,2395],{},"node",", then ",[145,2398,2399],{},"bun"," on PATH (",[1147,2402,46],{"href":2403},"\u002Fdocs\u002Finstall#javascript-runtime",[1032,2405,2406,2421],{},[1047,2407,2408,1188,2411,1188,2414,1188,2417,2420],{},[145,2409,2410],{},"CG_RUST_SCIP=0",[145,2412,2413],{},"CG_C_SCIP=0",[145,2415,2416],{},"CG_COMPDB",[145,2418,2419],{},"CG_CFAMILY",", …",[1047,2422,2423,2424,1149],{},"Rust \u002F C \u002F C++ options (",[1147,2425,2427],{"href":2426},"\u002Fdocs\u002Fnative#environment-variables","environment variables",[1032,2429,2430,2435],{},[1047,2431,2432],{},[145,2433,2434],{},"CG_JAVA_SCIP=1",[1047,2436,2437,2438,1149],{},"run scip-java on the Gradle \u002F Maven build (opt-in; it runs the build and can clean build caches). One run per project root, shared with Kotlin (",[1147,2439,2441],{"href":2440},"\u002Fdocs\u002Fjava#exact-mode","Java exact mode",[1032,2443,2444,2449],{},[1047,2445,2446],{},[145,2447,2448],{},"CG_JAVA_SCIP_FILE",[1047,2450,2451,2452,2455],{},"prebuilt scip-java index. Wins over ",[145,2453,2454],{},"CG_KOTLIN_SCIP_FILE"," when both are set",[1032,2457,2458,2465],{},[1047,2459,2460,1188,2463],{},[145,2461,2462],{},"CG_KOTLIN_SCIP=1",[145,2464,2454],{},[1047,2466,2467,2468,2471,2472,1149],{},"same scip-java run and index as the ",[145,2469,2470],{},"CG_JAVA_SCIP*"," names. Either opt-in starts the one run (",[1147,2473,2475],{"href":2474},"\u002Fdocs\u002Fkotlin#exact-mode","Kotlin exact mode",[141,2477,2478,2479,2482,2483,2486,2487,2490,2491,1255,2494,2486,2497,1272],{},"The ",[145,2480,2481],{},"CODEGRAPH_*"," names were removed in 0.19.0: rename ",[145,2484,2485],{},"CODEGRAPH_\u003CNAME>"," to ",[145,2488,2489],{},"CG_\u003CNAME>",", and rename ",[145,2492,2493],{},"CODEGRAPH_CACHE",[145,2495,2496],{},"CODEGRAPH_CACHE_DIR",[145,2498,2499],{},"CG_CACHE",[2501,2502,2503],"style",{},"html pre.shiki code .sZJo5, html code.shiki .sZJo5{--shiki-light:#65A30D;--shiki-default:#65A30D;--shiki-dark:#84CC16}html pre.shiki code .sha9Y, html code.shiki .sha9Y{--shiki-light:#9F8CFF;--shiki-default:#9F8CFF;--shiki-dark:#C4B5FD}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZ_TN, html code.shiki .sZ_TN{--shiki-light:#71717A;--shiki-default:#71717A;--shiki-dark:#A1A1AA}html pre.shiki code .sbOAO, html code.shiki .sbOAO{--shiki-light:#3F6212;--shiki-default:#3F6212;--shiki-dark:#A3E635}html pre.shiki code .s4LKg, html code.shiki .s4LKg{--shiki-light:#4D7C0F;--shiki-default:#4D7C0F;--shiki-dark:#84CC16}html pre.shiki code .sZWGQ, html code.shiki .sZWGQ{--shiki-light:#8B5CF6;--shiki-default:#8B5CF6;--shiki-dark:#C4B5FD}html pre.shiki code .seS0s, html code.shiki .seS0s{--shiki-light:#71717A;--shiki-light-font-style:italic;--shiki-default:#71717A;--shiki-default-font-style:italic;--shiki-dark:#A1A1AA;--shiki-dark-font-style:italic}",{"title":168,"searchDepth":227,"depth":190,"links":2505},[2506,2507,2508,2509,2510,2511],{"id":160,"depth":190,"text":161},{"id":1316,"depth":190,"text":1317},{"id":1425,"depth":190,"text":1426},{"id":1604,"depth":190,"text":1605},{"id":1925,"depth":190,"text":1926},{"id":2246,"depth":190,"text":2247},"code-graph indexes a project with zero configuration. A .cg.yaml (or .cg.yml) at the indexed root is optional. The CLI, the MCP index tool and the visual view read it on every index. Command-line flags take precedence.","md",{},true,{"title":34,"description":2512},"4PBJC6bAi22VmQbDxUx1vfTJxI9FVw8SvdA6WSKBYN4",[2519,2521],{"title":30,"path":31,"stem":32,"description":2520,"children":-1},"Every positive answer has evidence (file:line, a confidence label). Completeness is the\nother half: which part of the repo that answer was drawn from, so \"no callers\" is reliable when\nthe index is complete, and an agent knows where to fall back to text search when it is not.",{"title":38,"path":39,"stem":40,"description":2522,"children":-1},"A Postgres server, Redis, SMTP, LDAP, SFTP or S3 bucket is one node. The address usually lives\nin configuration, not in the call.",1792170232405]