Skip to content

Commit 21f7edc

Browse files
committed
Prepare Claude and Codex skill imports
1 parent 95f0adf commit 21f7edc

13 files changed

Lines changed: 107 additions & 24 deletions

File tree

.agents/plugins/marketplace.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"name": "biosymphony-genecluster",
3+
"interface": {
4+
"displayName": "BioSymphony GeneCluster"
5+
},
6+
"plugins": [
7+
{
8+
"name": "biosymphony-genecluster",
9+
"source": {
10+
"source": "local",
11+
"path": "."
12+
},
13+
"policy": {
14+
"installation": "AVAILABLE",
15+
"authentication": "ON_USE"
16+
},
17+
"category": "Research"
18+
}
19+
]
20+
}

.claude-plugin/marketplace.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"name": "biosymphony-genecluster",
3+
"owner": {
4+
"name": "BioSymphony"
5+
},
6+
"metadata": {
7+
"version": "0.1.0",
8+
"description": "Public-safe GeneCluster skills for biosynthetic gene-cluster campaigns."
9+
},
10+
"plugins": [
11+
{
12+
"name": "biosymphony-genecluster",
13+
"displayName": "BioSymphony GeneCluster",
14+
"source": "./",
15+
"description": "Plan public-safe biosynthetic gene-cluster campaigns.",
16+
"category": "life-sciences",
17+
"tags": ["gene-clusters", "biosynthesis", "genomics"],
18+
"strict": false,
19+
"skills": ["./skills/biosymphony", "./skills/genecluster-superpowers"]
20+
}
21+
]
22+
}

.claude-plugin/plugin.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"$schema": "https://anthropic.com/claude-code/plugin.schema.json",
3+
"name": "biosymphony-genecluster",
4+
"version": "0.1.0",
5+
"description": "BioSymphony GeneCluster skills for public-safe biosynthetic gene-cluster campaign planning and tooling.",
6+
"author": {
7+
"name": "BioSymphony",
8+
"url": "https://github.com/BioSymphony"
9+
},
10+
"skills": ["./skills/biosymphony", "./skills/genecluster-superpowers"]
11+
}

.codex-plugin/plugin.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "biosymphony-genecluster",
3+
"version": "0.1.0",
4+
"description": "BioSymphony GeneCluster skills for public-safe biosynthetic gene-cluster campaign planning and tooling.",
5+
"author": {
6+
"name": "BioSymphony",
7+
"url": "https://github.com/BioSymphony"
8+
},
9+
"homepage": "https://github.com/BioSymphony/genecluster",
10+
"repository": "https://github.com/BioSymphony/genecluster",
11+
"license": "MIT",
12+
"keywords": ["gene-clusters", "biosynthesis", "comparative-genomics"],
13+
"skills": "./skills/",
14+
"interface": {
15+
"displayName": "BioSymphony GeneCluster",
16+
"shortDescription": "Gene-cluster campaign skills",
17+
"longDescription": "Public-safe GeneCluster skills for biosynthetic gene-cluster search, pathway support, comparative atlas planning, route scouting, and tooling extension.",
18+
"developerName": "BioSymphony",
19+
"category": "Research",
20+
"capabilities": ["Skills"],
21+
"defaultPrompt": ["Use $biosymphony to plan a public-safe GeneCluster campaign."]
22+
}
23+
}

.codex/skills/biosymphony/SKILL.md

Lines changed: 0 additions & 12 deletions
This file was deleted.

docs/cloud-runtimes/neocloud-bio-tools.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,10 @@ Base: `https://cloud.lambda.ai/api/v1/`, Basic auth with API key as username, bl
163163

164164
Launch:
165165
```bash
166-
curl -u "$LAMBDA_API_KEY:" -X POST \
166+
LAMBDA_AUTH_HEADER="$(printf '%s:' "$LAMBDA_API_KEY" | base64 | tr -d '\n')"
167+
curl -X POST \
167168
https://cloud.lambda.ai/api/v1/instance-operations/launch \
169+
-H "Authorization: Basic $LAMBDA_AUTH_HEADER" \
168170
-H "Content-Type: application/json" \
169171
-d '{
170172
"region_name": "us-west-1",
@@ -178,8 +180,10 @@ curl -u "$LAMBDA_API_KEY:" -X POST \
178180

179181
Terminate:
180182
```bash
181-
curl -u "$LAMBDA_API_KEY:" -X POST \
183+
LAMBDA_AUTH_HEADER="$(printf '%s:' "$LAMBDA_API_KEY" | base64 | tr -d '\n')"
184+
curl -X POST \
182185
https://cloud.lambda.ai/api/v1/instance-operations/terminate \
186+
-H "Authorization: Basic $LAMBDA_AUTH_HEADER" \
183187
-H "Content-Type: application/json" \
184188
-d '{ "instance_ids": ["<id>"] }'
185189
```
@@ -205,8 +209,10 @@ docker run --gpus all --rm \
205209
ghcr.io/<org>/genecluster-runner:latest \
206210
bash /work/boot.sh
207211
# Self-terminate
208-
curl -u "$LAMBDA_API_KEY:" -X POST \
212+
LAMBDA_AUTH_HEADER="$(printf '%s:' "$LAMBDA_API_KEY" | base64 | tr -d '\n')"
213+
curl -X POST \
209214
https://cloud.lambda.ai/api/v1/instance-operations/terminate \
215+
-H "Authorization: Basic $LAMBDA_AUTH_HEADER" \
210216
-d '{"instance_ids":["'$(curl -s http://169.254.169.254/latest/meta-data/instance-id)'"]}'
211217
```
212218

images/genecluster-superpowers/dispatch/README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,20 +74,22 @@ BIOSYMPHONY_DISPATCH_BUCKET=<your-dispatch-bucket> \
7474

7575
### Vast.ai (cheapest GPU)
7676

77+
Load `VASTAI_API_KEY` from your secure local secret store before running.
78+
7779
```
7880
RUN_ID=<run-id> \
7981
USE_INTERRUPTIBLE=1 VAST_GPU=RTX_4090 VAST_MAX_HOURLY_USD=0.35 \
8082
BIOSYMPHONY_STAGING_S3_PREFIX=s3://<your-dispatch-bucket> \
81-
VASTAI_API_KEY=<from-secure-store> \
8283
./vastai-dispatch.sh clean ghcr.io/<owner>/genecluster-superpowers:v0.1 \
8384
/path/to/clean-boot.sh /workspace
8485
```
8586

8687
### Lambda Labs (simple GPU)
8788

89+
Load `LAMBDA_API_KEY` from your secure local secret store before running.
90+
8891
```
8992
RUN_ID=<run-id> \
90-
LAMBDA_API_KEY=<from-secure-store> \
9193
LAMBDA_SSH_KEY_NAME=<lambda-ssh-key-name> \
9294
LAMBDA_SSH_PRIVATE_KEY_PATH=<lambda-ssh-private-key-path> \
9395
LAMBDA_INSTANCE_TYPE=gpu_1x_h100 \

images/genecluster-superpowers/dispatch/lambda-dispatch.sh

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,12 +207,13 @@ PY
207207
export LAMBDA_REGION LAMBDA_INSTANCE_TYPE LAMBDA_SSH_KEY_NAME TOOL_NAME RUN_ID
208208

209209
LAUNCH_RESP="$DISPATCH_OUT_DIR/${TOOL_NAME}-${RUN_ID}-launch-response.json"
210+
LAMBDA_AUTH_HEADER=$(printf '%s:' "$LAMBDA_API_KEY" | base64 | tr -d '\n')
210211

211212
set +e
212213
HTTP_CODE=$(curl -sS \
213214
-o "$LAUNCH_RESP" -w "%{http_code}" \
214215
-X POST "https://cloud.lambdalabs.com/api/v1/instance-operations/launch" \
215-
-u "${LAMBDA_API_KEY}:" \
216+
-H "Authorization: Basic $LAMBDA_AUTH_HEADER" \
216217
-H "Content-Type: application/json" \
217218
--data-binary @"$PAYLOAD_FILE")
218219
CURL_RC=$?
@@ -259,7 +260,7 @@ for i in $(seq 1 60); do
259260
set +e
260261
STATUS_RESP=$(curl -sS \
261262
-X GET "https://cloud.lambdalabs.com/api/v1/instances/${INSTANCE_ID}" \
262-
-u "${LAMBDA_API_KEY}:")
263+
-H "Authorization: Basic $LAMBDA_AUTH_HEADER")
263264
set -e
264265
INSTANCE_IP=$(python3 -c "
265266
import json,sys
@@ -334,7 +335,7 @@ print(json.dumps({
334335
"status_push_prefix": "$STATUS_PUSH_PREFIX",
335336
"ssh_command": "ssh -i <ssh-private-key> ubuntu@$INSTANCE_IP",
336337
"monitor_command": "ssh -i <ssh-private-key> ubuntu@$INSTANCE_IP cat ${MOUNT_PATH}/${TOOL_NAME}/${RUN_ID}/STATUS",
337-
"terminate_command": "operator-side: curl -sS -X POST -u '<lambda-api-key>:' -H 'Content-Type: application/json' -d '{\"instance_ids\":[\"$INSTANCE_ID\"]}' https://cloud.lambdalabs.com/api/v1/instance-operations/terminate",
338+
"terminate_command": "operator-side: set LAMBDA_AUTH_HEADER from LAMBDA_API_KEY, then curl -sS -X POST -H 'Authorization: Basic $LAMBDA_AUTH_HEADER' -H 'Content-Type: application/json' -d '{\"instance_ids\":[\"$INSTANCE_ID\"]}' https://cloud.lambdalabs.com/api/v1/instance-operations/terminate",
338339
}, indent=2))
339340
PY
340341

@@ -358,7 +359,8 @@ Tail logs:
358359
"tail -f ${MOUNT_PATH}/${TOOL_NAME}/${RUN_ID}/logs/boot.log"
359360
360361
Terminate (no preserve, Lambda has no stop/hibernate):
361-
curl -sS -X POST -u '${LAMBDA_API_KEY}:' \\
362+
curl -sS -X POST \\
363+
-H "Authorization: Basic $LAMBDA_AUTH_HEADER" \\
362364
-H 'Content-Type: application/json' \\
363365
-d '{"instance_ids":["$INSTANCE_ID"]}' \\
364366
https://cloud.lambdalabs.com/api/v1/instance-operations/terminate

images/genecluster-superpowers/dispatch/vastai-dispatch.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,14 @@ ONSTART
297297
# ----- vastai create instance -------------------------------------------------
298298

299299
CREATE_RESP="$DISPATCH_OUT_DIR/${TOOL_NAME}-${RUN_ID}-create-response.json"
300+
VASTAI_API_KEY_ENV="VASTAI_API_KEY"
300301

301302
# vastai create instance flags: --image, --disk, --label, --onstart, --env
302303
ENV_FLAGS=(
303304
-e BIOSYMPHONY_TOOL_NAME="$TOOL_NAME"
304305
-e BIOSYMPHONY_RUN_ID="$RUN_ID"
305306
-e BIOSYMPHONY_MOUNT_PATH="$MOUNT_PATH"
306-
-e VASTAI_API_KEY="${VASTAI_API_KEY:-}"
307+
-e "$VASTAI_API_KEY_ENV=${VASTAI_API_KEY:-}"
307308
)
308309

309310
set +e
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
interface:
2+
display_name: "BioSymphony GeneCluster"
3+
short_description: "Gene-cluster campaign planning"
4+
default_prompt: "Use $biosymphony to plan a public-safe GeneCluster campaign."

0 commit comments

Comments
 (0)