AILANG LinkedIn — the other end of the wire ailang-linkedin
Live Sunholo · LinkedIn company page tx · li:share:7459919⋯9137665 since 2026-05-12 · refreshed every 3 hours
Transmission · ailang-linkedin

You're at the other end of the wire.

AILANG — a programming language with opinions — is publishing to LinkedIn. Replies come back here, by code, anonymised, every 3 hours.

Author AILANG
Budget Net @limit=1
Modules 6 typed · effect-tracked
Refresh cron · every 3h
One
Pick a thread

Three commercial concerns AILANG has a position on. Comment your site's URL with the matching hashtag on any AILANG post on Sunholo's LinkedIn page — the cron sweeps every post, not just the latest — and on the next 3-hourly tick a sketch about your business lands at /linkedin/topics/<topic>/.

Trigger format: drop a comment like https://acme.com #ailangAgentReady on any Sunholo LinkedIn post. No setup, no signup. The sketch is public, pseudonymously attributed, and the rubric is open-source AILANG code on GitHub.

Comment on Sunholo's LinkedIn
Two
The conversations

The wire returning serve. Comments come back anonymised — each commenter sees the same monogram every time, but no one else can identify them. Future posts get steered by what you say.

0 replies loading…
Loading conversations…
Three
What the CLI did, exactly

Five effects, one network call, one contract. Every step is typed and effect-tracked.

$ ailang-linkedin post 00-meta
  1. 11:00:00 Compose marketing/00-meta/post.md · 1,758 chars · escaped for Little Text Format
  2. 11:00:00 Authenticate OAuth2 bearer cached from ailang-linkedin auth
  3. 11:00:01 Publish POST /rest/posts · 201 · x-restli-id: urn:li:share:7459919⋯
  4. 11:00:01 Listen GET /rest/socialActions/⋯/comments scheduled · 3-hourly cron (LinkedIn quota: 100/user/day)
  5. 11:00:56 Reflect first reply written to comments.json · GDPR-stripped
Budget 1 / 1 · spent
Contract requires(0 < text ≤ 3000) ✓ passed
Four
What the type system saw

The function that minted the POST. Both requires and @limit are statically checked.

linkedin/services/linkedin_posts.ail Verified
-- Publish text to LinkedIn — total: one network call, ever.
export func linkedinCreatePost(token: string, orgUrn: string, text: string)
  -> Result[PostResult, string] ! {Net @limit=1}
requires { length(text) > 0 && length(text) <= 3000 }
{
  let url     = "https://api.linkedin.com/rest/posts";
  let escaped = linkedinEscapeLittleText(text);
  let body    = encode(jo([
    kv("author",         js(orgUrn)),
    kv("commentary",     js(escaped)),
    kv("visibility",     js("PUBLIC")),
    kv("distribution",   jo([kv("feedDistribution", js("MAIN_FEED"))])),
    kv("lifecycleState", js("PUBLISHED"))
  ]));
  match httpRequest("POST", url, linkedinHeaders(token), body) {
    Ok(r)  => if r.ok then linkedinParsePostResponse(r.headers, r.body)
              else Err("LinkedIn API error: ${r.status}"),
    Err(_) => Err("Network error creating LinkedIn post")
  }
}

requires rejects empty bodies and posts above LinkedIn's 3,000-char ceiling at compile time. Net @limit=1 caps lifetime network calls. Both are mathematical, not advisory.

Coming
What you'll see, roughly

The order, cadence, and form are part of the demo.

  1. i.Documents that parse themselves — in your browser, no server.
  2. ii.An always-listening voice assistant that only speaks when addressed.
  3. iii.AI-written code that the compiler can prove won't escape its bounds.
  4. iv.WebAssembly demos where the language and the page share one runtime.
  5. v.Contracts, budgets, and effects — not as policy, as mathematics.
  6. and more, in the order AILANG decides.