WorkTranslator
Transform casual messages into polished, audience-appropriate professional communication — powered by your own writing style.
WorkTranslator is a VS Code extension that uses GitHub Copilot's language models to rewrite your informal drafts into clear, professional messages tailored for specific audiences (peers, leadership, team members). It learns your personal writing style from sample documents you provide, so every transformation sounds authentically you. The intent here is to use AI to protect your job for once.
Features
| Feature |
Description |
| Audience-aware transforms |
Adapts tone, depth, and vocabulary for peers, leadership, or team |
| Style learning |
Analyzes your writing samples to replicate your voice |
| Formality control |
Slider from 1 (casual) to 10 (very formal) per transform |
| Auto-detect audience |
Infers the best audience from message content |
| Editor selection support |
Transform selected text directly in the editor |
| Side-by-side output |
View original and transformed text together |
| Copy / Replace / Regenerate |
One-click actions on transformed output |
Privacy & Data Flow
WorkTranslator sends your draft message and excerpts from your writing samples to the GitHub Copilot language model API for transformation. No data is stored externally — all sample files remain on disk and all processing occurs within your VS Code session. If you enable debug logging, up to 50 characters of input/output may appear in the local output channel.
Getting Started
Prerequisites
- VS Code ≥ 1.85.0
- GitHub Copilot extension installed and activated (provides the language model API)
Quick Start
- Open the Command Palette (
Ctrl+Shift+P / Cmd+Shift+P)
- Run WorkTranslator: Transform Message
- Paste your draft, choose an audience, adjust formality, and click Transform
Adding Writing Samples
For best results, provide examples of your professional writing so the extension can learn your style:
- Create a folder in your workspace (default:
WritingSamples/)
- Add plain-text or markdown files — emails, Slack messages, documents
- Optionally include YAML frontmatter for richer metadata:
---
type: email
audience: leadership
context: status-update
date: 2024-01-15
description: Weekly security posture update
---
Your email content here...
- Run WorkTranslator: Reload Samples to pick up new files
- Run WorkTranslator: Generate Style Profile to rebuild your style profile
Commands
| Command |
Description |
Default Keybinding |
WorkTranslator: Transform Message |
Open the input panel with auto audience detection |
Ctrl+Alt+T |
WorkTranslator: Transform for Peer |
Open the input panel pre-set for peers |
— |
WorkTranslator: Transform for Leadership |
Open the input panel pre-set for leadership |
— |
WorkTranslator: Transform for Team |
Open the input panel pre-set for team |
— |
WorkTranslator: Transform Selection |
Transform selected text in the active editor |
— |
WorkTranslator: Reload Samples |
Reload writing samples from disk |
— |
WorkTranslator: Show Sample Stats |
Display statistics about loaded writing samples |
— |
WorkTranslator: Generate Style Profile |
Analyze samples and build a style profile |
— |
WorkTranslator: Show Style Profile |
Display the current style profile |
— |
WorkTranslator: Show Logs |
Open the WorkTranslator output channel |
— |
Settings
All settings live under the workTranslator.* namespace. Open Settings (Ctrl+,) and search for "WorkTranslator".
General
| Setting |
Type |
Default |
Description |
workTranslator.formality |
number |
7 |
Default formality level (1 = casual, 10 = very formal). Can be adjusted per-transform in the input panel. |
workTranslator.defaultAudience |
string |
"auto" |
Default audience type: auto, peer, leadership, or team. |
workTranslator.preserveAbbreviations |
boolean |
true |
Keep technical abbreviations (AuthN/AuthZ, CSPM, OAuth, etc.) instead of expanding them. |
workTranslator.enableAutoDetect |
boolean |
true |
Automatically detect audience from message content when audience is auto. |
Samples & Style
| Setting |
Type |
Default |
Description |
workTranslator.samplesDirectory |
string |
"WritingSamples" |
Folder containing your writing samples, relative to the workspace root. |
LLM / Model
| Setting |
Type |
Default |
Description |
workTranslator.maxTokens |
number |
2000 |
Maximum tokens for the LLM response (100–8000). Higher values allow longer output. |
workTranslator.temperature |
number |
0.7 |
LLM creativity/randomness (0–2). Lower = more predictable; higher = more creative. |
workTranslator.preferredModelFamily |
string |
"" |
Preferred model family (e.g. gpt-4o, claude-sonnet). Leave empty to use the best available model. |
Debugging
| Setting |
Type |
Default |
Description |
workTranslator.enableLogging |
boolean |
false |
Enable detailed logging to the WorkTranslator output channel. |
Architecture
WorkTranslator follows a clean modular architecture:
src/
├── extension.ts # Lean orchestrator — init, wire, dispose
├── commands/ # Command handlers (one file per domain)
│ ├── index.ts # Command registration
│ ├── serviceContainer.ts
│ ├── transformMessage.ts
│ ├── transformSelection.ts
│ ├── sampleCommands.ts
│ └── styleCommands.ts
├── core/ # Business logic
│ ├── llmClient.ts # VS Code Language Model API wrapper
│ ├── messageProcessor.ts # Transformation orchestrator
│ ├── promptBuilder.ts # Dynamic prompt construction
│ └── styleEngine.ts # Style profile generation
├── data/ # Data & configuration
│ ├── configManager.ts # Settings access & validation
│ └── sampleManager.ts # Writing sample loading & caching
├── types/
│ └── index.ts # All TypeScript interfaces
├── ui/ # Webview panels & status bar
│ ├── statusBar.ts
│ ├── inputPanel.ts
│ └── outputPanel.ts
└── utils/
├── logger.ts
└── textAnalysis.ts
Tips for Best Results
- Provide 4–8 writing samples across different audiences for accurate style learning.
- Use YAML frontmatter in your samples — it improves audience matching and context selection.
- Start with the default formality (7) and adjust after seeing a few transformations.
- Keep drafts under ~500 words — shorter inputs produce tighter, more focused output.
- Use specific audience commands (
Transform for Leadership, etc.) instead of auto-detect when you know your audience.
- Re-generate if the first result doesn't feel right — LLM output varies between runs.
Troubleshooting
| Symptom |
Cause |
Fix |
| "No language models available" |
GitHub Copilot is not signed in or the extension is disabled |
Install and sign into the GitHub Copilot extension |
| Transform produces generic output |
No writing samples loaded, or style profile not generated |
Add samples to WritingSamples/, run Reload Samples, then Generate Style Profile |
| Samples not detected |
Samples directory setting doesn't match your folder name |
Check workTranslator.samplesDirectory in Settings |
| Extension commands not appearing |
Extension failed to activate |
Open Output → WorkTranslator for error details; verify npm run compile succeeds |
| Slow transformations |
Large maxTokens or complex input |
Reduce workTranslator.maxTokens (default 2000 is sufficient for most messages) |
| Output too creative / inconsistent |
High temperature |
Lower workTranslator.temperature to 0.3–0.5 |
| Output too rigid / repetitive |
Low temperature |
Raise workTranslator.temperature to 0.8–1.0 |
Enabling Debug Logs
- Set
workTranslator.enableLogging to true in Settings
- Run WorkTranslator: Show Logs to open the output channel
- Reproduce the issue — timestamps, prompts, and errors will appear in the log
Development
# Install dependencies
npm install
# Compile
npm run compile
# Watch (auto-rebuild on changes)
npm run watch
# Launch Extension Development Host
# Press F5 in VS Code
# Run tests (compiles first, then launches VS Code Extension Host)
npm test
Testing
The project includes 90 automated tests across four suites:
| Suite |
Tests |
What's Covered |
| Type Definitions |
7 |
Error classes, LogLevel enum |
| Text Analysis |
42 |
All 15 text analysis functions |
| SampleManager |
17 |
File loading, parsing, filtering, caching |
| ConfigManager |
24 |
Settings access, defaults, clamping, singleton |
Tests run inside a real VS Code Extension Host via @vscode/test-electron to ensure correct interaction with the VS Code API.
License
See LICENSE for details.