Skip to content

Instantly share code, notes, and snippets.

View jbasdf's full-sized avatar

Justin Ball jbasdf

View GitHub Profile
@jbasdf
jbasdf / SKILL.md
Created March 12, 2026 02:19
setup-cmux skill - Configure cmux terminal multiplexer workspaces for Claude Code projects
name description
setup-cmux
Configure cmux terminal multiplexer workspaces for a project by generating .vscode/terminals.json with AI Workflow tabs, App workspace, and development terminals. Use when the user says "setup cmux", "configure cmux", "add cmux workspaces", "setup terminals", "setup ai workflow", "add workflow tabs", "configure make cmux", or wants to set up their terminal workspace layout for development with Claude agents, or when starting a new project that needs terminal multiplexer configuration. Also use when the user wants to add or modify cmux workspaces, tabs, or browser panes.

Setup cmux

Configure cmux terminal multiplexer workspaces for any project by generating or updating .vscode/terminals.json. This creates a complete development environment with AI workflow tabs, application servers, and development terminals — all launchable via make cmux.

Announce at start: "I'm using the setup-cmux skill to configure your cmux terminal workspace."

@jbasdf
jbasdf / gist:1c379a3ab38c9a37e25e2a40cdad03c2
Created July 7, 2025 20:59
Wrapper for Cloudflare OAuthProvider with custom handler for /.well-known/oauth-authorization-server
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext) {
// OAuthProvider provides a generic .well-known/oauth-authorization-server
// We capture the request here so that we can include the providerId in the response
// This overrides some of the funcitionality provided by the OAuthProvider
// If any endpoints are changed please ensure to review the code in handleWellKnown.
if (request.url.includes('/.well-known/oauth-authorization-server/mcp')) {
return handleWellKnown(request);
}
{"keys":[{"kty":"RSA","e":"AQAB","n":"1YVj2KgGA0MKzQddETHX8XaUWK6qlERjqnaDZeUbPnGov3jjpUFTRft9z4w2KA7WpXEpEI0QGOf5j9ZSG0vFpGecXUJZyktoD9gWT3XzRpfWI0FjL0xbZHcVt8Fs683zNVrGkVX23lH5QO53iQdqQbN9swrH0mWljx6W7M6ITdy8fWd04s7UXIAPvtVn6KO-bmjx1nCnTeTZiNNkYSMtx2oGgCoFnFbXghNT-n0VPCK6XvOpnHDCl17-BmF8AT9rJsTGy_S402FxePr-pzdRYSwyvRDTL8RJ5HBannvFUC4Qn5rUD6E9bxdNSiSexKd60Nne_54zMu08We9kIGjRdQ","kid":"tT0OmDOGuMRotgMyawCtHYtKIjkFnBet8KBoIb9lDiE","use":"sig","alg":"RS256"}]}
@jbasdf
jbasdf / gist:e87baacd8e59007e8d2798cfed0368d2
Created November 18, 2021 20:37
Atomic Polls LTI Advantage JSON
{
"title": "Atomic Polls",
"scopes": [
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem",
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/score",
"https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly",
"https://canvas.instructure.com/lti/public_jwk/scope/update"
],
@jbasdf
jbasdf / gist:74189ef34450631658a5ff5ba68603d2
Created November 18, 2021 20:33
Atomic Journals LTI Advantage JSON
{
"title": "Atomic Journals",
"scopes": [
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem",
"https://purl.imsglobal.org/spec/lti-ags/scope/result.readonly",
"https://purl.imsglobal.org/spec/lti-ags/scope/score",
"https://purl.imsglobal.org/spec/lti-ags/scope/lineitem.readonly",
"https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly"
],
"extensions": [
@jbasdf
jbasdf / canvas_lti_variables
Created November 11, 2017 00:49
All Canvas LTI Variables for substitution
context_title: "$Context.title",
com_instructure_post_message_token: "$com.instructure.PostMessageToken",
com_instructure_assignment_lti_id: "$com.instructure.Assignment.lti.id",
com_instructure_originality_report_id: "$com.instructure.OriginalityReport.id",
com_instructure_submission_id: "$com.instructure.Submission.id",
com_instructure_file_id: "$com.instructure.File.id",
course_offering_sourced_id: "$CourseOffering.sourcedId",
context_id: "$Context.id",
context_sourced_id: "$Context.sourcedId",
message_document_target: "$Message.documentTarget",
@jbasdf
jbasdf / ec2nuke.sh
Last active December 10, 2018 05:13
AWS EC2 Nuke
# !!!!!!!!!!!!!!!!! WARNING - Use this script at your own risk. !!!!!!!!!!!!!!!!!!!!!!!
# In the event that you need to clean out your AWS account you can use the following script to wipe out all EC2 instances and their
# related data.
# This script terminates all running EC2 instances in your account, removes the images, removes all EBS volumes and removes snapshots.
# You will need to run this with a user that has appropriate rights.
for region in us-east-2 us-east-1 us-west-1 us-west-2 ca-central-1 eu-central-1 eu-west-1 eu-west-2 ap-northeast-1 ap-southeast-1 ap-southeast-2 ap-south-1 ap-northeast-2 sa-east-1; do
echo $region
@jbasdf
jbasdf / dynamodb.json
Created August 23, 2016 22:37
dynamodb.json - cloud formation partial for creating dynamodb tables
{
"Applications" : {
"Type" : "AWS::DynamoDB::Table",
"Properties" : {
"TableName" : "Applications-${stage}",
"AttributeDefinitions": [ {
"AttributeName" : "name",
"AttributeType" : "S"
} ],
"KeySchema": [
@jbasdf
jbasdf / serverless.yml
Last active August 23, 2016 22:38
serverless.yml that includes JSON-REF for creating dynamo db tables
service: lti
provider:
name: aws
runtime: nodejs4.3
iamRoleStatements:
- Effect: "Allow"
Action:
- "dynamodb:Scan"
- "dynamodb:Query"
- "dynamodb:DescribeStream"
@jbasdf
jbasdf / stub_context.js
Created June 4, 2015 00:23
Stub context for React Router and Material UI >= 0.8.0
"use strict";
import React from "react";
import assign from "object-assign";
var { func } = React.PropTypes;
var mui = require('material-ui');
var ThemeManager = new mui.Styles.ThemeManager();