From 5bd1b9b43104c052f13edeeafd526dc850e49f60 Mon Sep 17 00:00:00 2001 From: Mark Milligan Date: Thu, 7 Aug 2025 09:10:52 -0700 Subject: [PATCH 1/8] feat: sharkymark profile and claude template --- registry/sharkymark/.images/avatar.png | Bin 0 -> 28802 bytes registry/sharkymark/readme.MD | 34 ++ .../templates/docker-claude/README.md | 36 ++ .../templates/docker-claude/main.tf | 364 ++++++++++++++++++ 4 files changed, 434 insertions(+) create mode 100644 registry/sharkymark/.images/avatar.png create mode 100644 registry/sharkymark/readme.MD create mode 100644 registry/sharkymark/templates/docker-claude/README.md create mode 100644 registry/sharkymark/templates/docker-claude/main.tf diff --git a/registry/sharkymark/.images/avatar.png b/registry/sharkymark/.images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe374200f868861e0aaf3e882eeae908afc8db28 GIT binary patch literal 28802 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/dev/null 2>&1; then + yes | npx playwright install chrome + fi + + # MCP: Install and configure MCP Servers + npm install -g @wonderwhy-er/desktop-commander + claude mcp add playwright npx -- @playwright/mcp@latest --headless --isolated --no-sandbox + claude mcp add desktop-commander desktop-commander + + # Repo: Clone and pull changes from the git repository + if [ ! -d "realworld-django-rest-framework-angular" ]; then + git clone https://github.com/coder-contrib/realworld-django-rest-framework-angular.git + else + cd realworld-django-rest-framework-angular + git fetch + # Check for uncommitted changes + if git diff-index --quiet HEAD -- && \ + [ -z "$(git status --porcelain --untracked-files=no)" ] && \ + [ -z "$(git log --branches --not --remotes)" ]; then + echo "Repo is clean. Pulling latest changes..." + git pull + else + echo "Repo has uncommitted or unpushed changes. Skipping pull." + fi + + cd .. + fi + + # Initialize: Start the development server + cd realworld-django-rest-framework-angular && ./start-dev.sh + EOT + "preview_port" = "4200" + "container_image" = "codercom/example-universal:ubuntu" + "jetbrains_ide" = "PY" + } +} + +# Advanced parameters (these are all set via preset) +data "coder_parameter" "system_prompt" { + name = "system_prompt" + display_name = "System Prompt" + type = "string" + form_type = "textarea" + description = "System prompt for the agent with generalized instructions" + mutable = false +} +data "coder_parameter" "ai_prompt" { + type = "string" + name = "AI Prompt" + default = "" + description = "Write a prompt for Claude Code" + mutable = true +} +data "coder_parameter" "setup_script" { + name = "setup_script" + display_name = "Setup Script" + type = "string" + form_type = "textarea" + description = "Script to run before running the agent" + mutable = false +} +data "coder_parameter" "container_image" { + name = "container_image" + display_name = "Container Image" + type = "string" + default = "codercom/example-universal:ubuntu" + mutable = false +} +data "coder_parameter" "preview_port" { + name = "preview_port" + display_name = "Preview Port" + description = "The port the web app is running to preview in Tasks" + type = "number" + default = "3000" + mutable = false +} + +# Other variables for Claude Code +resource "coder_env" "claude_task_prompt" { + agent_id = coder_agent.dev.id + name = "CODER_MCP_CLAUDE_TASK_PROMPT" + value = data.coder_parameter.ai_prompt.value +} +resource "coder_env" "app_status_slug" { + agent_id = coder_agent.dev.id + name = "CODER_MCP_APP_STATUS_SLUG" + value = "claude-code" +} +resource "coder_env" "claude_system_prompt" { + agent_id = coder_agent.dev.id + name = "CODER_MCP_CLAUDE_SYSTEM_PROMPT" + value = data.coder_parameter.system_prompt.value +} + +module "coder-login" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/modules/coder-login/coder" + agent_id = coder_agent.dev.id +} + +module "dotfiles" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/modules/dotfiles/coder" + agent_id = coder_agent.dev.id +} + +module "code-server" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/modules/code-server/coder" + agent_id = coder_agent.dev.id + folder = "/home/coder/projects" +} + +module "git-config" { + count = data.coder_workspace.me.start_count + source = "registry.coder.com/modules/git-config/coder" + agent_id = coder_agent.dev.id +} + +resource "coder_agent" "dev" { + arch = data.coder_provisioner.me.arch + os = "linux" + + # The following metadata blocks are optional. They are used to display + # information about your workspace in the dashboard. You can remove them + # if you don't want to display any information. + # For basic resources, you can use the `coder stat` command. + # If you need more control, you can write your own script. + + metadata { + display_name = "CPU Usage" + key = "0_cpu_usage" + script = "coder stat cpu" + interval = 10 + timeout = 1 + } + + metadata { + display_name = "RAM Usage" + key = "1_ram_usage" + script = "coder stat mem" + interval = 10 + timeout = 1 + } + + metadata { + display_name = "Home Disk" + key = "3_home_disk" + script = "coder stat disk --path $${HOME}" + interval = 60 + timeout = 1 + } + + metadata { + display_name = "CPU Usage (Host)" + key = "4_cpu_usage_host" + script = "coder stat cpu --host" + interval = 10 + timeout = 1 + } + + metadata { + display_name = "Memory Usage (Host)" + key = "5_mem_usage_host" + script = "coder stat mem --host" + interval = 10 + timeout = 1 + } + + display_apps { + vscode = true + vscode_insiders = false + ssh_helper = false + port_forwarding_helper = true + web_terminal = true + } + + startup_script_behavior = "non-blocking" + connection_timeout = 300 + + env = { + + GIT_AUTHOR_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name) + GIT_AUTHOR_EMAIL = "${data.coder_workspace_owner.me.email}" + GIT_COMMITTER_NAME = coalesce(data.coder_workspace_owner.me.full_name, data.coder_workspace_owner.me.name) + GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}" + } + + startup_script = < Date: Thu, 7 Aug 2025 14:04:04 -0700 Subject: [PATCH 2/8] chore: format README.md --- registry/sharkymark/templates/docker-claude/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/registry/sharkymark/templates/docker-claude/README.md b/registry/sharkymark/templates/docker-claude/README.md index 8ffcab618..1c037ade1 100644 --- a/registry/sharkymark/templates/docker-claude/README.md +++ b/registry/sharkymark/templates/docker-claude/README.md @@ -3,8 +3,7 @@ display_name: "Claude Code AI Agent Template" description: The goal is to try the experimental ai agent integration with Claude CodeAI agent icon: "../../../../.icons/claude.svg" verified: false -tags: ["ai", "docker","container"] ---- +tags: ["ai", "docker", "container"] --- # ai agent template for a workspace in a container on a Docker host From 8c58f23f628026be4beb4794accd236db1b9bc31 Mon Sep 17 00:00:00 2001 From: Mark Milligan Date: Thu, 7 Aug 2025 14:05:39 -0700 Subject: [PATCH 3/8] chore: format README.md --- .../templates/docker-claude/main.tf | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/registry/sharkymark/templates/docker-claude/main.tf b/registry/sharkymark/templates/docker-claude/main.tf index 7b14e8b6a..307a62b65 100644 --- a/registry/sharkymark/templates/docker-claude/main.tf +++ b/registry/sharkymark/templates/docker-claude/main.tf @@ -1,10 +1,10 @@ terraform { required_providers { coder = { - source = "coder/coder" + source = "coder/coder" } docker = { - source = "kreuzwerker/docker" + source = "kreuzwerker/docker" } } } @@ -35,7 +35,7 @@ variable "socket" { e.g., unix:///var/run/docker.sock EOF - default = "unix:///var/run/docker.sock" + default = "unix:///var/run/docker.sock" } variable "anthropic_api_key" { @@ -212,10 +212,10 @@ module "dotfiles" { } module "code-server" { - count = data.coder_workspace.me.start_count - source = "registry.coder.com/modules/code-server/coder" - agent_id = coder_agent.dev.id - folder = "/home/coder/projects" + count = data.coder_workspace.me.start_count + source = "registry.coder.com/modules/code-server/coder" + agent_id = coder_agent.dev.id + folder = "/home/coder/projects" } module "git-config" { @@ -225,8 +225,8 @@ module "git-config" { } resource "coder_agent" "dev" { - arch = data.coder_provisioner.me.arch - os = "linux" + arch = data.coder_provisioner.me.arch + os = "linux" # The following metadata blocks are optional. They are used to display # information about your workspace in the dashboard. You can remove them @@ -275,15 +275,15 @@ resource "coder_agent" "dev" { } display_apps { - vscode = true - vscode_insiders = false - ssh_helper = false + vscode = true + vscode_insiders = false + ssh_helper = false port_forwarding_helper = true - web_terminal = true + web_terminal = true } startup_script_behavior = "non-blocking" - connection_timeout = 300 + connection_timeout = 300 env = { @@ -293,7 +293,7 @@ resource "coder_agent" "dev" { GIT_COMMITTER_EMAIL = "${data.coder_workspace_owner.me.email}" } - startup_script = < Date: Fri, 8 Aug 2025 06:38:37 -0700 Subject: [PATCH 4/8] chore: capitalization changes on readme and tags --- registry/sharkymark/templates/docker-claude/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/registry/sharkymark/templates/docker-claude/README.md b/registry/sharkymark/templates/docker-claude/README.md index 1c037ade1..733391407 100644 --- a/registry/sharkymark/templates/docker-claude/README.md +++ b/registry/sharkymark/templates/docker-claude/README.md @@ -3,7 +3,7 @@ display_name: "Claude Code AI Agent Template" description: The goal is to try the experimental ai agent integration with Claude CodeAI agent icon: "../../../../.icons/claude.svg" verified: false -tags: ["ai", "docker", "container"] +tags: ["ai", "docker", "container", "claude", "agent", "tasks"] --- # ai agent template for a workspace in a container on a Docker host From 1f17c2a1f9955f572040375abb7fbefc53997232 Mon Sep 17 00:00:00 2001 From: DevCats Date: Fri, 8 Aug 2025 10:24:58 -0500 Subject: [PATCH 5/8] chore: correct capitalization on namespace README.md --- registry/sharkymark/{readme.MD => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename registry/sharkymark/{readme.MD => README.md} (100%) diff --git a/registry/sharkymark/readme.MD b/registry/sharkymark/README.md similarity index 100% rename from registry/sharkymark/readme.MD rename to registry/sharkymark/README.md From 2d5fd0dde5603f3f3e96d01c878f25ade616214b Mon Sep 17 00:00:00 2001 From: Mark Milligan Date: Fri, 8 Aug 2025 16:33:54 -0700 Subject: [PATCH 6/8] bun fmt --- registry/sharkymark/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/registry/sharkymark/README.md b/registry/sharkymark/README.md index fc9712a0a..3dd82dbae 100644 --- a/registry/sharkymark/README.md +++ b/registry/sharkymark/README.md @@ -26,9 +26,7 @@ Visit my [website](https://markmilligan.io) to learn more about my work and inte [Flight Radar](https://www.flightradar24.com/airport/aus) ### Webcams + [Austin - facing south](https://cctv.austinmobility.io/image/51.jpg) [Austin - facing north](https://cctv.austinmobility.io/image/52.jpg) - - - From a528f0aa18324d61b20d6631b521fc93bcedd460 Mon Sep 17 00:00:00 2001 From: Mark Milligan Date: Sat, 9 Aug 2025 09:26:18 -0700 Subject: [PATCH 7/8] fix: removed jetbrains reference --- registry/sharkymark/templates/docker-claude/main.tf | 1 - 1 file changed, 1 deletion(-) diff --git a/registry/sharkymark/templates/docker-claude/main.tf b/registry/sharkymark/templates/docker-claude/main.tf index 307a62b65..ba5ee4875 100644 --- a/registry/sharkymark/templates/docker-claude/main.tf +++ b/registry/sharkymark/templates/docker-claude/main.tf @@ -138,7 +138,6 @@ data "coder_workspace_preset" "default" { EOT "preview_port" = "4200" "container_image" = "codercom/example-universal:ubuntu" - "jetbrains_ide" = "PY" } } From f2424c613d70d186f6574b4cd9e0425cf71707ab Mon Sep 17 00:00:00 2001 From: Mark Milligan Date: Sat, 9 Aug 2025 09:31:16 -0700 Subject: [PATCH 8/8] fix: updated README.md with Coder example image --- registry/sharkymark/templates/docker-claude/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/registry/sharkymark/templates/docker-claude/README.md b/registry/sharkymark/templates/docker-claude/README.md index 733391407..d68293624 100644 --- a/registry/sharkymark/templates/docker-claude/README.md +++ b/registry/sharkymark/templates/docker-claude/README.md @@ -10,10 +10,9 @@ tags: ["ai", "docker", "container", "claude", "agent", "tasks"] ### Docker image -1. Based on latest python slim image e.g., `python:3.13-slim` +1. Based on Coder-managed image `codercom/example-universal:ubuntu` -[Image on DockerHub](https://hub.docker.com/repository/docker/marktmilligan/python/general) -[Dockerfile](https://github.com/sharkymark/dockerfiles/blob/main/python/Dockerfile) +[Image on DockerHub](https://hub.docker.com/r/codercom/example-universal) ### Apps included