{"id":"6520bf7b-7b67-454c-b386-7cba4bf53ab7","shortId":"xNhYVG","kind":"skill","title":"zig-project","tagline":"Modern Zig project architecture guide. Use when creating Zig projects (systems programming, CLI tools, game dev, high-performance services). Covers explicit allocators, comptime, error handling, and build system.","description":"# Zig Project Architecture\n\n## Core Principles\n\n- **No hidden behavior** — No hidden allocations, no hidden control flow, no macros\n- **Explicit allocators** — Pass allocator as parameter, never use global allocator\n- **Comptime over macros** — Use comptime for generics and metaprogramming\n- **Error unions** — Use `!T` for explicit error handling, avoid `anyerror`\n- **defer/errdefer** — Resource cleanup at scope exit\n- **No backwards compatibility** — Delete, don't deprecate. Change directly\n- **LiteLLM for LLM APIs** — Use LiteLLM proxy for all LLM integrations\n\n---\n\n## No Backwards Compatibility\n\n> **Delete unused code. Change directly. No compatibility layers.**\n\n```zig\n// ❌ BAD: Deprecated function kept around\n/// Deprecated: Use newFunction instead\npub fn oldFunction() void {\n    @compileLog(\"oldFunction is deprecated\");\n    newFunction();\n}\n\n// ❌ BAD: Alias for renamed functions\npub const old_name = new_name; // \"for backwards compatibility\"\n\n// ❌ BAD: Unused parameters\nfn process(_: *const Config, data: []const u8) !void {\n    _ = data;\n}\n\n// ✅ GOOD: Just delete and update all usages\npub fn newFunction() void {\n    // ...\n}\n\n// ✅ GOOD: Remove unused parameters entirely\nfn process(data: []const u8) !void {\n    // ...\n}\n```\n\n---\n\n## LiteLLM for LLM APIs\n\n> **Use LiteLLM proxy. Don't call provider APIs directly.**\n\n```zig\nconst std = @import(\"std\");\nconst http = std.http;\n\npub const LLMClient = struct {\n    allocator: std.mem.Allocator,\n    base_url: []const u8,\n    api_key: []const u8,\n\n    pub fn init(allocator: std.mem.Allocator, base_url: []const u8, api_key: []const u8) LLMClient {\n        return .{\n            .allocator = allocator,\n            .base_url = base_url,  // \"http://localhost:4000\"\n            .api_key = api_key,\n        };\n    }\n\n    pub fn complete(self: *LLMClient, prompt: []const u8, model: []const u8) ![]u8 {\n        // Use OpenAI-compatible API through LiteLLM proxy\n        var client = http.Client{ .allocator = self.allocator };\n        defer client.deinit();\n\n        // Build request to LiteLLM proxy...\n        _ = prompt;\n        _ = model;\n        return \"\";\n    }\n};\n```\n\n---\n\n## Quick Start\n\n### 1. Initialize Project\n\n```bash\n# Create new project\nmkdir myapp && cd myapp\nzig init\n\n# Or create executable project\nzig init-exe\n\n# Or create library project\nzig init-lib\n```\n\n### 2. Project Structure\n\n```\nmyapp/\n├── build.zig           # Build configuration (in Zig)\n├── build.zig.zon       # Package manifest (dependencies)\n├── src/\n│   ├── main.zig        # Entry point (for exe)\n│   ├── root.zig        # Library root (for lib)\n│   └── lib/            # Internal modules\n│       └── utils.zig\n├── tests/              # Integration tests (optional)\n└── lib/                # Vendored dependencies\n```\n\n### 3. Core Files\n\n**build.zig.zon** (Package Manifest)\n```zig\n.{\n    .name = \"myapp\",\n    .version = \"0.1.0\",\n    .dependencies = .{\n        // .some_dep = .{\n        //     .url = \"https://github.com/...\",\n        //     .hash = \"...\",\n        // },\n    },\n    .paths = .{\n        \"build.zig\",\n        \"build.zig.zon\",\n        \"src\",\n    },\n}\n```\n\n**build.zig** (Build Script)\n```zig\nconst std = @import(\"std\");\n\npub fn build(b: *std.Build) void {\n    const target = b.standardTargetOptions(.{});\n    const optimize = b.standardOptimizeOption(.{});\n\n    const exe = b.addExecutable(.{\n        .name = \"myapp\",\n        .root_source_file = b.path(\"src/main.zig\"),\n        .target = target,\n        .optimize = optimize,\n    });\n\n    b.installArtifact(exe);\n\n    // Run step\n    const run_cmd = b.addRunArtifact(exe);\n    run_cmd.step.dependOn(b.getInstallStep());\n    const run_step = b.step(\"run\", \"Run the application\");\n    run_step.dependOn(&run_cmd.step);\n\n    // Test step\n    const unit_tests = b.addTest(.{\n        .root_source_file = b.path(\"src/main.zig\"),\n        .target = target,\n        .optimize = optimize,\n    });\n    const run_unit_tests = b.addRunArtifact(unit_tests);\n    const test_step = b.step(\"test\", \"Run unit tests\");\n    test_step.dependOn(&run_unit_tests.step);\n}\n```\n\n---\n\n## Explicit Allocator Pattern\n\n### Core Principle\n\nEvery function that allocates must receive an allocator parameter.\n\n```zig\nconst std = @import(\"std\");\n\n// ❌ BAD: Hidden allocation (don't do this)\nvar global_allocator: std.mem.Allocator = undefined;\nfn badAlloc() ![]u8 {\n    return global_allocator.alloc(u8, 100);\n}\n\n// ✅ GOOD: Explicit allocator\nfn goodAlloc(allocator: std.mem.Allocator) ![]u8 {\n    return allocator.alloc(u8, 100);\n}\n```\n\n### Common Allocators\n\n```zig\nconst std = @import(\"std\");\n\npub fn main() !void {\n    // General purpose (with safety checks in debug)\n    var gpa = std.heap.GeneralPurposeAllocator(.{}){};\n    defer _ = gpa.deinit();\n    const allocator = gpa.allocator();\n\n    // Arena (bulk alloc/dealloc)\n    var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);\n    defer arena.deinit();\n    const arena_alloc = arena.allocator();\n\n    // Fixed buffer (no heap)\n    var buffer: [1024]u8 = undefined;\n    var fba = std.heap.FixedBufferAllocator.init(&buffer);\n    const fixed_alloc = fba.allocator();\n\n    // Page allocator (direct OS calls)\n    const page_alloc = std.heap.page_allocator;\n\n    _ = allocator;\n    _ = arena_alloc;\n    _ = fixed_alloc;\n    _ = page_alloc;\n}\n```\n\n### Arena Pattern (Request-Scoped)\n\n```zig\nfn handleRequest(permanent_allocator: std.mem.Allocator) !void {\n    // Create arena for this request\n    var arena = std.heap.ArenaAllocator.init(permanent_allocator);\n    defer arena.deinit();  // Free ALL request memory at once\n\n    const allocator = arena.allocator();\n\n    // All allocations use arena - no individual frees needed\n    const data = try fetchData(allocator);\n    const processed = try processData(allocator, data);\n    try sendResponse(processed);\n\n    // arena.deinit() frees everything\n}\n```\n\n---\n\n## Error Handling\n\n### Error Unions\n\n```zig\nconst std = @import(\"std\");\n\n// Define specific error set\nconst FileError = error{\n    NotFound,\n    AccessDenied,\n    OutOfMemory,\n    EndOfStream,\n};\n\n// Return error union\nfn readFile(allocator: std.mem.Allocator, path: []const u8) FileError![]u8 {\n    const file = std.fs.cwd().openFile(path, .{}) catch |err| {\n        return switch (err) {\n            error.FileNotFound => FileError.NotFound,\n            error.AccessDenied => FileError.AccessDenied,\n            else => FileError.NotFound,\n        };\n    };\n    defer file.close();\n\n    return file.readToEndAlloc(allocator, 1024 * 1024) catch FileError.OutOfMemory;\n}\n```\n\n### try / catch / errdefer\n\n```zig\nfn processFile(allocator: std.mem.Allocator, path: []const u8) !void {\n    // try: propagate error up\n    const data = try readFile(allocator, path);\n    errdefer allocator.free(data);  // cleanup on error\n\n    // catch: handle error locally\n    const parsed = parseData(data) catch |err| {\n        std.log.err(\"Parse failed: {}\", .{err});\n        return err;\n    };\n\n    try saveResult(parsed);\n}\n```\n\n### Error Formatting\n\n```zig\nfn example() !void {\n    doSomething() catch |err| {\n        std.log.err(\"Operation failed: {s}\", .{@errorName(err)});\n        return err;\n    };\n}\n```\n\n---\n\n## Comptime (Compile-Time Execution)\n\n### Generic Functions\n\n```zig\nfn max(comptime T: type, a: T, b: T) T {\n    return if (a > b) a else b;\n}\n\n// Usage\nconst result = max(i32, 10, 20);  // Returns 20\nconst float_result = max(f64, 1.5, 2.5);  // Returns 2.5\n```\n\n### Generic Data Structures\n\n```zig\npub fn ArrayList(comptime T: type) type {\n    return struct {\n        const Self = @This();\n\n        items: []T,\n        capacity: usize,\n        allocator: std.mem.Allocator,\n\n        pub fn init(allocator: std.mem.Allocator) Self {\n            return .{\n                .items = &[_]T{},\n                .capacity = 0,\n                .allocator = allocator,\n            };\n        }\n\n        pub fn deinit(self: *Self) void {\n            if (self.capacity > 0) {\n                self.allocator.free(self.items.ptr[0..self.capacity]);\n            }\n        }\n\n        pub fn append(self: *Self, item: T) !void {\n            // Implementation...\n            _ = item;\n        }\n    };\n}\n\n// Usage\nvar list = ArrayList(u32).init(allocator);\ndefer list.deinit();\n```\n\n### Compile-Time Validation\n\n```zig\nfn validateConfig(comptime config: Config) void {\n    if (config.buffer_size == 0) {\n        @compileError(\"buffer_size must be > 0\");\n    }\n    if (config.buffer_size > 1024 * 1024) {\n        @compileError(\"buffer_size too large\");\n    }\n}\n```\n\n---\n\n## Testing\n\n### Inline Tests\n\n```zig\nconst std = @import(\"std\");\nconst testing = std.testing;\n\nfn add(a: i32, b: i32) i32 {\n    return a + b;\n}\n\ntest \"add positive numbers\" {\n    try testing.expectEqual(@as(i32, 5), add(2, 3));\n}\n\ntest \"add negative numbers\" {\n    try testing.expectEqual(@as(i32, -1), add(1, -2));\n}\n```\n\n### Testing with Allocator\n\n```zig\ntest \"allocation test\" {\n    // Use testing allocator for leak detection\n    const allocator = testing.allocator;\n\n    const data = try allocator.alloc(u8, 100);\n    defer allocator.free(data);\n\n    try testing.expect(data.len == 100);\n}\n```\n\n### Testing Errors\n\n```zig\ntest \"expect error\" {\n    const result = failingFunction();\n    try testing.expectError(error.SomeError, result);\n}\n\ntest \"expect no error\" {\n    const result = try successFunction();\n    try testing.expect(result > 0);\n}\n```\n\n### Run Tests\n\n```bash\n# Run all tests\nzig build test\n\n# Run tests with output\nzig test src/main.zig\n\n# Run specific test\nzig test src/main.zig --test-filter \"add positive\"\n```\n\n---\n\n## Common Commands\n\n```bash\n# Build\nzig build                    # Debug build\nzig build -Doptimize=ReleaseFast  # Release build\n\n# Run\nzig build run               # Build and run\n\n# Test\nzig build test              # Run tests\n\n# Format\nzig fmt src/                # Format code\n\n# Cross-compile\nzig build -Dtarget=x86_64-linux-gnu\nzig build -Dtarget=aarch64-macos\nzig build -Dtarget=x86_64-windows\n\n# Use as C compiler\nzig cc -o output input.c\nzig c++ -o output input.cpp\n```\n\n---\n\n## Checklist\n\n```markdown\n## Project Setup\n- [ ] build.zig configured\n- [ ] build.zig.zon with metadata\n- [ ] Source in src/ directory\n\n## Architecture\n- [ ] Explicit allocators everywhere\n- [ ] No global state\n- [ ] Error sets defined\n- [ ] errdefer for cleanup\n\n## Quality\n- [ ] Tests with std.testing\n- [ ] Memory leak detection in tests\n- [ ] zig fmt applied\n- [ ] Comptime validation where appropriate\n\n## Build\n- [ ] Debug and Release configs\n- [ ] Cross-compilation targets\n- [ ] Test step defined\n```\n\n---\n\n## See Also\n\n- [reference/architecture.md](reference/architecture.md) — Project structure patterns\n- [reference/tech-stack.md](reference/tech-stack.md) — Libraries and tools\n- [reference/patterns.md](reference/patterns.md) — Zig idioms and patterns","tags":["zig","project","claude","arsenal","majiayu000","agent-skills","ai-agents","ai-coding-assistant","automation","claude-code","code-review","developer-tools"],"capabilities":["skill","source-majiayu000","skill-zig-project","topic-agent-skills","topic-ai-agents","topic-ai-coding-assistant","topic-automation","topic-claude","topic-claude-code","topic-code-review","topic-developer-tools","topic-devops","topic-productivity","topic-prompt-engineering","topic-python"],"categories":["claude-arsenal"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/majiayu000/claude-arsenal/zig-project","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add majiayu000/claude-arsenal","source_repo":"https://github.com/majiayu000/claude-arsenal","install_from":"skills.sh"}},"qualityScore":"0.464","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 29 github stars · SKILL.md body (10,801 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-01T07:01:17.741Z","embedding":null,"createdAt":"2026-04-18T22:24:38.855Z","updatedAt":"2026-05-01T07:01:17.741Z","lastSeenAt":"2026-05-01T07:01:17.741Z","tsv":"'-1':941 '-2':944 '/...':363 '0':834,845,848,883,889,998 '0.1.0':356 '1':282,943 '1.5':798 '10':789 '100':493,505,966,973 '1024':552,691,692,893,894 '2':311,931 '2.5':799,801 '20':790,792 '3':346,932 '4000':240 '5':929 '64':1066,1080 'aarch64':1074 'aarch64-macos':1073 'accessdeni':655 'add':912,922,930,934,942,1024 'alia':136 'alloc':26,43,51,53,59,208,221,233,234,268,457,464,468,477,484,496,499,507,530,539,544,561,564,570,572,573,575,577,579,589,601,611,614,625,630,663,690,701,715,822,827,835,836,866,947,950,954,959,1111 'alloc/dealloc':534 'allocator.alloc':503,964 'allocator.free':718,968 'also':1151 'anyerror':78 'api':97,186,194,214,227,241,243,261 'append':852 'appli':1133 'applic':421 'appropri':1137 'architectur':7,35,1109 'arena':532,536,543,574,580,593,598,616 'arena.allocator':545,612 'arena.deinit':541,603,635 'around':121 'arraylist':808,863 'avoid':77 'b':380,774,780,783,915,920 'b.addexecutable':391 'b.addrunartifact':410,443 'b.addtest':429 'b.getinstallstep':413 'b.installartifact':403 'b.path':397,433 'b.standardoptimizeoption':388 'b.standardtargetoptions':385 'b.step':417,449 'backward':86,106,147 'bad':117,135,149,475 'badalloc':488 'base':210,223,235,237 'bash':285,1001,1028 'behavior':40 'buffer':547,551,558,885,896 'build':31,272,316,370,379,1006,1029,1031,1033,1035,1039,1042,1044,1049,1063,1071,1077,1138 'build.zig':315,366,369,1100 'build.zig.zon':320,349,367,1102 'bulk':533 'c':1084,1092 'call':192,567 'capac':820,833 'catch':675,693,696,723,731,749 'cc':1087 'cd':291 'chang':92,111 'check':521 'checklist':1096 'cleanup':81,720,1121 'cli':16 'client':266 'client.deinit':271 'cmd':409 'code':110,1058 'command':1027 'common':506,1026 'compat':87,107,114,148,260 'compil':761,870,1061,1085,1145 'compile-tim':760,869 'compileerror':884,895 'compilelog':130 'complet':247 'comptim':27,60,64,759,769,809,876,1134 'config':155,877,878,1142 'config.buffer':881,891 'configur':317,1101 'const':141,154,157,180,197,201,205,212,216,225,229,251,254,373,383,386,389,407,414,426,439,446,471,509,529,542,559,568,610,621,626,643,651,666,670,704,711,727,785,793,815,904,908,958,961,980,991 'control':46 'core':36,347,459 'cover':24 'creat':11,286,296,304,592 'cross':1060,1144 'cross-compil':1059,1143 'data':156,160,179,622,631,712,719,730,803,962,969 'data.len':972 'debug':523,1032,1139 'defer':270,527,540,602,686,867,967 'defer/errdefer':79 'defin':647,1118,1149 'deinit':839 'delet':88,108,163 'dep':359 'depend':323,345,357 'deprec':91,118,122,133 'detect':957,1128 'dev':19 'direct':93,112,195,565 'directori':1108 'doptim':1036 'dosometh':748 'dtarget':1064,1072,1078 'els':684,782 'endofstream':657 'entir':176 'entri':326 'err':676,679,732,736,738,750,756,758 'errdef':697,717,1119 'error':28,69,75,638,640,649,653,659,709,722,725,742,975,979,990,1116 'error.accessdenied':682 'error.filenotfound':680 'error.someerror':985 'errornam':755 'everi':461 'everyth':637 'everywher':1112 'exampl':746 'exe':302,329,390,404,411 'execut':297,763 'exit':84 'expect':978,988 'explicit':25,50,74,456,495,1110 'f64':797 'fail':735,753 'failingfunct':982 'fba':556 'fba.allocator':562 'fetchdata':624 'file':348,396,432,671 'file.close':687 'file.readtoendalloc':689 'fileerror':652,668 'fileerror.accessdenied':683 'fileerror.notfound':681,685 'fileerror.outofmemory':694 'filter':1023 'fix':546,560,576 'float':794 'flow':47 'fmt':1055,1132 'fn':127,152,169,177,219,246,378,487,497,514,586,661,699,745,767,807,825,838,851,874,911 'format':743,1053,1057 'free':604,619,636 'function':119,139,462,765 'game':18 'general':517 'generic':66,764,802 'github.com':362 'github.com/...':361 'global':58,483,1114 'global_allocator.alloc':491 'gnu':1069 'good':161,172,494 'goodalloc':498 'gpa':525 'gpa.allocator':531 'gpa.deinit':528 'guid':8 'handl':29,76,639,724 'handlerequest':587 'hash':364 'heap':549 'hidden':39,42,45,476 'high':21 'high-perform':20 'http':202 'http.client':267 'i32':788,914,916,917,928,940 'idiom':1165 'implement':858 'import':199,375,473,511,645,906 'individu':618 'init':220,294,301,309,826,865 'init-ex':300 'init-lib':308 'initi':283 'inlin':901 'input.c':1090 'input.cpp':1095 'instead':125 'integr':104,340 'intern':336 'item':818,831,855,859 'kept':120 'key':215,228,242,244 'larg':899 'layer':115 'leak':956,1127 'lib':310,334,335,343 'librari':305,331,1159 'linux':1068 'linux-gnu':1067 'list':862 'list.deinit':868 'litellm':94,99,183,188,263,275 'llm':96,103,185 'llmclient':206,231,249 'local':726 'localhost':239 'maco':1075 'macro':49,62 'main':515 'main.zig':325 'manifest':322,351 'markdown':1097 'max':768,787,796 'memori':607,1126 'metadata':1104 'metaprogram':68 'mkdir':289 'model':253,278 'modern':4 'modul':337 'must':465,887 'myapp':290,292,314,354,393 'name':143,145,353,392 'need':620 'negat':935 'never':56 'new':144,287 'newfunct':124,134,170 'notfound':654 'number':924,936 'o':1088,1093 'old':142 'oldfunct':128,131 'openai':259 'openai-compat':258 'openfil':673 'oper':752 'optim':387,401,402,437,438 'option':342 'os':566 'outofmemori':656 'output':1011,1089,1094 'packag':321,350 'page':563,569,578 'paramet':55,151,175,469 'pars':728,734,741 'parsedata':729 'pass':52 'path':365,665,674,703,716 'pattern':458,581,1156,1167 'perform':22 'perman':588,600 'point':327 'posit':923,1025 'principl':37,460 'process':153,178,627,634 'processdata':629 'processfil':700 'program':15 'project':3,6,13,34,284,288,298,306,312,1098,1154 'prompt':250,277 'propag':708 'provid':193 'proxi':100,189,264,276 'pub':126,140,168,204,218,245,377,513,806,824,837,850 'purpos':518 'qualiti':1122 'quick':280 'readfil':662,714 'receiv':466 'reference/architecture.md':1152,1153 'reference/patterns.md':1162,1163 'reference/tech-stack.md':1157,1158 'releas':1038,1141 'releasefast':1037 'remov':173 'renam':138 'request':273,583,596,606 'request-scop':582 'resourc':80 'result':786,795,981,986,992,997 'return':232,279,490,502,658,677,688,737,757,777,791,800,813,830,918 'root':332,394,430 'root.zig':330 'run':405,408,415,418,419,440,451,999,1002,1008,1015,1040,1043,1046,1051 'run_cmd.step':423 'run_cmd.step.dependon':412 'run_step.dependon':422 'run_unit_tests.step':455 'safeti':520 'saveresult':740 'scope':83,584 'script':371 'see':1150 'self':248,816,829,840,841,853,854 'self.allocator':269 'self.allocator.free':846 'self.capacity':844,849 'self.items.ptr':847 'sendrespons':633 'servic':23 'set':650,1117 'setup':1099 'size':882,886,892,897 'skill' 'skill-zig-project' 'sourc':395,431,1105 'source-majiayu000' 'specif':648,1016 'src':324,368,1056,1107 'src/main.zig':398,434,1014,1020 'start':281 'state':1115 'std':198,200,374,376,472,474,510,512,644,646,905,907 'std.build':381 'std.fs.cwd':672 'std.heap.arenaallocator.init':537,599 'std.heap.fixedbufferallocator.init':557 'std.heap.generalpurposeallocator':526 'std.heap.page':538,571 'std.http':203 'std.log.err':733,751 'std.mem.allocator':209,222,485,500,590,664,702,823,828 'std.testing':910,1125 'step':406,416,425,448,1148 'struct':207,814 'structur':313,804,1155 'successfunct':994 'switch':678 'system':14,32 'target':384,399,400,435,436,1146 'test':339,341,424,428,442,445,447,450,453,900,902,909,921,933,945,949,951,953,974,977,987,1000,1004,1007,1009,1013,1017,1019,1022,1047,1050,1052,1123,1130,1147 'test-filt':1021 'test_step.dependon':454 'testing.allocator':960 'testing.expect':971,996 'testing.expectequal':926,938 'testing.expecterror':984 'time':762,871 'tool':17,1161 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-coding-assistant' 'topic-automation' 'topic-claude' 'topic-claude-code' 'topic-code-review' 'topic-developer-tools' 'topic-devops' 'topic-productivity' 'topic-prompt-engineering' 'topic-python' 'tri':623,628,632,695,707,713,739,925,937,963,970,983,993,995 'type':771,811,812 'u32':864 'u8':158,181,213,217,226,230,252,255,256,489,492,501,504,553,667,669,705,965 'undefin':486,554 'union':70,641,660 'unit':427,441,444,452 'unus':109,150,174 'updat':165 'url':211,224,236,238,360 'usag':167,784,860 'use':9,57,63,71,98,123,187,257,615,952,1082 'usiz':821 'utils.zig':338 'valid':872,1135 'validateconfig':875 'var':265,482,524,535,550,555,597,861 'vendor':344 'version':355 'void':129,159,171,182,382,516,591,706,747,842,857,879 'window':1081 'x86':1065,1079 'zig':2,5,12,33,116,196,293,299,307,319,352,372,470,508,585,642,698,744,766,805,873,903,948,976,1005,1012,1018,1030,1034,1041,1048,1054,1062,1070,1076,1086,1091,1131,1164 'zig-project':1","prices":[{"id":"c705c245-028c-4874-8b1d-9d99b22eb1f1","listingId":"6520bf7b-7b67-454c-b386-7cba4bf53ab7","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"majiayu000","category":"claude-arsenal","install_from":"skills.sh"},"createdAt":"2026-04-18T22:24:38.855Z"}],"sources":[{"listingId":"6520bf7b-7b67-454c-b386-7cba4bf53ab7","source":"github","sourceId":"majiayu000/claude-arsenal/zig-project","sourceUrl":"https://github.com/majiayu000/claude-arsenal/tree/main/skills/zig-project","isPrimary":false,"firstSeenAt":"2026-04-18T22:24:38.855Z","lastSeenAt":"2026-05-01T07:01:17.741Z"}],"details":{"listingId":"6520bf7b-7b67-454c-b386-7cba4bf53ab7","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"majiayu000","slug":"zig-project","github":{"repo":"majiayu000/claude-arsenal","stars":29,"topics":["agent-skills","ai-agents","ai-coding-assistant","automation","claude","claude-code","code-review","developer-tools","devops","productivity","prompt-engineering","python","software-development","typescript","workflows"],"license":"mit","html_url":"https://github.com/majiayu000/claude-arsenal","pushed_at":"2026-04-29T04:12:22Z","description":"52 production-ready Claude Code skills and 7 specialized agents for software development, DevOps, product workflows, and automation.","skill_md_sha":"3cdb9dd01d5bedba70dec179277f01df3bbd43b7","skill_md_path":"skills/zig-project/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/majiayu000/claude-arsenal/tree/main/skills/zig-project"},"layout":"multi","source":"github","category":"claude-arsenal","frontmatter":{"name":"zig-project","description":"Modern Zig project architecture guide. Use when creating Zig projects (systems programming, CLI tools, game dev, high-performance services). Covers explicit allocators, comptime, error handling, and build system."},"skills_sh_url":"https://skills.sh/majiayu000/claude-arsenal/zig-project"},"updatedAt":"2026-05-01T07:01:17.741Z"}}