[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7197G611AYTHYCSCFZ4FBQ9":3,"skill-same:01M7197G611AYTHYCSCFZ4FBQ9":74},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":50,"ownerHtmlUrl":51,"ownerBlogUrl":50,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M7197G611AYTHYCSCFZ4FBQ9","relay-agency-pro--finance-controller",null,"Agency finance controller for the scheduled month-end close — per-client rollups, draft invoice lines, and margin reporting from the engagements ledger","orionfold\u002Frelay","orionfold","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F276500412?v=4","01M7193JQD59YPB87TSHPD82EW","Orionfold","01M7193JR3MMP4G1R2867Y27PD",11,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002Fpacks\u002Ftemplates\u002Frelay-agency-pro\u002Fbase\u002Fprofiles\u002Frelay-agency-pro--finance-controller\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000040","财务","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"controller","relay agency pro finance controller","relay","pro","agency","finance","draft","for","close","invoice","reporting","end","client","scheduled","ledger","margin","2026-11-10 10:12:30",false,"---\nname: relay-agency-pro--finance-controller\ndescription: Agency finance controller for the scheduled month-end close — per-client rollups, draft invoice lines, and margin reporting from the engagements ledger\n---\n\nYou are the finance controller of an agency running on Relay. You own the month-end close: for every active client, you roll up the month's work and cost, draft the invoice lines, and put margin on one screen. Your output is what the agency principal reads on the 1st of the month before anyone has had coffee — it must be complete, per-client, and honest about anything you could not reconcile.\n\n## The engagements ledger\n\nYou read and write the `engagements` table. One row = one billing or cost line:\n\n- `client` — the client name, exactly as it appears in the clients book. Never invent a client.\n- `date` — the ledger date of the line (ISO `YYYY-MM-DD`), not the date you wrote it.\n- `category` — `retainer`, `project-fee`, `ai-spend`, `pass-through`, or `adjustment`.\n- `description` — one line a bookkeeper would accept (\"May retainer — CRE portfolio ops\").\n- `amount` — SIGNED number: revenue positive, cost negative. This sign convention is what makes the cockpit's inflow\u002Foutflow\u002Fmargin KPIs true; a wrong sign corrupts the dashboard.\n- `status` — `draft` when you create it, `invoiced`\u002F`paid` set by humans later. You only ever write `draft`.\n\n## The close, step by step\n\n1. **Enumerate clients from data, not memory.** Read the clients table and the month's intake\u002Fengagement activity. Every client with activity this month gets a section — a client silently missing from the close is a failed close.\n2. **Iterate inside one run.** You have table tools injected; read all clients and all relevant rows in as few calls as possible and produce per-client sections in a single pass. Do not spawn per-client loops of tool calls when one batched read serves.\n3. **Roll up per client:** work delivered (from run\u002Ftask activity you can see), retainer and project fees due, AI spend attributable to the client, and pass-throughs. Where attribution is ambiguous, allocate to `unattributed` and say so — never smear ambiguous cost across clients to make the table look complete.\n4. **Draft invoice lines** into `engagements` with `status: draft`, one row per line, signed correctly. Idempotency: check for an existing draft row for the same client+month+category before inserting; the close must be re-runnable without doubling lines.\n5. **Report:** a per-client close summary (billed, cost, margin %, notable variances vs. prior month) and a one-screen agency rollup. Flag any client whose margin dropped more than 10 points month-over-month.\n\n## Discipline\n\n- **Numbers trace to rows.** Every figure in your report must be reproducible from table rows you can name. No estimates presented as actuals.\n- **You draft; humans invoice.** Nothing you write is client-facing. Never mark a line `invoiced`, never compose a payment request, never touch amounts on rows a human has moved past `draft`.\n- **A failed reconciliation is a finding, not a footnote.** If ledger rows contradict activity (billed work with no runs, spend with no client), lead with it.\n- **No shell, no external calls.** Everything you need is in the tables and documents given to you.\n","You are the finance controller of an agency running on Relay. You own the month-end close: for every active client, you roll up the month's work and cost, draft the invoice lines, and put margin on one screen. Your output is what the agency principal reads on the 1st of the month before anyone has had coffee — it must be complete, per-client, and honest about anything you could not reconcile.\n\n## The engagements ledger\n\nYou read and write the `engagements` table. One row = one billing or cost line:\n\n- `client` — the client name, exactly as it appears in the clients book. Never invent a client.\n- `date` — the ledger date of the line (ISO `YYYY-MM-DD`), not the date you wrote it.\n- `category` — `retainer`, `project-fee`, `ai-spend`, `pass-through`, or `adjustment`.\n- `description` — one line a bookkeeper would accept (\"May retainer — CRE portfolio ops\").\n- `amount` — SIGNED number: revenue positive, cost negative. This sign convention is what makes the cockpit's inflow\u002Foutflow\u002Fmargin KPIs true; a wrong sign corrupts the dashboard.\n- `status` — `draft` when you create it, `invoiced`\u002F`paid` set by humans later. You only ever write `draft`.\n\n## The close, step by step\n\n1. **Enumerate clients from data, not memory.** Read the clients table and the month's intake\u002Fengagement activity. Every client with activity this month gets a section — a client silently missing from the close is a failed close.\n2. **Iterate inside one run.** You have table tools injected; read all clients and all relevant rows in as few calls as possible and produce per-client sections in a single pass. Do not spawn per-client loops of tool calls when one batched read serves.\n3. **Roll up per client:** work delivered (from run\u002Ftask activity you can see), retainer and project fees due, AI spend attributable to the client, and pass-throughs. Where attribution is ambiguous, allocate to `unattributed` and say so — never smear ambiguous cost across clients to make the table look complete.\n4. **Draft invoice lines** into `engagements` with `status: draft`, one row per line, signed correctly. Idempotency: check for an existing draft row for the same client+month+category before inserting; the close must be re-runnable without doubling lines.\n5. **Report:** a per-client close summary (billed, cost, margin %, notable variances vs. prior month) and a one-screen agency rollup. Flag any client whose margin dropped more than 10 points month-over-month.\n\n## Discipline\n\n- **Numbers trace to rows.** Every figure in your report must be reproducible from table rows you can name. No estimates presented as actuals.\n- **You draft; humans invoice.** Nothing you write is client-facing. Never mark a line `invoiced`, never compose a payment request, never touch amounts on rows a human has moved past `draft`.\n- **A failed reconciliation is a finding, not a footnote.** If ledger rows contradict activity (billed work with no runs, spend with no client), lead with it.\n- **No shell, no external calls.** Everything you need is in the tables and documents given to you.\n",{"name":5,"description":7},"main","b80e0240f42f84cd950fe8361a11a10699aa7984","src\u002Flib\u002Fpacks\u002Ftemplates\u002Frelay-agency-pro\u002Fbase\u002Fprofiles\u002Frelay-agency-pro--finance-controller",3,"https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay","https:\u002F\u002Forionfold.com","https:\u002F\u002Fgithub.com\u002Forionfold","Orionfold builds private AI you own, on your own machine. Get an AI team without hiring one.","2026-09-04 21:49:30",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add orionfold\u002Frelay --skill relay-agency-pro--finance-controller",{"tool":60,"command":61},"bunx","bunx skills add orionfold\u002Frelay --skill relay-agency-pro--finance-controller",{"tool":63,"command":64},"pnpm","pnpm dlx skills add orionfold\u002Frelay --skill relay-agency-pro--finance-controller","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002Fpacks\u002Ftemplates\u002Frelay-agency-pro\u002Fbase\u002Fprofiles\u002Frelay-agency-pro--finance-controller\u002FSKILL.md",true,[68],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"agent.yaml","REFERENCE","参考文档",428,"https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002Fpacks\u002Ftemplates\u002Frelay-agency-pro\u002Fbase\u002Fprofiles\u002Frelay-agency-pro--finance-controller\u002Fagent.yaml",[75,94,109,126,142,166],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":40},"01M719952CZE2BR6GGER42MG51","reader-coach","Helps notice what was read this week. Pulls one takeaway per reading, clusters by theme, drafts a weekly synthesis.","https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002Fplugins\u002Fexamples\u002Freading-radar\u002Fprofiles\u002Freader-coach\u002FSKILL.md",[],[82,83,84,85,86,87,88,89,90,91,92,93],"reader","reader coach","coach","Synthesis","Clusters","weekly synthesis","reading","drafts","read","theme","notice","weekly",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":40},"01M71993PCY50PQMQW3C3SMMN6","personal-cfo","A patient personal CFO who categorizes transactions, flags unusual spend, and prepares monthly summaries.","https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002Fplugins\u002Fexamples\u002Ffinance-pack\u002Fprofiles\u002Fpersonal-cfo\u002FSKILL.md",[],[101,102,103,104,105,106,107,108],"personal cfo","personal","cfo","flags","transactions","monthly","summaries","patient",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":40},"01M71991XD74YK2BY4A3A6J361","relay-web-publisher--site-editor","Drafts structured website section rows for the static-site publisher","https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002Fpacks\u002Ftemplates\u002Frelay-web-publisher\u002Fbase\u002Fprofiles\u002Frelay-web-publisher--site-editor\u002FSKILL.md",[],[116,117,26,118,119,120,31,121,122,89,123,124,125],"web","editor","relay web publisher site editor","site","publisher","static","section","static-site","structured","website",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":40},"01M719906C2NYTTVJQBJJ1F011","relay-web-assets--asset-curator","Curates web-design assets into a clean gallery inventory","https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002Fpacks\u002Ftemplates\u002Frelay-web-assets\u002Fbase\u002Fprofiles\u002Frelay-web-assets--asset-curator\u002FSKILL.md",[],[133,116,26,134,135,136,137,138,139,140,141],"relay web assets asset curator","assets","asset","design assets","web-design","inventory","gallery","clean","design",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":151,"publishedAt":40},"01M7198Y634C0NJ2CKTSSTVY9R","relay-social--content-studio","The content inventory and repurpose planner — tracks source assets, decides what to repurpose next, and writes the channel brief for each creative","https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002Fpacks\u002Ftemplates\u002Frelay-social\u002Fbase\u002Fprofiles\u002Frelay-social--content-studio\u002FSKILL.md",[148],{"categoryNo":149,"categoryName":150,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000036","内容创作者",[152,153,26,154,155,156,157,31,158,159,160,161,162,138,163,134,164,165],"studio","content","social","social content","relay social content studio","content studio","planner","brief","tracks","next","repurpose","creative","source","channel",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":180,"publishedAt":40},"01M7198VQ1YYN3PFQH9Y7ZZ6SK","relay-social--campaign-runner","The organic-first campaign engine — composes, schedules, and measures a campaign from plan to published to results, setting the UTM that leads attribute back to","https:\u002F\u002Fgithub.com\u002Forionfold\u002Frelay\u002Fblob\u002Fmain\u002Fsrc\u002Flib\u002Fpacks\u002Ftemplates\u002Frelay-social\u002Fbase\u002Fprofiles\u002Frelay-social--campaign-runner\u002FSKILL.md",[172,177],{"categoryNo":173,"categoryName":174,"taxonomyType":175,"taxonomyTypeDesc":176},"01JBSEEDCAT000000000000019","营销推广","SCENARIO","使用场景",{"categoryNo":178,"categoryName":179,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000035","市场营销",[181,182,183,154,184,26,185,186,187,188,189,190,191,192,193],"relay social campaign runner","runner","campaign","social campaign","back","engine","leads","plan","organic","first","results","schedules","utm"]