The command line for your personal brand. Turn your terminal into a thought-leadership funnel.
v2.0.0 · enterprise synergy edition · powered by influencer-4-turbo
Every other tool got an AI-era CLI. Your personal brand deserves one too.
LockedIn CLI is a satirical, zero-dependency Node.js CLI for broetry, performative humility, recruiter spam, and enterprise buzzwords. Run it without a command for a simulated chat session, or use a one-shot command in a pipeline.
It is a local mockup for fun. No network calls, accounts, or user data.
Requires Node.js 18+ on Linux, macOS, or Windows.
git clone https://github.com/xjamesmorris/lockedin-cli.git
cd lockedin-cli
npm install -g . # installs `lockedin` and the `li` aliasOr run it in place:
node bin/lockedin.jsThere are no runtime dependencies and no build step.
Run lockedin with no arguments to open the simulated chat REPL. Type anything
and the active fictional model reframes it as leadership, or use a slash command.
At an interactive prompt, Tab completes slash command names and aliases, plus
the fixed /a11y parameters and currently supported /language codes. Parameter
completion also works through /accessibility, /lang, and /languages.
| Slash command | What it does |
|---|---|
/help · /h · /? · ? |
List slash commands. Only ? may omit the slash; bare h is ordinary input |
/feed |
Scroll 4–6 posts, including exactly one promoted post (alias: /timeline) |
/profile |
View your faux professional profile |
/plan [goal] |
Draft a “strategic” content plan |
/messages |
Open an inbox made entirely of recruiter spam (alias: /inbox) |
/model |
Show the static active-model card |
/stats |
Show session engagement |
/post · /humblebrag · /reflect [x] |
Generate professional oversharing |
/connect · /synergize |
Network and operationalize |
/clickbait · /aura · /celebrate |
Manufacture engagement |
/language [code] |
Show or switch among all 33 languages (aliases: /lang, /languages) |
| `/a11y [mode | 0-4]` |
/version |
Print version and existential purpose |
/legal |
Show the satire and license notice |
/clear · /exit |
Clear the screen or leave (aliases: /quit, /q, /x) |
lockedin [command] [input] [flags]
| Command | What it does |
|---|---|
lockedin |
Launch the interactive session when attached to a terminal |
lockedin chat |
Force the line-oriented session and read stdin |
lockedin feed |
Scroll the feed (alias: timeline) |
lockedin profile |
View your faux professional profile |
lockedin post |
Generate a thought-leadership post (alias: broetry) |
lockedin humblebrag |
Announce an achievement with performative modesty |
lockedin reflect [x] |
Find a profound lesson in something mundane |
lockedin connect |
Add 500 strangers to your “meaningful” network |
lockedin synergize |
Emit one sentence of enterprise buzzwords |
lockedin clickbait |
Fabricate an engagement-bait comment section |
lockedin aura |
Scan your professional aura |
lockedin celebrate |
Celebrate your early-adopter journey |
lockedin plan [goal] |
Draft a “strategic” content plan |
lockedin messages |
Open the recruiter-spam inbox (alias: inbox) |
lockedin model |
Show the static active-model card |
lockedin stats |
Show a fresh session-stat card |
lockedin version |
Print version information (also --version / -v) |
lockedin help |
Show command help (also --help / -h) |
lockedin legal |
Show the satire and license notice |
| Flag | Effect |
|---|---|
--version, -v |
Print version and existential purpose |
--lang <code>, -l <code> |
Force one of 33 languages |
--resume, -r |
Persist the faux profile across runs |
--accessible |
Screen-reader-friendly linear output (--a11y, --screen-reader) |
--high-contrast |
High-contrast palette (--hc) |
--low-distraction |
Reduced motion and decorative emoji (--calm, --reduce-motion) |
--plain |
Monochrome output with layout preserved (--mono, --monochrome) |
--yolo |
Does nothing. Bravely. |
--make-no-mistakes |
Also does nothing. Aspirationally. |
lockedin
lockedin post
lockedin feed
lockedin --resume profile
lockedin reflect "my standup ran four minutes over"
lockedin --lang ja aura
echo "/messages" | lockedin chatContent comes from seeded pools and structural templates. Set
LOCKEDIN_SEED when you want reproducible output:
LOCKEDIN_SEED=42 lockedin postfeed renders 4–6 shuffled posts with varied counts, subtitles, and footers.
Exactly one is marked promoted. It is always different and never new.
profile assembles a faux identity from localized pools. With --resume, its
language-agnostic pool indices and counters are saved to
~/.lockedin-cli/profile.json (or under LOCKEDIN_STATE_DIR). Missing or corrupt
state starts a fresh profile. Changing language changes the rendered words, not
the saved identity.
The entire CLI is localized into 33 languages: 29 left-to-right and four
right-to-left (ar, fa, he, and ur).
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
ar |
العربية | bn |
বাংলা | bo |
བོད་ཡིག |
de |
Deutsch | el |
Ελληνικά | en |
English |
en-SG |
Singlish | es |
Español | eu |
Euskara |
fa |
فارسی | fi |
Suomi | fr |
Français |
he |
עברית | hi |
हिन्दी | id |
Bahasa Indonesia |
is |
Íslenska | it |
Italiano | ja |
日本語 |
kn |
ಕನ್ನಡ | ms |
Bahasa Melayu | nl |
Nederlands |
no |
Norsk | pl |
Polski | pt |
Português |
pt-BR |
Português (Brasil) | ru |
Русский | sv |
Svenska |
tl |
Tagalog | tr |
Türkçe | uk |
Українська |
ur |
اردو | zh |
简体中文 | zh-HK |
繁體中文(香港) |
Language resolution is --lang → LOCKEDIN_LANG → host locale → English.
pt-BR and pt_BR select the canonical regional code, while generic pt
remains the backward-compatible Brazilian Portuguese bundle (both share the same
localized pools/UI); en-SG and en_SG keep Singlish, while generic en stays
English. zh-HK, zh_HK.UTF-8, and zh-Hant-HK select Hong Kong Traditional
Chinese; generic/mainland zh tags remain Simplified Chinese. Norwegian nb and
nn resolve to no, legacy Indonesian in resolves to id, fil/tgl
resolve to Tagalog (tl), and legacy iw selects Hebrew.
Inside a session, /language lists every code and /language <code> switches
immediately. After a switch, the CLI prints the way back in the previous
language so an unfamiliar script never strands you.
Japanese and Chinese layouts account for double-width characters. Arabic,
Persian, Hebrew, and Urdu omit Unicode bidi controls by default because some
terminals display them
as boxed LRI/RLI/PDI labels. If you know your terminal supports isolates,
set LOCKEDIN_BIDI=on to improve mixed RTL/LTR ordering while preserving logical
copy/paste order. Unset, empty, off, and invalid values stay safely off; pipes,
logs, and CI are never enabled implicitly. Screen-reader output always removes
the controls. Without the opt-in, mixed-direction ordering can be less
sophisticated, but no invisible formatting character is emitted. For combining
marks, an interactive terminal is probed once and the result cached in
~/.lockedin-cli/terminal.json; LOCKEDIN_COMBINING=wide or zero overrides
the probe.
The four modes compose and can be toggled live with /a11y; its panel always
numbers them 1–4, while 0 or reset turns all modes off.
| Mode | Enable with | Effect |
|---|---|---|
| Screen reader | --accessible, LOCKEDIN_ACCESSIBLE=1, or TERM=dumb |
Linear plain text without decorative terminal glyphs or colour |
| High contrast | --high-contrast or LOCKEDIN_HIGH_CONTRAST=1 |
Brighter, higher-contrast palette |
| Low distraction | --low-distraction, LOCKEDIN_LOW_DISTRACTION=1, or LOCKEDIN_REDUCE_MOTION=1 |
Reduced motion and decorative emoji, layout retained |
| Plain | --plain, LOCKEDIN_PLAIN=1, or NO_COLOR=1 |
No colour, layout retained |
The splash and accents use 24-bit truecolor. Terminals without it render
those gradients wrong — most notably macOS Terminal.app, which reports
TERM_PROGRAM=Apple_Terminal and never advertises truecolor. LockedIn CLI
detects Terminal.app and automatically falls back to --plain (monochrome,
layout intact).
For full colour, use a truecolor terminal such as Ghostty, iTerm2, or
WezTerm — they set COLORTERM=truecolor, which re-enables colour
automatically. To force colour anywhere, set COLORTERM=truecolor,
FORCE_COLOR=1, or LOCKEDIN_PLAIN=0 (though colour still looks wrong on a
terminal that lacks truecolor).
The fictional active model is always influencer-4-turbo. The model command
and /model show its static card; they do not offer configuration or change
runtime behavior.
It was trained exclusively on posts that begin with “Unpopular opinion:” and end with “Agree? 👇”. It has never been wrong because it has never said anything falsifiable.
All images are deterministic SVGs generated from the real renderers.
The project wiki is a beginner-friendly tutorial for building software with an AI coding agent. The app is its worked example.
Contributions are welcome. Clone the repository and open it with any capable
coding agent, such as Claude Code, Cursor, or Codex. Ask the agent to follow the
repository instructions and wiki tutorials, review its changes, and run
npm test before submitting. These are examples, not endorsements or built-in
integrations.
npm test # full Node test gate
node --test test/unit.test.js
node tools/screenshot.js # regenerate docs/screenshots/*.svgCI runs on Linux and Windows with Node 18, 20, and 22.
Satire. LockedIn CLI is a parody of AI-era command-line tools and
professional-networking “thought leadership.” It is not affiliated with,
endorsed by, sponsored by, or representative of LinkedIn or any other company.
Run lockedin legal for the full notice. Licensed
GPL-3.0-or-later.