diff --git a/Dockerfile.codex-automation b/Dockerfile.codex-automation deleted file mode 100644 index 3f50ea8..0000000 --- a/Dockerfile.codex-automation +++ /dev/null @@ -1,28 +0,0 @@ -FROM node:22-alpine - -# Install system dependencies -RUN apk add --no-cache \ - bash \ - git \ - curl \ - openssh-client \ - python3 \ - py3-pip - -# Install Codex CLI globally -# Requires Node.js 22+ according to their documentation -RUN npm install -g @openai/codex - -# Create workspace directory -WORKDIR /workspace - -# Configure git (default values, will be overridden) -RUN git config --global user.email "codex-automation@automation.com" && \ - git config --global user.name "Codex Code Automation" && \ - git config --global init.defaultBranch main - -# Set up environment -ENV NODE_ENV=production - -# Default command -CMD ["bash"] \ No newline at end of file diff --git a/README.md b/README.md index 811e8b5..6bc6967 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Async Code Agent +# Claude Code UI -Use Claude Code / CodeX CLI to perform multiple tasks in parallel with a Codex-style UI. +Use Claude Code to perform multiple tasks in parallel with a Claude Code-style UI. -A code agent task management system that provides parallel execution of AI-powered coding tasks. Users can run multiple Claude Code agents simultaneously through a Codex-style web interface, with support for different agents for comparison and evaluation. +A code agent task management system that provides parallel execution of Claude Code automation tasks. Users can run multiple Claude Code agents simultaneously through a web interface focused on Claude Code integration. ![async-code-ui](https://github.com/user-attachments/assets/e490c605-681a-4abb-a440-323e15f1a90d) @@ -12,19 +12,18 @@ A code agent task management system that provides parallel execution of AI-power ## Key Features -- 🤖 **Multi-Agent Support**: Run Claude Code and other AI agents in parallel +- 🤖 **Claude Code Integration**: Run Claude Code automation tasks in parallel - 🔄 **Parallel Task Management**: Execute multiple coding tasks simultaneously -- 🌐 **Codex-Style Web UI**: Clean interface for managing agent tasks -- 🔍 **Agent Comparison**: Compare outputs from different AI models +- 🌐 **Clean Web UI**: Modern interface for managing Claude Code tasks - đŸŗ **Containerized Execution**: Secure sandboxed environment for each task - 🔗 **Git Integration**: Automatic repository cloning, commits, and PR creation -- **Selfhost**: Deploy you rown parallel code agent platform. +- **Selfhost**: Deploy your own parallel code agent platform. ## Architecture - **Frontend**: Next.js with TypeScript and TailwindCSS - **Backend**: Python Flask API with Docker orchestration -- **Agents**: Claude Code (Anthropic) with extensible support for other models +- **Agent**: Claude Code (Anthropic) - **Task Management**: Parallel execution system based on container ## Quick Start @@ -72,10 +71,9 @@ See `db/README.md` for detailed database setup instructions. 1. **Setup GitHub Token**: Enter your GitHub token in the web interface 2. **Configure Repository**: Specify target repository and branch -3. **Select Agent**: Choose your preferred AI agent (Claude Code, etc.) -4. **Submit Tasks**: Start multiple coding tasks in parallel -5. **Compare Results**: Review and compare outputs from different agents -6. **Create PRs**: Generate pull requests from successful tasks +3. **Submit Tasks**: Start multiple Claude Code tasks in parallel +4. **Review Results**: Review outputs from Claude Code automation +5. **Create PRs**: Generate pull requests from successful tasks ## Environment Variables diff --git a/async-code-web/app/page.tsx b/async-code-web/app/page.tsx index caa1910..bc7ec4e 100644 --- a/async-code-web/app/page.tsx +++ b/async-code-web/app/page.tsx @@ -22,7 +22,6 @@ import { ApiService } from "@/lib/api-service"; import { SupabaseService } from "@/lib/supabase-service"; import { Project, Task } from "@/types"; import { ClaudeIcon } from "@/components/icon/claude"; -import { OpenAIIcon } from "@/components/icon/openai"; import { toast } from "sonner"; interface TaskWithProject extends Task { @@ -264,7 +263,6 @@ export default function Home() { const getAgentIcon = (agent: string) => { switch (agent) { case "claude": return ; - case "codex": return ; default: return null; } }; @@ -297,8 +295,8 @@ export default function Home() {
-

Async Code

-

Manage parallel AI code agents (Codex & Claude)

+

Claude Code UI

+

Manage parallel Claude Code automation tasks

@@ -462,15 +460,6 @@ export default function Home() {
- -
- -
- Codex - â€ĸ OpenAI's lightweight coding agent -
-
-
diff --git a/async-code-web/app/signin/page.tsx b/async-code-web/app/signin/page.tsx index c318f93..0bc3e4a 100644 --- a/async-code-web/app/signin/page.tsx +++ b/async-code-web/app/signin/page.tsx @@ -40,10 +40,10 @@ export default function SignIn() {

- Welcome to AI Code Automation + Welcome to Claude Code Automation

- Sign in to start automating your code with Claude Code & Codex CLI + Sign in to start automating your code with Claude Code

diff --git a/async-code-web/components/code-agent-settings.tsx b/async-code-web/components/code-agent-settings.tsx index d3e1dfd..78e79ca 100644 --- a/async-code-web/components/code-agent-settings.tsx +++ b/async-code-web/components/code-agent-settings.tsx @@ -18,9 +18,6 @@ interface CodeAgentConfig { env?: Record; credentials?: Record | null; }; - codex?: { - env?: Record; - }; } const DEFAULT_CLAUDE_ENV = { @@ -32,13 +29,6 @@ const DEFAULT_CLAUDE_CREDENTIALS = { // Example structure - user can customize }; -const DEFAULT_CODEX_ENV = { - OPENAI_API_KEY: "", - DISABLE_SANDBOX: "yes", - CONTINUE_ON_BROWSER: "no", - // Add other Codex-specific env vars here if needed -}; - // Helper function to check if credentials is meaningful (not empty/null/undefined) const hasMeaningfulCredentials = (creds: any): boolean => { if (!creds || creds === null || creds === undefined || creds === '') { @@ -54,12 +44,10 @@ export function CodeAgentSettings() { const { profile, refreshProfile } = useUserProfile(); const [claudeEnv, setClaudeEnv] = useState(""); const [claudeCredentials, setClaudeCredentials] = useState(""); - const [codexEnv, setCodexEnv] = useState(""); const [isLoading, setIsLoading] = useState(false); const [errors, setErrors] = useState<{ claudeEnv?: string; claudeCredentials?: string; - codexEnv?: string; }>({}); // Load settings from profile on mount @@ -84,28 +72,11 @@ export function CodeAgentSettings() { } } - // Handle backward compatibility for Codex config - let codexConfig: any = {}; - if (prefs.codex) { - // Check if it's the new structure - if (prefs.codex.env) { - codexConfig = prefs.codex; - } else { - // New structure for codex - codexConfig = { env: prefs.codex }; - } - } else if (prefs.codexCLI) { - // Old codexCLI key - migrate to new codex key - codexConfig = { env: prefs.codexCLI }; - } - setClaudeEnv(JSON.stringify(claudeConfig.env || DEFAULT_CLAUDE_ENV, null, 2)); setClaudeCredentials(JSON.stringify(claudeConfig.credentials || DEFAULT_CLAUDE_CREDENTIALS, null, 2)); - setCodexEnv(JSON.stringify(codexConfig.env || DEFAULT_CODEX_ENV, null, 2)); } else { setClaudeEnv(JSON.stringify(DEFAULT_CLAUDE_ENV, null, 2)); setClaudeCredentials(JSON.stringify(DEFAULT_CLAUDE_CREDENTIALS, null, 2)); - setCodexEnv(JSON.stringify(DEFAULT_CODEX_ENV, null, 2)); } }, [profile]); @@ -124,9 +95,8 @@ export function CodeAgentSettings() { // Validate all JSONs const isClaudeEnvValid = validateJSON(claudeEnv, "claudeEnv"); const isClaudeCredentialsValid = validateJSON(claudeCredentials, "claudeCredentials"); - const isCodexEnvValid = validateJSON(codexEnv, "codexEnv"); - if (!isClaudeEnvValid || !isClaudeCredentialsValid || !isCodexEnvValid) { + if (!isClaudeEnvValid || !isClaudeCredentialsValid) { toast.error("Please fix JSON errors before saving"); return; } @@ -135,23 +105,19 @@ export function CodeAgentSettings() { try { const claudeEnvConfig = JSON.parse(claudeEnv); const claudeCredentialsConfig = JSON.parse(claudeCredentials); - const codexEnvConfig = JSON.parse(codexEnv); const preferences: CodeAgentConfig = { claudeCode: { env: claudeEnvConfig, credentials: hasMeaningfulCredentials(claudeCredentialsConfig) ? claudeCredentialsConfig : null, }, - codex: { - env: codexEnvConfig, - }, }; // Merge with existing preferences if any const existingPrefs = (profile?.preferences || {}) as Record; - // Clean up old keys during migration - const { codexCLI, ...cleanedPrefs } = existingPrefs; + // Clean up old Codex keys during migration + const { codexCLI, codex, ...cleanedPrefs } = existingPrefs; const mergedPrefs = { ...cleanedPrefs, @@ -166,7 +132,7 @@ export function CodeAgentSettings() { ? "Claude credentials will be configured" : "Claude credentials are empty and will be skipped"; - toast.success(`Code agent settings saved successfully. ${credentialsMessage}`); + toast.success(`Claude Code settings saved successfully. ${credentialsMessage}`); } catch (error) { console.error("Failed to save settings:", error); toast.error("Failed to save settings"); @@ -179,9 +145,9 @@ export function CodeAgentSettings() {
- Code Agent Settings + Claude Code Settings - Configure environment variables and credentials for each code agent. These settings will be used when creating containers. + Configure environment variables and credentials for Claude Code. These settings will be used when creating containers. @@ -256,51 +222,9 @@ export function CodeAgentSettings() {
- {/* Codex CLI Settings */} -
-
- -

Codex CLI Configuration

-
- - {/* Codex Environment Variables */} -
- -
- { - setCodexEnv(value); - validateJSON(value, "codexEnv"); - }} - placeholder={JSON.stringify(DEFAULT_CODEX_ENV, null, 2)} - /> -
- {errors.codexEnv && ( -

{errors.codexEnv}

- )} -

- Configure environment variables for Codex CLI (@openai/codex) -

-
- -
-

- Note: Codex CLI does not require separate credentials configuration. All settings are handled via environment variables. -

-
-
-