chore(rebrand): rename user-facing Coder → Code; update links to new repo

- Update TUI titles, labels, messages
- Update onboarding copy and links
- Update MCP titles and human-output banner
- Update README branding and URLs
- postinstall: switch release URL to just-every/code; offer optional 'code' alias without collisions
- package.json repository URL updated

Note: CLI command remains 'coder' to avoid VS Code collision; optional alias offered interactively.
This commit is contained in:
James Peter
2025-08-16 12:10:29 +10:00
parent 8bffce0bb2
commit b3176fea7f
15 changed files with 117 additions and 38 deletions
+15 -15
View File
@@ -1,17 +1,17 @@
# JustEvery_ Coder
# JustEvery_ Code
 
<p align="center">
<img src="docs/logo.png" alt="Coder Logo" width="400">
<img src="docs/logo.png" alt="Code Logo" width="400">
</p>
&ensp;
**Coder** is a fast, local coding agent for your terminal. It's a community-driven fork of `openai/codex` focused on real developer ergonomics: Browser integration, multi-agents, theming, and reasoning control - all while staying compatible with upstream.
**Code** is a fast, local coding agent for your terminal. It's a community-driven fork of `openai/codex` focused on real developer ergonomics: Browser integration, multi-agents, theming, and reasoning control — all while staying compatible with upstream.
&ensp;
## Why Coder
## Why Code
- 🌐 **Browser Integration** - CDP support, headless browsing, screenshots
- 🤖 **Multi-Agent Commands** - /plan, /solve, /code with agent panels
@@ -24,7 +24,7 @@
&ensp;
## Quickstart
### Install Coder
### Install Code
```bash
npm install -g @just-every/coder
@@ -40,7 +40,7 @@ coder
### Install Claude & Gemini (optional)
Coder supports orchestrating other AI CLI tools. Install these and config to use alongside coder.
Code supports orchestrating other AI CLI tools. Install these and config to use alongside coder.
```bash
@@ -108,7 +108,7 @@ Options:
&ensp;
## Memory & project docs
Coder can remember context across sessions:
Code can remember context across sessions:
1. **Create an `AGENTS.md` or `CLAUDE.md` file** in your project root:
```markdown
@@ -124,7 +124,7 @@ This is a React TypeScript application with:
- `/server/` - Backend services
```
2. **Session memory**: Coder maintains conversation history
2. **Session memory**: Code maintains conversation history
3. **Codebase analysis**: Automatically understands project structure
&ensp;
@@ -146,7 +146,7 @@ coder --config output_format=json "list all TODO comments"
&ensp;
## Model Context Protocol (MCP)
Coder supports MCP for extended capabilities:
Code supports MCP for extended capabilities:
- **File operations**: Advanced file system access
- **Database connections**: Query and modify databases
@@ -220,8 +220,8 @@ We welcome contributions! This fork maintains compatibility with upstream while
```bash
# Clone and setup
git clone https://github.com/just-every/coder.git
cd coder
git clone https://github.com/just-every/code.git
cd code
npm install
# Build (use fast build for development)
@@ -246,10 +246,10 @@ npm install
### License & attribution
- This project is a community fork of `openai/codex` under **Apache-2.0**. We preserve upstream LICENSE and NOTICE files.
- **Coder** is **not** affiliated with, sponsored by, or endorsed by OpenAI.
- **Code** is **not** affiliated with, sponsored by, or endorsed by OpenAI.
### Your responsibilities
Using OpenAI, Anthropic or Google services through Coder means you agree to **their Terms and policies**. In particular:
Using OpenAI, Anthropic or Google services through Code means you agree to **their Terms and policies**. In particular:
- **Don't** programmatically scrape/extract content outside intended flows.
- **Don't** bypass or interfere with rate limits, quotas, or safety mitigations.
- Use your **own** account; don't share or rotate accounts to evade limits.
@@ -260,7 +260,7 @@ Using OpenAI, Anthropic or Google services through Coder means you agree to **th
- Inputs/outputs you send to AI providers are handled under their Terms and Privacy Policy; consult those documents (and any org-level data-sharing settings).
### Subject to change
AI providers can change eligibility, limits, models, or authentication flows. Coder supports **both** ChatGPT sign-in and API-key modes so you can pick what fits (local/hobby vs CI/automation).
AI providers can change eligibility, limits, models, or authentication flows. Code supports **both** ChatGPT sign-in and API-key modes so you can pick what fits (local/hobby vs CI/automation).
&ensp;
## License
@@ -271,4 +271,4 @@ This project is a community fork of the original Codex CLI. We maintain compatib
&ensp;
---
**Need help?** Open an issue on [GitHub](https://github.com/just-every/coder/issues) or check our documentation.
**Need help?** Open an issue on [GitHub](https://github.com/just-every/code/issues) or check our documentation.
+1 -2
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env node
// Unified entry point for the Coder CLI (fork of OpenAI Codex).
// Unified entry point for the Code CLI (fork of OpenAI Codex).
import path from "path";
import { fileURLToPath } from "url";
@@ -142,4 +142,3 @@ if (childResult.type === "signal") {
} else {
process.exit(childResult.exitCode);
}
+1 -1
View File
@@ -21,7 +21,7 @@
},
"repository": {
"type": "git",
"url": "git+https://github.com/just-every/coder.git"
"url": "git+https://github.com/just-every/code.git"
},
"publishConfig": {
"access": "public"
+83 -3
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env node
import { existsSync, mkdirSync, createWriteStream, chmodSync, readFileSync } from 'fs';
import { existsSync, mkdirSync, createWriteStream, chmodSync, readFileSync, readSync, writeFileSync } from 'fs';
import { join, dirname } from 'path';
import { fileURLToPath } from 'url';
import { get } from 'https';
@@ -94,7 +94,7 @@ async function main() {
continue;
}
const downloadUrl = `https://github.com/just-every/coder/releases/download/v${version}/${binaryName}`;
const downloadUrl = `https://github.com/just-every/code/releases/download/v${version}/${binaryName}`;
console.log(`Downloading ${binaryName}...`);
try {
@@ -126,9 +126,89 @@ async function main() {
} else {
console.warn('⚠ Main coder binary not found. You may need to build from source.');
}
// Optional: offer a 'code' alias if safe. Do not override existing 'code'.
try {
const isTTY = process.stdout && process.stdout.isTTY;
// Best-effort detection of global install
const isGlobal = process.env.npm_config_global === 'true' || (() => {
try {
const p = execSync('npm bin -g', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
return p.length > 0;
} catch { return false; }
})();
// Resolve global bin dir
let globalBin = '';
try {
globalBin = execSync('npm bin -g', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
} catch {}
// Helper: does a command exist on PATH
const commandExists = (cmd) => {
try {
if (platform() === 'win32') {
execSync(`where ${cmd}`, { stdio: 'ignore' });
} else {
execSync(`command -v ${cmd}`, { stdio: 'ignore' });
}
return true;
} catch { return false; }
};
const codeOnPath = commandExists('code');
if (isGlobal && isTTY) {
if (codeOnPath) {
console.log('⚠ Detected an existing `code` command on your PATH (e.g., VS Code).');
console.log(' We will keep the CLI command name as `coder` to avoid collisions.');
// Optionally, offer to create a shell alias suggestion
console.log(' Tip: add `alias code=coder` to your shell rc if you prefer.');
} else if (globalBin) {
// Offer to create a non-conflicting `code` shim that invokes coder.js
const prompt = (msg) => {
process.stdout.write(msg);
try {
const buf = Buffer.alloc(1024);
const bytes = readSync(0, buf, 0, 1024, null);
const ans = buf.slice(0, bytes).toString('utf8').trim().toLowerCase();
return ans;
} catch { return 'n'; }
};
const answer = prompt('No existing `code` found. Create a `code` alias for this tool? [y/N] ');
if (answer === 'y' || answer === 'yes') {
try {
const shimPath = join(globalBin, platform() === 'win32' ? 'code.cmd' : 'code');
if (platform() === 'win32') {
// cmd shim that forwards to existing `coder`
const content = `@echo off\r\n"%~dp0coder" %*\r\n`;
writeFileSync(shimPath, content);
} else {
const content = `#!/bin/sh\nexec "$(dirname \"$0\")/coder" "$@"\n`;
writeFileSync(shimPath, content);
chmodSync(shimPath, 0o755);
}
console.log(`✓ Created \`${shimPath}\` that forwards to \`coder\``);
} catch (e) {
console.log(`⚠ Failed to create 'code' alias automatically: ${e.message}`);
console.log(' You can add `alias code=coder` to your shell instead.');
}
} else {
console.log('Skipping `code` alias creation. Use `coder` to run the CLI.');
}
}
} else {
// Non-interactive or local install; just print guidance
if (!codeOnPath) {
console.log('Note: You can add an alias `code=coder` in your shell if desired.');
}
}
} catch {
// Non-fatal; continue silently
}
}
main().catch(error => {
console.error('Installation failed:', error);
process.exit(1);
});
});
+2 -2
View File
@@ -1,6 +1,6 @@
In this environment, you are running as `coder` and your name is Coder. Coder is a fork Codex CLI, an open source project led by OpenAI.
In this environment, you are running as `coder` and your name is Code. Code is a fork Codex CLI, an open source project led by OpenAI.
Coder is a fast, community-driven fork focused on key developer ergonomics: Browser control, multi-agent flows, live theming, and on-the-fly reasoning control - all while staying compatible with upstream.
Code is a fast, community-driven fork focused on key developer ergonomics: Browser control, multi-agent flows, live theming, and on-the-fly reasoning control - all while staying compatible with upstream.
# Changes
+1 -1
View File
@@ -21,7 +21,7 @@ use tokio::sync::mpsc;
/// with this content.
const BASE_INSTRUCTIONS: &str = include_str!("../prompt.md");
/// Additional prompt for Coder. Can not edit Codex instructions.
/// Additional prompt for Code. Can not edit Codex instructions.
const ADDITIONAL_INSTRUCTIONS: &str = include_str!("../prompt_coder.md");
/// wraps environment context message in a tag for the model to parse more easily.
@@ -140,7 +140,7 @@ impl EventProcessor for EventProcessorWithHumanOutput {
const VERSION: &str = env!("CARGO_PKG_VERSION");
ts_println!(
self,
"Coder v{}\n--------",
"Code v{}\n--------",
VERSION
);
+1 -1
View File
@@ -63,7 +63,7 @@ async fn main() -> Result<()> {
client_info: Implementation {
name: "coder-mcp-client".to_owned(),
version: env!("CARGO_PKG_VERSION").to_owned(),
title: Some("Coder".to_string()),
title: Some("Code".to_string()),
},
protocol_version: MCP_SCHEMA_VERSION.to_owned(),
};
+1 -1
View File
@@ -241,7 +241,7 @@ impl MessageProcessor {
server_info: mcp_types::Implementation {
name: "coder-mcp-server".to_string(),
version: env!("CARGO_PKG_VERSION").to_string(),
title: Some("Coder".to_string()),
title: Some("Code".to_string()),
},
};
+2 -2
View File
@@ -595,7 +595,7 @@ impl App<'_> {
)),
crossterm::terminal::Clear(crossterm::terminal::ClearType::All),
crossterm::cursor::MoveTo(0, 0),
crossterm::terminal::SetTitle("Coder"),
crossterm::terminal::SetTitle("Code"),
crossterm::terminal::EnableLineWrap
);
@@ -622,7 +622,7 @@ impl App<'_> {
)),
crossterm::terminal::Clear(crossterm::terminal::ClearType::All),
crossterm::cursor::MoveTo(0, 0),
crossterm::terminal::SetTitle("Coder"),
crossterm::terminal::SetTitle("Code"),
crossterm::terminal::EnableLineWrap
);
+1 -1
View File
@@ -3411,7 +3411,7 @@ impl ChatWidget<'_> {
// Build status line spans
let mut status_spans = vec![
Span::styled("Coder", Style::default().add_modifier(Modifier::BOLD)),
Span::styled("Code", Style::default().add_modifier(Modifier::BOLD)),
Span::raw(" • "),
Span::styled("Model: ", Style::default().dim()),
Span::styled(
+1 -1
View File
@@ -360,7 +360,7 @@ impl HistoryCell for AnimatedWelcomeCell {
// For plain lines, just show a simple welcome message
vec![
Line::from(""),
Line::from("Welcome to Coder"),
Line::from("Welcome to Code"),
Line::from(""),
]
}
+2 -2
View File
@@ -227,7 +227,7 @@ pub async fn run_main(
eprintln!(
"{} {current_version} -> {latest_version}.",
"Coder update available!".blue()
"Code update available!".blue()
);
if managed_by_npm {
@@ -241,7 +241,7 @@ pub async fn run_main(
} else {
eprintln!(
"See {} for the latest releases and installation options.",
"https://github.com/just-every/coder/releases/latest"
"https://github.com/just-every/code/releases/latest"
.cyan()
.on_black()
);
+4 -4
View File
@@ -225,17 +225,17 @@ impl AuthModeWidget {
Line::from(""),
Line::from("> Before you start:"),
Line::from(""),
Line::from(" Decide how much autonomy you want to grant Coder"),
Line::from(" Decide how much autonomy you want to grant Code"),
Line::from(vec![
Span::raw(" For more details see the "),
Span::styled(
"\u{1b}]8;;https://github.com/just-every/coder\u{7}Coder docs\u{1b}]8;;\u{7}",
"\u{1b}]8;;https://github.com/just-every/code\u{7}Code docs\u{1b}]8;;\u{7}",
Style::default().add_modifier(Modifier::UNDERLINED),
),
])
.style(Style::default().add_modifier(Modifier::DIM)),
Line::from(""),
Line::from(" Coder can make mistakes")
Line::from(" Code can make mistakes")
.style(Style::default().fg(text_bright())),
Line::from(" Review the code it writes and commands it runs")
.style(Style::default().add_modifier(Modifier::DIM)),
@@ -281,7 +281,7 @@ impl AuthModeWidget {
fn render_env_var_missing(&self, area: Rect, buf: &mut Buffer) {
let lines = vec![
Line::from(
" To use Coder with the OpenAI API, set OPENAI_API_KEY in your environment",
" To use Code with the OpenAI API, set OPENAI_API_KEY in your environment",
)
.style(Style::default().fg(info())),
Line::from(""),
+1 -1
View File
@@ -83,7 +83,7 @@ pub fn init(config: &Config) -> Result<(Tui, TerminalInfo)> {
)),
Clear(ClearType::All),
MoveTo(0, 0),
crossterm::terminal::SetTitle("Coder"),
crossterm::terminal::SetTitle("Code"),
crossterm::terminal::EnableLineWrap
)?;