원클릭으로
task-creation
Create a new task in the opencouncil-tasks codebase. Use when implementing new features or task handlers.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Create a new task in the opencouncil-tasks codebase. Use when implementing new features or task handlers.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Tag a CalVer release on main, create a GitHub release, and generate a Discord announcement.
Compare two traced summarize runs from Langfuse and produce a qualitative evaluation of how subjects, descriptions, and speaker contributions changed.
Deploy a release to staging or production, or show current deployment status.
Read application logs from the production or staging server via SSH.
Write documentation for tasks in the opencouncil-tasks codebase. Use after completing a new task implementation.
| name | task-creation |
| description | Create a new task in the opencouncil-tasks codebase. Use when implementing new features or task handlers. |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep |
You are creating a new task in the opencouncil-tasks codebase. Follow these instructions precisely.
Each task in this codebase is a function of type Task<Args, Ret>:
type Task<Args, Ret> = (args: Args, onProgress: (stage: string, progressPercent: number) => void) => Promise<Ret>;
src/types.tsAdd request and result types for your task:
/*
* Task: YourTaskName
*/
export interface YourTaskRequest extends TaskRequest {
// Input parameters
someInput: string;
optionalInput?: number;
}
export interface YourTaskResult {
// Output data
someOutput: string;
metadata?: {
// Optional metadata about the operation
};
}
Rules:
TaskRequest (which includes callbackUrl: string)metadata in results for debugging/logging infosrc/tasks/Create src/tasks/yourTaskName.ts:
import { YourTaskRequest, YourTaskResult } from "../types.js";
import { Task } from "./pipeline.js";
export const yourTaskName: Task<YourTaskRequest, YourTaskResult> = async (request, onProgress) => {
console.log("Starting yourTaskName:", {
// Log relevant request info (not sensitive data)
});
onProgress("initializing", 10);
// Implementation here...
onProgress("processing", 50);
// More implementation...
onProgress("complete", 100);
return {
// Result object matching YourTaskResult
};
};
Rules:
.js extensions in imports (ESM requirement)Task type from ./pipeline.jsonProgress at meaningful stagessrc/server.ts)Add your task to the task registry:
import { yourTaskName } from "./tasks/yourTaskName.js";
// In the taskRegistry object:
const taskRegistry: TaskRegistry = {
// ... existing tasks
yourTaskName: yourTaskName as Task<any, any>,
};
src/cli.ts)If the task should be callable from CLI, add a command:
program
.command("your-task-name")
.description("Description of what the task does")
.requiredOption("--input <file>", "Path to input JSON file")
.option("--optional-param <value>", "Optional parameter description")
.action(async (options) => {
// Parse input, call task, output results
});
Create src/tasks/yourTaskName.test.ts for pure functions:
DO test:
DO NOT test:
After implementation is complete, use /task-docs to create documentation in docs/yourTaskName.md.
If your task calls external APIs:
src/lib/// src/lib/ServiceClient.ts
export interface ServiceResponse {
// Response types
}
class ServiceClient {
private baseUrl: string;
private apiKey: string;
constructor() {
this.baseUrl = process.env.SERVICE_API_URL || "https://api.service.com";
this.apiKey = process.env.SERVICE_API_KEY || "";
}
async fetchData(params: object): Promise<ServiceResponse> {
// Implementation
}
}
export const serviceClient = new ServiceClient();
Rules:
src/types.tssrc/tasks/yourTaskName.tssrc/server.tsnpm run typecheck passesnpm test passes/task-docs)