diff --git a/appstore-meta/data/apps/io.pilot.generallegal.json b/appstore-meta/data/apps/io.pilot.generallegal.json index f43c5e9..1bd1498 100644 --- a/appstore-meta/data/apps/io.pilot.generallegal.json +++ b/appstore-meta/data/apps/io.pilot.generallegal.json @@ -1,8 +1,8 @@ { "id": "io.pilot.generallegal", "name": "General Legal", - "tagline": "Attorney-backed contract review and Delaware company formation \u2014 flat-fee legal work from a licensed US law firm", - "description": "General Legal is a Y Combinator-backed law firm. This app puts a licensed\nattorney and a Delaware filing desk behind your agent \u2014 contract review and\ncompany formation, in one namespace.\n\nThe two halves have different requirements. Formation works the moment you\ninstall. Contract review needs a General Legal account and an API key.\n\n### Company formation \u2014 nothing to set up\n\nNo account, no key, no configuration. Call\n`generallegal.formation_options` and it works on a fresh install.\n\nYou will still need to pay: `formation_start_llc` and\n`formation_start_c_corp` return a payment link, and the founder pays there.\nUse the founder's real details \u2014 this files an actual Delaware company.\n\n### Contract review \u2014 bring your own API key\n\n1. Sign up at https://portal.general.legal/signup\n2. Open the account menu and choose **API keys**\n (https://portal.general.legal/api-keys)\n3. Create a key and copy it \u2014 the full value is shown **once**\n4. Import it into the app:\n\n```\nprintf '{\"GENERAL_LEGAL_API_KEY\":\"glk_YOUR_KEY\"}' > ~/.pilot/apps/io.pilot.generallegal/secrets.json\nchmod 600 ~/.pilot/apps/io.pilot.generallegal/secrets.json\npilotctl appstore restart io.pilot.generallegal\n```\n\nThe restart matters: the key is read at startup. Verify with\n`pilotctl appstore call io.pilot.generallegal generallegal.deals_list '{}'`.\nThe key stays on your machine, is never sent to the formation service, and\nscopes you to your own General Legal organization.\n\n### What it costs\n\nContract review is flat-fee, with no hourly billing and no minimums. The fee\ncovers every turn through signature, including negotiation with the\ncounterparty.\n\n| Work | Price |\n| --- | --- |\n| Contract, 3 pages or fewer | $250 |\n| Contract, 3-50 pages | $500 |\n| Contract, 50+ pages | $10 per page |\n| Drafting from scratch | $2,000 |\n| Delaware LLC | $190 instant / $210 standard / $260 next-day / $310 same-day |\n| Delaware C-corp | $218 standard / $268 next-day / $318 same-day |\n\n### What the app does\n\n**Company formation** \u2014 `formation_options` (free), `formation_start_llc`\n(**paid**), `formation_start_c_corp` (**paid**), `formation_status`,\n`formation_update`, `formation_documents` (free).\n\n**Contract review** \u2014 `deal_open` (**paid**), `document_upload` (**paid**),\n`thread_post` (**paid**, covered by the matter's flat fee), plus\n`deals_list`, `deal_get`, `thread_get`, `contracts_list`, `contract_get`,\n`version_download_link` (free) and `upload_begin`, `upload_chunk`,\n`upload_abort` (free \u2014 a document is staged in chunks because a single call\ncannot carry a file).\n\n### What costs money\n\nFive methods spend real money and will not warn you first:\n`formation_start_llc`, `formation_start_c_corp`, `deal_open`,\n`document_upload` and `thread_post`. Every other method is free.\n`generallegal.help` lists them under `billable_methods` with the price.", + "tagline": "Attorney-backed contract review and Delaware company formation — flat-fee legal work from a licensed US law firm", + "description": "General Legal is a Y Combinator-backed law firm. This app puts a licensed\nattorney and a Delaware filing desk behind your agent — contract review and\ncompany formation, in one namespace.\n\nNothing here needs a browser. Formation works the moment you install;\ncontract review needs a General Legal account, which the agent can open\nitself in three calls.\n\n### Company formation — nothing to set up\n\nNo account, no key, no configuration. Call\n`generallegal.formation_options` and it works on a fresh install.\n\nYou will still need to pay: `formation_start_llc` and\n`formation_start_c_corp` return a payment link, and the founder pays there.\nUse the founder's real details — this files an actual Delaware company.\n\n### Contract review — sign up from the agent\n\n1. `generallegal.signup_terms` returns the engagement letter (PDF). Read it:\n accepting it engages General Legal as your company's counsel.\n2. `generallegal.signup` with the company name, a contact email you can\n read, and a US billing city/state/ZIP. A six-digit code is emailed.\n3. `generallegal.signup_complete` with the `signup_id`, the code and\n `engagement_letter_accepted: true`.\n\nGeneral Legal issues one API key. The app saves it on this host and sends it\non every later call. It never appears in the reply, and you don't need to\nrestart. Verify with `generallegal.deals_list`. The key scopes you to your\nown General Legal organization and is never sent to the formation service.\n\nAlready have a key from https://portal.general.legal/api-keys? Save it with\n`generallegal.set_key '{\"api_key\":\"glk_...\"}'`. Lost it? Use\n`generallegal.key_recover`, then `generallegal.key_recover_complete`. This\nissues a replacement and revokes the old key.\n\n### What it costs\n\nContract review is flat-fee, with no hourly billing and no minimums. The fee\ncovers every turn through signature, including negotiation with the\ncounterparty.\n\n| Work | Price |\n| --- | --- |\n| Contract, 3 pages or fewer | $250 |\n| Contract, 3-50 pages | $500 |\n| Contract, 50+ pages | $10 per page |\n| Drafting from scratch | $2,000 |\n| Delaware LLC | $190 instant / $210 standard / $260 next-day / $310 same-day |\n| Delaware C-corp | $218 standard / $268 next-day / $318 same-day |\n\n### What the app does\n\n**Company formation** — `formation_options` (free), `formation_start_llc`\n(**paid**), `formation_start_c_corp` (**paid**), `formation_status`,\n`formation_update`, `formation_documents` (free).\n\n**Contract review** — `deal_open` (**paid**), `document_upload` (**paid**),\n`thread_post` (**paid**, covered by the matter's flat fee), plus\n`deals_list`, `deal_get`, `thread_get`, `contracts_list`, `contract_get`,\n`version_download_link` (free) and `upload_begin`, `upload_chunk`,\n`upload_abort` (free — a document is staged in chunks because a single call\ncannot carry a file).\n\n**Account** — `signup_terms`, `signup`, `signup_resend`,\n`signup_complete`, `key_recover`, `key_recover_complete`, `set_key` (all\nfree; signing up costs nothing until you open a matter).\n\n### What costs money\n\nFive methods spend real money and will not warn you first:\n`formation_start_llc`, `formation_start_c_corp`, `deal_open`,\n`document_upload` and `thread_post`. Every other method is free.\n`generallegal.help` lists them under `billable_methods` with the price.", "categories": [ "work" ], @@ -19,7 +19,7 @@ "llc", "c-corp" ], - "version": "0.1.0", + "version": "0.2.0", "vendor": "General Legal", "vendor_url": "https://general.legal", "license": "Apache-2.0", @@ -38,14 +38,14 @@ "summary": "File a sole-member Delaware LLC and get back a payment link plus a formation_id. No account or credentials needed to call it. 'instant' hands over a pre-formed shelf company; the other speeds file under a name you choose.", "example": "", "gated": "", - "billable": "Paid \u2014 files a real Delaware LLC. $190 instant / $210 standard / $260 next-day / $310 same-day, paid by the founder at the returned link." + "billable": "Paid — files a real Delaware LLC. $190 instant / $210 standard / $260 next-day / $310 same-day, paid by the founder at the returned link." }, { "name": "generallegal.formation_start_c_corp", "summary": "File a Delaware C-corp and get back a payment link plus a formation_id. No account or credentials needed to call it. The founder acts as sole incorporator.", "example": "", "gated": "", - "billable": "Paid \u2014 files a real Delaware C-corp. $218 standard / $268 next-day / $318 same-day, paid by the founder at the returned link." + "billable": "Paid — files a real Delaware C-corp. $218 standard / $268 next-day / $318 same-day, paid by the founder at the returned link." }, { "name": "generallegal.formation_status", @@ -68,9 +68,58 @@ "gated": "", "billable": "" }, + { + "name": "generallegal.signup_terms", + "summary": "URL of the engagement letter (PDF) an agent accepts at signup. Free, no account needed. Read it before generallegal.signup_complete — accepting engages General Legal as your company's counsel.", + "example": "", + "gated": "", + "billable": "" + }, + { + "name": "generallegal.signup", + "summary": "Open a General Legal account from the agent — no portal. Takes the company name, a contact email you can read and a US billing city/state/ZIP; a six-digit code is emailed. Free.", + "example": "", + "gated": "", + "billable": "" + }, + { + "name": "generallegal.signup_resend", + "summary": "Re-send the six-digit signup code for a pending signup. Free.", + "example": "", + "gated": "", + "billable": "" + }, + { + "name": "generallegal.signup_complete", + "summary": "Finish signup with the emailed code and engagement_letter_accepted: true. The issued API key is saved on this host and used on every later call — never shown, no restart. Free.", + "example": "", + "gated": "", + "billable": "" + }, + { + "name": "generallegal.key_recover", + "summary": "Lost the key? Emails a six-digit code to the account's contact address. Free.", + "example": "", + "gated": "", + "billable": "" + }, + { + "name": "generallegal.key_recover_complete", + "summary": "Finish key recovery with the emailed code. Saves a replacement key on this host and revokes the old one. Free.", + "example": "", + "gated": "", + "billable": "" + }, + { + "name": "generallegal.set_key", + "summary": "Already have a key from portal.general.legal/api-keys? Save it on this host with {\"api_key\":\"glk_...\"}. Local, free.", + "example": "", + "gated": "", + "billable": "" + }, { "name": "generallegal.deals_list", - "summary": "List your matters, paginated, with an optional status filter. Free. Needs your General Legal API key.", + "summary": "List your matters, paginated, with an optional status filter. Free. Needs a General Legal account — open one with generallegal.signup.", "example": "", "gated": "", "billable": "" @@ -80,7 +129,7 @@ "summary": "Open a matter from a written request. It reaches a real attorney.", "example": "", "gated": "", - "billable": "Paid \u2014 flat fee per contract: $250 (3 pages or fewer), $500 (3\u201350 pages), $10/page (50+), $2,000 to draft from scratch. Covers every turn through signature." + "billable": "Paid — flat fee per contract: $250 (3 pages or fewer), $500 (3–50 pages), $10/page (50+), $2,000 to draft from scratch. Covers every turn through signature." }, { "name": "generallegal.deal_get", @@ -101,7 +150,7 @@ "summary": "Reply to the attorney on a matter's thread.", "example": "", "gated": "", - "billable": "Paid \u2014 covered by the matter's flat fee; General Legal does not bill hourly, so a reply adds no separate charge. Free when target is \"ai\"." + "billable": "Paid — covered by the matter's flat fee; General Legal does not bill hourly, so a reply adds no separate charge. Free when target is \"ai\"." }, { "name": "generallegal.contracts_list", @@ -122,7 +171,7 @@ "summary": "Upload a DOCX, PDF, PNG, JPEG or Markdown document for AI + attorney review, up to 20 MiB. Stage the bytes with upload_begin/upload_chunk first.", "example": "", "gated": "", - "billable": "Paid \u2014 priced per contract by length: $250 (3 pages or fewer), $500 (3\u201350 pages), $10/page (50+). Flat fee, covering every turn through signature." + "billable": "Paid — priced per contract by length: $250 (3 pages or fewer), $500 (3–50 pages), $10/page (50+). Flat fee, covering every turn through signature." }, { "name": "generallegal.version_download_link", @@ -133,7 +182,7 @@ }, { "name": "generallegal.upload_begin", - "summary": "Start a staged upload and get a blob_id. Free \u2014 a document cannot cross in one call, so declare it here first.", + "summary": "Start a staged upload and get a blob_id. Free — a document cannot cross in one call, so declare it here first.", "example": "", "gated": "", "billable": "" @@ -161,12 +210,22 @@ } ], "changelog": [ + { + "version": "0.2.0", + "date": "2026-10-05", + "notes": [ + "Contract review without the portal: the agent opens its own General Legal account with generallegal.signup and generallegal.signup_complete (emailed code + engagement letter).", + "The issued key is saved on the host, never shown, and used with no restart. generallegal.set_key saves a portal key; key_recover replaces a lost one.", + "Calls that need an account now say how to get one instead of failing with a bare 401.", + "Now runs on macOS and Linux, Intel and ARM (0.1.0 was Linux x86-64 only)." + ] + }, { "version": "0.1.0", "date": "2026-08-29", "notes": [ "Contract review: matters, lawyer thread, document upload and released-version downloads.", - "Delaware company formation: pricing, LLC and C-corp filing, status and documents \u2014 no account needed.", + "Delaware company formation: pricing, LLC and C-corp filing, status and documents — no account needed.", "Bring your own General Legal API key for contract review; it never reaches the formation service." ] } @@ -174,6 +233,7 @@ "grants": [ "fs.read:$APP/config.json", "fs.read:$APP/secrets.json", + "fs.write:$APP/secrets.json", "fs.read:$APP/blobs", "fs.write:$APP/blobs", "net.dial:api.general.legal", @@ -183,28 +243,44 @@ "limits": [ { "label": "Contract review", - "value": "$250 / $500 / $10 per page \u2014 flat fee" + "value": "$250 / $500 / $10 per page — flat fee" }, { "label": "Delaware LLC", - "value": "$190\u2013$310 depending on speed" + "value": "$190–$310 depending on speed" }, { "label": "Delaware C-corp", - "value": "$218\u2013$318 depending on speed" + "value": "$218–$318 depending on speed" }, { "label": "New matters", "value": "25 / day per organization" + }, + { + "label": "Account", + "value": "Opened by the agent — emailed code, no portal" } ], "bundles": [ { "platform": "linux-amd64", - "bytes": 5074207 + "bytes": 5160557 + }, + { + "platform": "linux-arm64", + "bytes": 4729360 + }, + { + "platform": "darwin-arm64", + "bytes": 4994209 + }, + { + "platform": "darwin-amd64", + "bytes": 5331977 } ], - "installed_bytes": 0, + "installed_bytes": 9320989, "depends": [], "protection": "shareable", "featured": false, @@ -228,21 +304,21 @@ "go" ], "published_at": "2026-08-29", - "updated_at": "2026-08-29", + "updated_at": "2026-10-05", "product_demo": { "skill": "io.pilot.generallegal", "title": "Full usage demo", "metered": false, - "when_to_use": "When a contract needs a licensed attorney to review, redline or draft it, or when an agent needs its own Delaware company. Formation works on a fresh install; contract review needs your own General Legal API key.", + "when_to_use": "When a contract needs a licensed attorney to review, redline or draft it, or an agent needs its own Delaware company. Formation needs no account; contract review needs one, which the agent opens itself.", "quickstart": { - "goal": "Price a Delaware company \u2014 works on a fresh install, no account, no key", + "goal": "Price a Delaware company — works on a fresh install, no account, no key", "command": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", "expect": "{\"options\":[{\"filing_speed\":\"instant\",\"total_cents\":19000},{\"filing_speed\":\"standard\",\"total_cents\":21000}]}", - "note": "Free, and it needs no account or key at all \u2014 the fastest way to confirm the app works. Contract review is the half that needs a key; see the examples." + "note": "Free, and it needs no account or key at all — the fastest way to confirm the app works. Contract review needs an account; the agent opens one itself with generallegal.signup (see the examples)." }, "examples": [ { - "title": "Form a Delaware company \u2014 no API key needed", + "title": "Form a Delaware company — no API key needed", "goal": "Price it, file it, hand the founder a payment link", "command": "pilotctl appstore call io.pilot.generallegal generallegal.formation_start_llc '{\"filing_speed\":\"standard\",\"company_name\":\"NewCo LLC\",\"founder\":{\"full_name\":\"Ada Lovelace\",\"email\":\"ada@example.com\"},\"principal_address\":{\"street\":\"1 Main St\",\"city\":\"Dover\",\"state\":\"DE\",\"postal_code\":\"19901\"},\"ai_agent_description\":\"Procurement agent\",\"authority_limits\":\"No commitments above $5,000 without sign-off\",\"contract_threshold\":\"$5,000\"}'", "expect": "{\"formation_id\":\"f-...\",\"payment_url\":\"https://...\",\"status\":\"awaiting_payment\"}", @@ -256,11 +332,18 @@ "note": "Free. Repeat only after poll_after_seconds. When complete, generallegal.formation_documents returns short-lived links." }, { - "title": "Bring your own key, then confirm it works", - "goal": "Authenticate as your own General Legal organization", - "command": "pilotctl appstore call io.pilot.generallegal generallegal.deals_list '{\"page\":1,\"page_size\":5}'", - "expect": "{\"items\":[...],\"total\":n} once the key is in place; 401 until then", - "note": "Contract review only. Sign up at https://portal.general.legal/signup, then account menu -> API keys (shown once). Import: printf '{\"GENERAL_LEGAL_API_KEY\":\"glk_YOUR_KEY\"}' > ~/.pilot/apps/io.pilot.generallegal/secrets.json && chmod 600 ~/.pilot/apps/io.pilot.generallegal/secrets.json && pilotctl appstore restart io.pilot.generallegal" + "title": "Open a General Legal account from the agent", + "goal": "Read the engagement letter, then start signup", + "command": "pilotctl appstore call io.pilot.generallegal generallegal.signup '{\"company_name\":\"Acme Inc\",\"contact_email\":\"legal@acme.com\",\"billing_city\":\"Dover\",\"billing_state\":\"DE\",\"billing_zip\":\"19901\"}'", + "expect": "{\"signup_id\":\"...\",\"status\":\"...\",\"engagement_letter_url\":\"https://portal.general.legal/...pdf\"}", + "note": "Free. No portal, no browser. A six-digit code is emailed to contact_email — use an address someone actually reads. generallegal.signup_terms returns the same engagement letter URL; read it before accepting, because accepting engages General Legal as the company's counsel." + }, + { + "title": "Finish signup — the key is saved for you", + "goal": "Trade the emailed code for an API key stored on this host", + "command": "pilotctl appstore call io.pilot.generallegal generallegal.signup_complete '{\"signup_id\":\"\",\"code\":\"123456\",\"engagement_letter_accepted\":true}'", + "expect": "{\"client_id\":\"...\",\"api_key\":\"saved on this host as GENERAL_LEGAL_API_KEY; sent on every call\"}", + "note": "Free. The key is written to $APP/secrets.json and redacted from the reply; every later call carries it with no restart. Already have a portal key? generallegal.set_key '{\"api_key\":\"glk_...\"}'. Lost it? generallegal.key_recover then key_recover_complete (revokes the old key)." }, { "title": "Ask an attorney to review a contract", @@ -275,25 +358,18 @@ "command": "pilotctl appstore call io.pilot.generallegal generallegal.upload_begin '{\"file_name\":\"nda.docx\",\"content_type\":\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\"total_bytes\":3145728,\"sha256\":\"\"}'", "expect": "{\"blob_id\":\"a1b2...\",\"max_chunk_bytes\":524288,\"next_seq\":0}", "note": "Then generallegal.upload_chunk with seq 0,1,2... and base64 of at most max_chunk_bytes raw bytes. The last returns complete:true. Finally generallegal.document_upload with the blob_id and deal_id (BILLABLE)." - }, - { - "title": "Collect the released redline", - "goal": "Get a downloadable link to counsel's version", - "command": "pilotctl appstore call io.pilot.generallegal generallegal.version_download_link '{\"version_id\":\"v-07...\"}'", - "expect": "{\"file_name\":\"nda-redline.docx\",\"download_url\":\"https://...\",\"download_token_expires_at\":\"...\"}", - "note": "Free. The URL needs no auth and expires in ~15 minutes - fetch it yourself. Find version ids via generallegal.deal_get or generallegal.contract_get." } ], "gotchas": [ - "Two halves, different requirements. Company formation needs no account and no key. Contract review needs a General Legal account and an API key imported.", - "For contract review: sign up at portal.general.legal/signup, mint a key under API keys, write it to $APP/secrets.json, then restart the app - the key is read at startup.", + "Two halves, different requirements. Company formation needs no account and no key. Contract review needs a General Legal account — open it from the agent with generallegal.signup, then generallegal.signup_complete with the emailed code.", + "Signup engages a law firm: signup_complete requires engagement_letter_accepted:true. Read the letter from generallegal.signup_terms first, and only accept on behalf of a company that has authorised it.", "Five methods spend money: deal_open and document_upload are flat-fee per contract ($250/$500/$10-per-page/$2,000); formation_start_llc and formation_start_c_corp file a real company ($190-$318); thread_post is covered by the matter's fee.", "A document cannot ride in one call. Use upload_begin then upload_chunk (<=512 KiB raw each) and pass the blob_id. A blob is single-use and dropped once sent.", "Matters reach a real attorney and formations file a real company. Neither is a sandbox - confirm before calling a billable method.", "Contract-review limits are per organization: 120 reads/min, 25 new matters/day, 50 uploads/day. Honour Retry-After on a 429." ], "next": [ - "generallegal.formation_options to price a company, or generallegal.deals_list to see the matters your key can reach.", + "generallegal.formation_options to price a company, or generallegal.signup to open the account contract review needs.", "generallegal.help lists every method and marks exactly which ones cost money." ] } diff --git a/submissions/io.pilot.generallegal/io.pilot.generallegal-0.1.0-linux-amd64.tar.gz b/submissions/io.pilot.generallegal/io.pilot.generallegal-0.1.0-linux-amd64.tar.gz deleted file mode 100644 index a79159c..0000000 Binary files a/submissions/io.pilot.generallegal/io.pilot.generallegal-0.1.0-linux-amd64.tar.gz and /dev/null differ diff --git a/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-darwin-amd64.tar.gz b/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-darwin-amd64.tar.gz new file mode 100644 index 0000000..515e5a4 Binary files /dev/null and b/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-darwin-amd64.tar.gz differ diff --git a/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-darwin-arm64.tar.gz b/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-darwin-arm64.tar.gz new file mode 100644 index 0000000..d7f7bde Binary files /dev/null and b/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-darwin-arm64.tar.gz differ diff --git a/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-linux-amd64.tar.gz b/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-linux-amd64.tar.gz new file mode 100644 index 0000000..575fcea Binary files /dev/null and b/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-linux-amd64.tar.gz differ diff --git a/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-linux-arm64.tar.gz b/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-linux-arm64.tar.gz new file mode 100644 index 0000000..dc73c1b Binary files /dev/null and b/submissions/io.pilot.generallegal/io.pilot.generallegal-0.2.0-linux-arm64.tar.gz differ diff --git a/submissions/io.pilot.generallegal/metadata.json b/submissions/io.pilot.generallegal/metadata.json index 36eae25..181191e 100644 --- a/submissions/io.pilot.generallegal/metadata.json +++ b/submissions/io.pilot.generallegal/metadata.json @@ -3,9 +3,10 @@ "id": "io.pilot.generallegal", "display_name": "General Legal", "tagline": "Attorney-backed contract review and Delaware company formation for agents", - "description_md": "General Legal is a Y Combinator-backed law firm. This app puts a licensed\nattorney and a Delaware filing desk behind your agent — contract review and\ncompany formation, in one namespace.\n\nThe two halves have different requirements. Formation works the moment you\ninstall. Contract review needs a General Legal account and an API key.\n\n### Company formation — nothing to set up\n\nNo account, no key, no configuration. Call\n`generallegal.formation_options` and it works on a fresh install.\n\nYou will still need to pay: `formation_start_llc` and\n`formation_start_c_corp` return a payment link, and the founder pays there.\nUse the founder's real details — this files an actual Delaware company.\n\n### Contract review — bring your own API key\n\n1. Sign up at https://portal.general.legal/signup\n2. Open the account menu and choose **API keys**\n (https://portal.general.legal/api-keys)\n3. Create a key and copy it — the full value is shown **once**\n4. Import it into the app:\n\n```\nprintf '{\"GENERAL_LEGAL_API_KEY\":\"glk_YOUR_KEY\"}' \u003e ~/.pilot/apps/io.pilot.generallegal/secrets.json\nchmod 600 ~/.pilot/apps/io.pilot.generallegal/secrets.json\npilotctl appstore restart io.pilot.generallegal\n```\n\nThe restart matters: the key is read at startup. Verify with\n`pilotctl appstore call io.pilot.generallegal generallegal.deals_list '{}'`.\nThe key stays on your machine, is never sent to the formation service, and\nscopes you to your own General Legal organization.\n\n### What it costs\n\nContract review is flat-fee, with no hourly billing and no minimums. The fee\ncovers every turn through signature, including negotiation with the\ncounterparty.\n\n| Work | Price |\n| --- | --- |\n| Contract, 3 pages or fewer | $250 |\n| Contract, 3-50 pages | $500 |\n| Contract, 50+ pages | $10 per page |\n| Drafting from scratch | $2,000 |\n| Delaware LLC | $190 instant / $210 standard / $260 next-day / $310 same-day |\n| Delaware C-corp | $218 standard / $268 next-day / $318 same-day |\n\n### What the app does\n\n**Company formation** — `formation_options` (free), `formation_start_llc`\n(**paid**), `formation_start_c_corp` (**paid**), `formation_status`,\n`formation_update`, `formation_documents` (free).\n\n**Contract review** — `deal_open` (**paid**), `document_upload` (**paid**),\n`thread_post` (**paid**, covered by the matter's flat fee), plus\n`deals_list`, `deal_get`, `thread_get`, `contracts_list`, `contract_get`,\n`version_download_link` (free) and `upload_begin`, `upload_chunk`,\n`upload_abort` (free — a document is staged in chunks because a single call\ncannot carry a file).\n\n### What costs money\n\nFive methods spend real money and will not warn you first:\n`formation_start_llc`, `formation_start_c_corp`, `deal_open`,\n`document_upload` and `thread_post`. Every other method is free.\n`generallegal.help` lists them under `billable_methods` with the price.\n", + "description_md": "General Legal is a Y Combinator-backed law firm. This app puts a licensed\nattorney and a Delaware filing desk behind your agent — contract review and\ncompany formation, in one namespace.\n\nNothing here needs a browser. Formation works the moment you install;\ncontract review needs a General Legal account, which the agent can open\nitself in three calls.\n\n### Company formation — nothing to set up\n\nNo account, no key, no configuration. Call\n`generallegal.formation_options` and it works on a fresh install.\n\nYou will still need to pay: `formation_start_llc` and\n`formation_start_c_corp` return a payment link, and the founder pays there.\nUse the founder's real details — this files an actual Delaware company.\n\n### Contract review — sign up from the agent\n\n1. `generallegal.signup_terms` returns the engagement letter (PDF). Read it:\n accepting it engages General Legal as your company's counsel.\n2. `generallegal.signup` with the company name, a contact email you can\n read, and a US billing city/state/ZIP. A six-digit code is emailed.\n3. `generallegal.signup_complete` with the `signup_id`, the code and\n `engagement_letter_accepted: true`.\n\nGeneral Legal issues one API key. The app saves it on this host and sends it\non every later call. It never appears in the reply, and you don't need to\nrestart. Verify with `generallegal.deals_list`. The key scopes you to your\nown General Legal organization and is never sent to the formation service.\n\nAlready have a key from https://portal.general.legal/api-keys? Save it with\n`generallegal.set_key '{\"api_key\":\"glk_...\"}'`. Lost it? Use\n`generallegal.key_recover`, then `generallegal.key_recover_complete`. This\nissues a replacement and revokes the old key.\n\n### What it costs\n\nContract review is flat-fee, with no hourly billing and no minimums. The fee\ncovers every turn through signature, including negotiation with the\ncounterparty.\n\n| Work | Price |\n| --- | --- |\n| Contract, 3 pages or fewer | $250 |\n| Contract, 3-50 pages | $500 |\n| Contract, 50+ pages | $10 per page |\n| Drafting from scratch | $2,000 |\n| Delaware LLC | $190 instant / $210 standard / $260 next-day / $310 same-day |\n| Delaware C-corp | $218 standard / $268 next-day / $318 same-day |\n\n### What the app does\n\n**Company formation** — `formation_options` (free), `formation_start_llc`\n(**paid**), `formation_start_c_corp` (**paid**), `formation_status`,\n`formation_update`, `formation_documents` (free).\n\n**Contract review** — `deal_open` (**paid**), `document_upload` (**paid**),\n`thread_post` (**paid**, covered by the matter's flat fee), plus\n`deals_list`, `deal_get`, `thread_get`, `contracts_list`, `contract_get`,\n`version_download_link` (free) and `upload_begin`, `upload_chunk`,\n`upload_abort` (free — a document is staged in chunks because a single call\ncannot carry a file).\n\n**Account** — `signup_terms`, `signup`, `signup_resend`,\n`signup_complete`, `key_recover`, `key_recover_complete`, `set_key` (all\nfree; signing up costs nothing until you open a matter).\n\n### What costs money\n\nFive methods spend real money and will not warn you first:\n`formation_start_llc`, `formation_start_c_corp`, `deal_open`,\n`document_upload` and `thread_post`. Every other method is free.\n`generallegal.help` lists them under `billable_methods` with the price.\n", "vendor": { - "name": "" + "name": "General Legal", + "publisher_pubkey": "ed25519:Tl5OtWqZUPSGJkt7+Z2uOk+0YjvlxBsQdN9Rp6ZI3lE=" }, "license": "Apache-2.0", "categories": [ @@ -21,8 +22,8 @@ "redline" ], "size": { - "bundle_bytes": 0, - "installed_bytes": 0 + "bundle_bytes": 5160557, + "installed_bytes": 9320989 }, "compat": { "min_pilot_version": "1.0.0", @@ -67,13 +68,41 @@ "name": "generallegal.version_download_link", "summary": "Issue a short-lived (~15 min) direct download URL for a released version." }, + { + "name": "generallegal.signup_terms", + "summary": "Get the URL of the current engagement letter (PDF) an agent accepts at signup. No account needed. Open and read it immediately before generallegal.signup_complete — accepting it engages General Legal as counsel." + }, + { + "name": "generallegal.signup", + "summary": "Start a General Legal account for contract review — fully programmatic, no portal. Emails a six-digit code to contact_email and returns a signup_id plus the engagement_letter_url. Use a real, monitored company address; the code arrives there. Then call generallegal.signup_complete." + }, + { + "name": "generallegal.signup_resend", + "summary": "Re-send the six-digit signup code to the contact_email of a pending signup." + }, + { + "name": "generallegal.signup_complete", + "summary": "Finish signup with the emailed code and your acceptance of the engagement letter. General Legal issues one API key; it is saved on this host and used on every later call — it is never shown, and no restart is needed. Contract review works immediately after." + }, + { + "name": "generallegal.key_recover", + "summary": "Lost the key on this host? Emails a six-digit code to the account's contact address and returns a recovery_id. Completing recovery REPLACES the old key — any other host using it stops working." + }, + { + "name": "generallegal.key_recover_complete", + "summary": "Finish key recovery with the emailed code. Issues a replacement key, saved on this host and used on every later call; the previous key is revoked." + }, + { + "name": "generallegal.set_key", + "summary": "Already have a General Legal API key (made at portal.general.legal/api-keys)? Save it on this host: {\"api_key\":\"glk_...\"}. Overwrites any saved key. Local, no backend call." + }, { "name": "generallegal.formation_options", "summary": "Price every Delaware company type and filing speed, itemised. No account and no credentials needed — this works on a fresh install. Call it first and present every option and total to the founder before filing anything." }, { "name": "generallegal.formation_start_llc", - "summary": "Start a sole-member Delaware LLC and get back a payment link plus a formation_id. No account or credentials needed to call it. The founder acts as member, manager and AI oversight officer. filing_speed 'instant' hands over a pre-formed 'GL AgentCo \u003cn\u003e, LLC' and requires company_name to be omitted; the other speeds file a new LLC under a name you choose. Call generallegal.formation_options first and let the founder pick." + "summary": "Start a sole-member Delaware LLC and get back a payment link plus a formation_id. No account or credentials needed to call it. The founder acts as member, manager and AI oversight officer. filing_speed 'instant' hands over a pre-formed 'GL AgentCo , LLC' and requires company_name to be omitted; the other speeds file a new LLC under a name you choose. Call generallegal.formation_options first and let the founder pick." }, { "name": "generallegal.formation_start_c_corp", @@ -109,10 +138,20 @@ } ], "changelog": [ + { + "version": "0.2.0", + "notes": [ + "Contract review no longer needs the portal: an agent opens its own General Legal account with generallegal.signup -> generallegal.signup_complete (emailed six-digit code + engagement-letter acceptance).", + "The issued API key is saved on the host and redacted from the reply; no restart needed.", + "New: generallegal.signup_terms, signup_resend, key_recover, key_recover_complete, set_key.", + "Calls that need a key now return a needs_signup hint instead of a raw 401.", + "Ships for linux/amd64, linux/arm64, darwin/arm64 and darwin/amd64 (0.1.0 was linux/amd64 only)." + ] + }, { "version": "0.1.0", "notes": [ - "Released v0.1.0" + "Initial release: contract review (bring your own key) and Delaware company formation." ] } ] diff --git a/submissions/io.pilot.generallegal/submission.json b/submissions/io.pilot.generallegal/submission.json index 1fe8615..d92c4ac 100644 --- a/submissions/io.pilot.generallegal/submission.json +++ b/submissions/io.pilot.generallegal/submission.json @@ -3,16 +3,16 @@ "skill": "io.pilot.generallegal", "title": "Full usage demo", "metered": false, - "when_to_use": "When a contract needs a licensed attorney to review, redline or draft it, or when an agent needs its own Delaware company. Formation works on a fresh install; contract review needs your own General Legal API key.", + "when_to_use": "When a contract needs a licensed attorney to review, redline or draft it, or an agent needs its own Delaware company. Formation needs no account; contract review needs one, which the agent opens itself.", "quickstart": { - "goal": "Price a Delaware company \u2014 works on a fresh install, no account, no key", + "goal": "Price a Delaware company — works on a fresh install, no account, no key", "command": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", "expect": "{\"options\":[{\"filing_speed\":\"instant\",\"total_cents\":19000},{\"filing_speed\":\"standard\",\"total_cents\":21000}]}", - "note": "Free, and it needs no account or key at all \u2014 the fastest way to confirm the app works. Contract review is the half that needs a key; see the examples." + "note": "Free, and it needs no account or key at all — the fastest way to confirm the app works. Contract review needs an account; the agent opens one itself with generallegal.signup (see the examples)." }, "examples": [ { - "title": "Form a Delaware company \u2014 no API key needed", + "title": "Form a Delaware company — no API key needed", "goal": "Price it, file it, hand the founder a payment link", "command": "pilotctl appstore call io.pilot.generallegal generallegal.formation_start_llc '{\"filing_speed\":\"standard\",\"company_name\":\"NewCo LLC\",\"founder\":{\"full_name\":\"Ada Lovelace\",\"email\":\"ada@example.com\"},\"principal_address\":{\"street\":\"1 Main St\",\"city\":\"Dover\",\"state\":\"DE\",\"postal_code\":\"19901\"},\"ai_agent_description\":\"Procurement agent\",\"authority_limits\":\"No commitments above $5,000 without sign-off\",\"contract_threshold\":\"$5,000\"}'", "expect": "{\"formation_id\":\"f-...\",\"payment_url\":\"https://...\",\"status\":\"awaiting_payment\"}", @@ -26,11 +26,18 @@ "note": "Free. Repeat only after poll_after_seconds. When complete, generallegal.formation_documents returns short-lived links." }, { - "title": "Bring your own key, then confirm it works", - "goal": "Authenticate as your own General Legal organization", - "command": "pilotctl appstore call io.pilot.generallegal generallegal.deals_list '{\"page\":1,\"page_size\":5}'", - "expect": "{\"items\":[...],\"total\":n} once the key is in place; 401 until then", - "note": "Contract review only. Sign up at https://portal.general.legal/signup, then account menu -> API keys (shown once). Import: printf '{\"GENERAL_LEGAL_API_KEY\":\"glk_YOUR_KEY\"}' > ~/.pilot/apps/io.pilot.generallegal/secrets.json && chmod 600 ~/.pilot/apps/io.pilot.generallegal/secrets.json && pilotctl appstore restart io.pilot.generallegal" + "title": "Open a General Legal account from the agent", + "goal": "Read the engagement letter, then start signup", + "command": "pilotctl appstore call io.pilot.generallegal generallegal.signup '{\"company_name\":\"Acme Inc\",\"contact_email\":\"legal@acme.com\",\"billing_city\":\"Dover\",\"billing_state\":\"DE\",\"billing_zip\":\"19901\"}'", + "expect": "{\"signup_id\":\"...\",\"status\":\"...\",\"engagement_letter_url\":\"https://portal.general.legal/...pdf\"}", + "note": "Free. No portal, no browser. A six-digit code is emailed to contact_email — use an address someone actually reads. generallegal.signup_terms returns the same engagement letter URL; read it before accepting, because accepting engages General Legal as the company's counsel." + }, + { + "title": "Finish signup — the key is saved for you", + "goal": "Trade the emailed code for an API key stored on this host", + "command": "pilotctl appstore call io.pilot.generallegal generallegal.signup_complete '{\"signup_id\":\"\",\"code\":\"123456\",\"engagement_letter_accepted\":true}'", + "expect": "{\"client_id\":\"...\",\"api_key\":\"saved on this host as GENERAL_LEGAL_API_KEY; sent on every call\"}", + "note": "Free. The key is written to $APP/secrets.json and redacted from the reply; every later call carries it with no restart. Already have a portal key? generallegal.set_key '{\"api_key\":\"glk_...\"}'. Lost it? generallegal.key_recover then key_recover_complete (revokes the old key)." }, { "title": "Ask an attorney to review a contract", @@ -45,25 +52,18 @@ "command": "pilotctl appstore call io.pilot.generallegal generallegal.upload_begin '{\"file_name\":\"nda.docx\",\"content_type\":\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\"total_bytes\":3145728,\"sha256\":\"\"}'", "expect": "{\"blob_id\":\"a1b2...\",\"max_chunk_bytes\":524288,\"next_seq\":0}", "note": "Then generallegal.upload_chunk with seq 0,1,2... and base64 of at most max_chunk_bytes raw bytes. The last returns complete:true. Finally generallegal.document_upload with the blob_id and deal_id (BILLABLE)." - }, - { - "title": "Collect the released redline", - "goal": "Get a downloadable link to counsel's version", - "command": "pilotctl appstore call io.pilot.generallegal generallegal.version_download_link '{\"version_id\":\"v-07...\"}'", - "expect": "{\"file_name\":\"nda-redline.docx\",\"download_url\":\"https://...\",\"download_token_expires_at\":\"...\"}", - "note": "Free. The URL needs no auth and expires in ~15 minutes - fetch it yourself. Find version ids via generallegal.deal_get or generallegal.contract_get." } ], "gotchas": [ - "Two halves, different requirements. Company formation needs no account and no key. Contract review needs a General Legal account and an API key imported.", - "For contract review: sign up at portal.general.legal/signup, mint a key under API keys, write it to $APP/secrets.json, then restart the app - the key is read at startup.", + "Two halves, different requirements. Company formation needs no account and no key. Contract review needs a General Legal account — open it from the agent with generallegal.signup, then generallegal.signup_complete with the emailed code.", + "Signup engages a law firm: signup_complete requires engagement_letter_accepted:true. Read the letter from generallegal.signup_terms first, and only accept on behalf of a company that has authorised it.", "Five methods spend money: deal_open and document_upload are flat-fee per contract ($250/$500/$10-per-page/$2,000); formation_start_llc and formation_start_c_corp file a real company ($190-$318); thread_post is covered by the matter's fee.", "A document cannot ride in one call. Use upload_begin then upload_chunk (<=512 KiB raw each) and pass the blob_id. A blob is single-use and dropped once sent.", "Matters reach a real attorney and formations file a real company. Neither is a sandbox - confirm before calling a billable method.", "Contract-review limits are per organization: 120 reads/min, 25 new matters/day, 50 uploads/day. Honour Retry-After on a 429." ], "next": [ - "generallegal.formation_options to price a company, or generallegal.deals_list to see the matters your key can reach.", + "generallegal.formation_options to price a company, or generallegal.signup to open the account contract review needs.", "generallegal.help lists every method and marks exactly which ones cost money." ] }, @@ -71,20 +71,142 @@ "schema": 1, "app": "io.pilot.generallegal", "edges": [ + { + "from": "*", + "on": "ok", + "match": "needs_signup", + "why": "there is no General Legal API key on this host yet, so contract review cannot run", + "then": [ + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.signup_terms '{}'", + "why": "the engagement letter you must read before accepting it at signup", + "kind": "gateway" + }, + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.signup '{\"company_name\":\"...\",\"contact_email\":\"...\",\"billing_city\":\"...\",\"billing_state\":\"..\",\"billing_zip\":\"...\"}'", + "why": "opens the account; a six-digit code is emailed", + "kind": "gateway" + }, + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.set_key '{\"api_key\":\"glk_...\"}'", + "why": "already have a key from the portal? save it here instead", + "kind": "recovery" + } + ] + }, + { + "from": "generallegal.signup_terms", + "on": "ok", + "why": "you have the engagement letter; read it, then start the signup", + "then": [ + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.signup '{\"company_name\":\"...\",\"contact_email\":\"...\",\"billing_city\":\"...\",\"billing_state\":\"..\",\"billing_zip\":\"...\"}'", + "why": "emails a six-digit code to contact_email", + "kind": "flow" + } + ] + }, + { + "from": "generallegal.signup", + "on": "ok", + "why": "a six-digit code is on its way to contact_email; finish with it", + "then": [ + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.signup_complete '{\"signup_id\":\"\",\"code\":\"\",\"engagement_letter_accepted\":true}'", + "why": "issues the API key and saves it on this host", + "kind": "flow" + }, + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.signup_resend '{\"signup_id\":\"\"}'", + "why": "no email after a minute or two? send it again", + "kind": "recovery" + } + ] + }, + { + "from": "generallegal.signup_resend", + "on": "ok", + "why": "a fresh code was sent", + "then": [ + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.signup_complete '{\"signup_id\":\"\",\"code\":\"\",\"engagement_letter_accepted\":true}'", + "why": "finish with the newest code", + "kind": "flow" + } + ] + }, + { + "from": "generallegal.signup_complete", + "on": "ok", + "why": "the key is saved and in use; contract review works now", + "then": [ + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.deals_list '{\"page\":1,\"page_size\":5}'", + "why": "free, and it proves the key works", + "kind": "flow" + }, + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", + "kind": "gateway" + } + ] + }, + { + "from": "generallegal.key_recover", + "on": "ok", + "why": "a recovery code is on its way to the account email", + "then": [ + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.key_recover_complete '{\"recovery_id\":\"\",\"code\":\"\",\"api_key_replacement_confirmed\":true}'", + "why": "issues and saves a replacement key; the old one stops working", + "kind": "flow" + } + ] + }, + { + "from": "generallegal.key_recover_complete", + "on": "ok", + "why": "the replacement key is saved and in use", + "then": [ + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.deals_list '{\"page\":1,\"page_size\":5}'", + "why": "free, and it proves the new key works", + "kind": "flow" + } + ] + }, + { + "from": "generallegal.set_key", + "on": "ok", + "why": "the key is saved; check it against General Legal", + "then": [ + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.deals_list '{\"page\":1,\"page_size\":5}'", + "why": "free; a 401 here means the key is wrong or revoked", + "kind": "flow" + } + ] + }, { "from": "*", "on": "err", "match": "401|[Uu]nauthorized", - "why": "contract review needs your own General Legal API key; company formation needs none and works right now", + "why": "this key was rejected; contract review needs a valid General Legal API key on this host. Company formation needs none", "then": [ { - "cmd": "pilotctl appstore view io.pilot.generallegal", - "why": "the store page carries the exact key-import command; mint the key at portal.general.legal/api-keys first", + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.key_recover '{\"contact_email\":\"\"}'", + "why": "issues a replacement key by emailed code; the old key is revoked", + "kind": "recovery" + }, + { + "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.signup '{\"company_name\":\"...\",\"contact_email\":\"...\",\"billing_city\":\"...\",\"billing_state\":\"..\",\"billing_zip\":\"...\"}'", + "why": "no account yet? open one from the agent; no portal needed", "kind": "gateway" }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -96,7 +218,7 @@ "then": [ { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.deal_open '{\"initial_request\":\"Please review this mutual NDA.\"}'", - "why": "opens a matter with a licensed attorney \u2014 billable, so confirm with whoever owns the account", + "why": "opens a matter with a licensed attorney — billable, so confirm with whoever owns the account", "kind": "flow" }, { @@ -106,7 +228,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -128,7 +250,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -150,7 +272,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -172,7 +294,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -194,7 +316,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -216,7 +338,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -238,7 +360,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -260,7 +382,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -277,7 +399,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -289,12 +411,12 @@ "then": [ { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.document_upload '{\"blob_id\":\"\",\"deal_id\":\"\",\"context_for_legal\":\"Standard mutual NDA.\"}'", - "why": "sends it into AI + attorney review \u2014 billable on your engagement", + "why": "sends it into AI + attorney review — billable on your engagement", "kind": "flow" }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ], @@ -317,7 +439,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -385,7 +507,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "flow" } ] @@ -423,7 +545,7 @@ "then": [ { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.deal_open '{\"initial_request\":\"We just incorporated. Please review our standard mutual NDA.\"}'", - "why": "needs a General Legal account and an imported API key; billable attorney work", + "why": "needs a General Legal account (generallegal.signup if you have none); billable attorney work", "kind": "gateway" }, { @@ -446,7 +568,7 @@ }, { "cmd": "pilotctl appstore call io.pilot.generallegal generallegal.formation_options '{\"entity_type\":\"llc\"}'", - "why": "company formation is the other half of this app and needs no account or key at all \u2014 free to explore any time", + "why": "company formation is the other half of this app and needs no account or key at all — free to explore any time", "kind": "gateway" } ] @@ -454,12 +576,30 @@ ] }, "id": "io.pilot.generallegal", - "version": "0.1.0", + "version": "0.2.0", "namespace": "generallegal", "description": "Attorney-backed contract review and Delaware company formation for agents. Flat-fee legal work from a licensed US law firm.", "email": "alex@vulturelabs.io", - "bundle": "io.pilot.generallegal-0.1.0-linux-amd64.tar.gz", - "bundle_sha256": "9136d92a1d0fbe99067f2413cecf17466373cf432b3be92b264124ed8cb9c0c0", + "bundle": "io.pilot.generallegal-0.2.0-linux-amd64.tar.gz", + "bundle_sha256": "6dcecacc69c1b9722ab1dacb407fb965f896aea3bec49034da102bdfed59528d", + "bundles": { + "linux/amd64": { + "file": "io.pilot.generallegal-0.2.0-linux-amd64.tar.gz", + "sha256": "6dcecacc69c1b9722ab1dacb407fb965f896aea3bec49034da102bdfed59528d" + }, + "linux/arm64": { + "file": "io.pilot.generallegal-0.2.0-linux-arm64.tar.gz", + "sha256": "ea94b88907680885db3c9897c333ba08572982b14b0c292aca9fa39cef5e99b4" + }, + "darwin/arm64": { + "file": "io.pilot.generallegal-0.2.0-darwin-arm64.tar.gz", + "sha256": "7f7027885c13386a358a5454b0d2d9483becb541c5b0d09b3df4eb6e599cb3c7" + }, + "darwin/amd64": { + "file": "io.pilot.generallegal-0.2.0-darwin-amd64.tar.gz", + "sha256": "2bf7979bb57820f3faf7a4ccdd99b865e162252eeb5f33c2ea9054f236157dd3" + } + }, "publisher": "ed25519:Tl5OtWqZUPSGJkt7+Z2uOk+0YjvlxBsQdN9Rp6ZI3lE=", "exposes": [ "generallegal.deals_list", @@ -471,6 +611,13 @@ "generallegal.contract_get", "generallegal.document_upload", "generallegal.version_download_link", + "generallegal.signup_terms", + "generallegal.signup", + "generallegal.signup_resend", + "generallegal.signup_complete", + "generallegal.key_recover", + "generallegal.key_recover_complete", + "generallegal.set_key", "generallegal.formation_options", "generallegal.formation_start_llc", "generallegal.formation_start_c_corp", @@ -491,6 +638,10 @@ "cap": "fs.read", "target": "$APP/secrets.json" }, + { + "cap": "fs.write", + "target": "$APP/secrets.json" + }, { "cap": "fs.read", "target": "$APP/blobs"