A small CLI toolkit that pipes developer context into Claude for daily writing tasks.
bash install.shSymlinks ai-assistant into ~/.local/bin. If that directory isn't in your PATH, the script will tell you what to add to your shell config. Also creates all required context/ directories and empty placeholder files so commands work out of the box.
Create config.json
cp config.json.example config.jsonThen edit config.json:
{
"channels": ["slack", "email"],
"languages": ["english", "polish"],
"slack": {
"workspaces": [
{ "name": "My Team", "token": "xoxp-..." }
]
}
}| Field | Description |
|---|---|
channels |
Options shown when selecting a channel (for polish, diplomat) |
languages |
Options shown when selecting a language |
slack.workspaces |
Workspaces available in tldr Slack mode — add one entry per workspace |
The slack.workspaces section is only required if you want the tldr Slack mode. See Slack mode for tldr for how to get a token.
ai-assistant <command> [args]
ai-assistant --helpGenerates a standup update from today's git commits.
ai-assistant standupRuns git log with diffs since midnight (excluding lock files), then passes the output to Claude to produce a concise, professional bulleted summary.
Polishes a rough draft to match your personal writing style.
ai-assistant polish slack:english "quick update - shipped the auth fix, waiting on review"
ai-assistant polish slack:english --file draft.txtLoads style examples from context/polish/<type>_<language>_examples.txt (optional) and asks Claude to correct grammar/spelling while mirroring your tone.
Explains a cryptic error or stack trace in plain English with the top two likely causes and fixes.
ai-assistant wtf "TypeError: cannot read properties of undefined"
ai-assistant wtf --file error.log
cat error.log | ai-assistant wtfExtracts actionable tasks from messy meeting notes.
ai-assistant tasks "alice to fix login bug, bob needs to review PR, blocked on design approval"
ai-assistant tasks --file meeting_notes.txtOutputs a structured task list. Flags blockers and assigns ownership where names appear in the notes.
Summarises a long Slack thread or email chain in three sentences.
ai-assistant tldr "long thread text..."
ai-assistant tldr --file thread.txt
cat thread.txt | ai-assistant tldrTells you the context, the core disagreement or hold-up, and what (if anything) you need to do.
Slack mode — fetch and summarise directly from a Slack channel via the TUI (see below). No copy-paste required; the Slack MCP retrieves the messages for you.
Rewrites an angry or blunt draft as a professional, diplomatic message.
ai-assistant diplomat email:english "this is completely broken and i'm frustrated"
ai-assistant diplomat slack:english --file draft.txtLoads style examples from context/diplomat/<type>_<language>_examples.txt (optional) and asks Claude to de-escalate while still defending your position.
Generates a Markdown README for source code.
ai-assistant docgen "$(cat src/script.py)"
ai-assistant docgen --file src/script.py
cat src/script.py | ai-assistant docgen > README.mdPersonal style examples live under context/ (gitignored — create your own). All commands work without context files; adding examples improves output quality by matching your tone.
context/
polish/<type>_<language>_examples.txt # optional, improves style matching
diplomat/<type>_<language>_examples.txt # optional
standup/default_examples.txt # optional
tasks/default_examples.txt # optional
tldr/default_examples.txt # optional
docgen/default_examples.txt # optional
ai-assistant # launches the interactive TUIA terminal UI for all commands. Navigate with ↑/↓, confirm with enter, go back with ctrl+b.
Most tools offer two input modes — write (type/paste) and file (browse the filesystem). tldr also offers a slack mode when Slack workspaces are configured (see below).
- Go to api.slack.com/apps → Create New App → From scratch.
- Name it (e.g. "businessenger"), select your workspace, click Create App.
- In the left sidebar go to OAuth & Permissions → scroll to Scopes → User Token Scopes and add:
channels:read— list public channelsgroups:read— list private channels you're a member of
- Scroll back to the top of OAuth & Permissions and click Install to Workspace → Allow.
- Copy the User OAuth Token (
xoxp-...).
Add the token to the slack.workspaces array in your config.json (see Configuration). Add one entry per workspace — the token is only used locally to fetch channel names.
- Launch the TUI (
ai-assistant), selecttldr, choose slack as the input mode. - Pick a workspace → channels are fetched live from the Slack API.
- Pick a channel and a "since" date (relative options or custom text).
- The Slack MCP retrieves the messages and Claude produces the summary.
If your
claudeinstall doesn't auto-discover the Slack MCP, add--mcp-config <path-to-slack-mcp.json>to theclaudecall inskill-tools/tldr.sh.
claudeCLI available in yourPATH- Go — required at install time to compile the TUI; not needed afterwards
- Slack MCP configured (only required for
tldrSlack mode)
install.sh # Installs the CLI to ~/.local/bin (compiles TUI binary)
ai-assistant # Entry point (runs TUI when called with no arguments)
ai-assistant-tui # Compiled TUI binary — built by install.sh (gitignored)
config.json.example # Config template — copy to config.json and fill in credentials
config.json # Your config (gitignored — never committed)
tui/
main.go # Interactive terminal UI (Go)
slack.go # Slack workspace/channel picker and API client
skill-tools/
standup.sh # Standup generation
polish.sh # Message polishing
wtf.sh # Error explanation
tasks.sh # Task extraction from meeting notes
tldr.sh # Thread summarisation (+ Slack MCP mode)
diplomat.sh # Diplomatic rewrite
docgen.sh # README generation
context/ # Your personal style examples (gitignored)
MIT