Implement GitOps workflows with ArgoCD and Flux for automated, declarative Kubernetes...
npx skills add millord237/10X-Notion-Skills --skill "10x-delegate"
Install specific skill from multi-skill repository
# Description
Delegate tasks and assignments with RACI matrix support. Use for assigning tasks with Responsible, Accountable, Consulted, or Informed roles. Supports task delegation, escalation, and approval workflows. Requires Team Lead or higher for delegation.
# SKILL.md
name: 10x-delegate
description: Delegate tasks and assignments with RACI matrix support. Use for assigning tasks with Responsible, Accountable, Consulted, or Informed roles. Supports task delegation, escalation, and approval workflows. Requires Team Lead or higher for delegation.
allowed-tools: Read, Write, Bash
user-invocable: true
argument-hint: "[task-description] --to [user] --raci [R|A|C|I]"
10X Notion Team Skills - Delegation & RACI Matrix
Delegate tasks and manage responsibilities using the RACI framework.
RACI Framework
| Role | Symbol | Description | Can Complete Task | Notified |
|---|---|---|---|---|
| Responsible | R | Does the work | Yes | Yes |
| Accountable | A | Final approver (only ONE per task) | Approves only | Yes |
| Consulted | C | Provides input before work | No | Yes |
| Informed | I | Kept updated on progress | No | Yes |
Quick Commands
/10x-delegate "Design API endpoints" --to "John Doe" --raci R
/10x-delegate "Review API design" --to "Jane Smith" --raci A
/10x-delegate "Provide security input" --to "Security Team" --raci C
/10x-delegate "API progress update" --to "Product Team" --raci I
Delegation Commands
Basic Delegation
/10x-delegate "Complete user authentication" --to "John Doe" --raci R --due "2025-02-15"
Implementation:
// Parse arguments
const taskDescription = $ARGUMENTS.match(/"([^"]+)"/)?.[1];
const toUser = $ARGUMENTS.match(/--to\s+"([^"]+)"/)?.[1];
const raciType = $ARGUMENTS.match(/--raci\s+(\w)/)?.[1];
const dueDate = $ARGUMENTS.match(/--due\s+"([^"]+)"/)?.[1];
const priority = $ARGUMENTS.match(/--priority\s+(\w+)/)?.[1] || "Medium";
// Validate RACI type
const raciMap = {
"R": "R - Responsible",
"A": "A - Accountable",
"C": "C - Consulted",
"I": "I - Informed"
};
if (!raciMap[raciType.toUpperCase()]) {
return "Invalid RACI type. Use R, A, C, or I";
}
// Get current user (delegator)
const currentUser = await getCurrentUser();
// Check delegation permission
if (!await checkPermission("delegate", currentUser.id)) {
return "Permission denied: You don't have delegation rights";
}
// Get target user
const targetUser = await notion.databases.query({
database_id: usersDbId,
filter: { property: "Name", title: { equals: toUser }}
});
if (!targetUser.results.length) {
return `User "${toUser}" not found`;
}
// Check if task exists or create new one
let task;
const existingTask = await notion.databases.query({
database_id: tasksDbId,
filter: { property: "Task Name", title: { equals: taskDescription }}
});
if (existingTask.results.length) {
task = existingTask.results[0];
} else {
// Create new task
task = await notion.pages.create({
parent: { database_id: tasksDbId },
properties: {
"Task Name": { title: [{ text: { content: taskDescription }}] },
"Status": { select: { name: "To Do" }},
"Priority": { select: { name: priority }},
"Date": dueDate ? { date: { start: dueDate }} : undefined,
"Assigned To": { relation: [{ id: targetUser.results[0].id }] },
"Delegated By": { relation: [{ id: currentUser.id }] },
"RACI Role": { select: { name: raciMap[raciType.toUpperCase()] }},
"Delegation Date": { date: { start: new Date().toISOString().split('T')[0] }},
"Team": currentUser.properties["Primary Team"]?.relation?.[0] ?
{ relation: [{ id: currentUser.properties["Primary Team"].relation[0].id }] } : undefined
}
});
}
// Create RACI assignment
const raciAssignment = await notion.pages.create({
parent: { database_id: raciAssignmentsDbId },
properties: {
"Name": { title: [{ text: { content: `${taskDescription} - ${toUser}` }}] },
"RACI Type": { select: { name: raciMap[raciType.toUpperCase()] }},
"Status": { select: { name: "Active" }},
"Assignment Date": { date: { start: new Date().toISOString().split('T')[0] }},
"Due Date": dueDate ? { date: { start: dueDate }} : undefined,
"Priority": { select: { name: priority }},
"User": { relation: [{ id: targetUser.results[0].id }] },
"Task": { relation: [{ id: task.id }] },
"Assigned By": { relation: [{ id: currentUser.id }] }
}
});
// Log audit event
await logAuditEvent("Delegate", "Task", task.id, taskDescription, null, {
assignedTo: toUser,
raciType: raciMap[raciType.toUpperCase()],
dueDate
});
return `
β
Task Delegated Successfully!
Task: ${taskDescription}
Assigned To: ${toUser}
RACI Role: ${raciMap[raciType.toUpperCase()]}
Due Date: ${dueDate || "Not set"}
Priority: ${priority}
${toUser} will be notified of this assignment.
`;
Multi-RACI Assignment
Assign multiple RACI roles for a single task:
/10x-delegate "Launch new product" --multi
--responsible "Product Team"
--accountable "VP Product"
--consulted "Legal Team, Marketing"
--informed "CEO, Board"
Implementation:
// Parse multi-assignment
const taskDescription = $ARGUMENTS.match(/"([^"]+)"/)?.[1];
const responsible = $ARGUMENTS.match(/--responsible\s+"([^"]+)"/)?.[1];
const accountable = $ARGUMENTS.match(/--accountable\s+"([^"]+)"/)?.[1];
const consulted = $ARGUMENTS.match(/--consulted\s+"([^"]+)"/)?.[1]?.split(",").map(s => s.trim());
const informed = $ARGUMENTS.match(/--informed\s+"([^"]+)"/)?.[1]?.split(",").map(s => s.trim());
// Validate: only ONE accountable
if (!accountable) {
return "Error: Every task must have exactly ONE Accountable person";
}
// Create task
const task = await notion.pages.create({
parent: { database_id: tasksDbId },
properties: {
"Task Name": { title: [{ text: { content: taskDescription }}] },
"Status": { select: { name: "To Do" }},
"Requires Approval": { checkbox: true }
}
});
const assignments = [];
// Assign Responsible
if (responsible) {
const users = responsible.split(",").map(s => s.trim());
for (const userName of users) {
const user = await findUser(userName);
if (user) {
await createRaciAssignment(task.id, user.id, "R - Responsible", taskDescription);
assignments.push({ user: userName, role: "R" });
}
}
}
// Assign Accountable (only one)
const accUser = await findUser(accountable);
if (accUser) {
await createRaciAssignment(task.id, accUser.id, "A - Accountable", taskDescription);
assignments.push({ user: accountable, role: "A" });
// Set as approver on task
await notion.pages.update({
page_id: task.id,
properties: {
"Approved By": { relation: [{ id: accUser.id }] }
}
});
}
// Assign Consulted
if (consulted) {
for (const userName of consulted) {
const user = await findUser(userName);
if (user) {
await createRaciAssignment(task.id, user.id, "C - Consulted", taskDescription);
assignments.push({ user: userName, role: "C" });
}
}
}
// Assign Informed
if (informed) {
for (const userName of informed) {
const user = await findUser(userName);
if (user) {
await createRaciAssignment(task.id, user.id, "I - Informed", taskDescription);
assignments.push({ user: userName, role: "I" });
}
}
}
return `
β
RACI Matrix Created for: ${taskDescription}
${assignments.map(a => `[${a.role}] ${a.user}`).join('\n')}
Total assignments: ${assignments.length}
`;
Escalation
Escalate a blocked or delayed task:
/10x-delegate escalate "API Design" --reason "Blocked by dependencies" --to "Manager"
Implementation:
const taskName = $ARGUMENTS.match(/escalate\s+"([^"]+)"/)?.[1];
const reason = $ARGUMENTS.match(/--reason\s+"([^"]+)"/)?.[1];
const escalateTo = $ARGUMENTS.match(/--to\s+"([^"]+)"/)?.[1];
// Find task
const task = await notion.databases.query({
database_id: tasksDbId,
filter: { property: "Task Name", title: { equals: taskName }}
});
if (!task.results.length) {
return `Task "${taskName}" not found`;
}
// Get escalation target
const manager = await findUser(escalateTo);
if (!manager) {
return `User "${escalateTo}" not found`;
}
// Update task status
await notion.pages.update({
page_id: task.results[0].id,
properties: {
"Status": { select: { name: "Blocked" }},
"Delegation Notes": { rich_text: [{ text: { content: `ESCALATED: ${reason}` }}] }
}
});
// Create escalation RACI assignment
await notion.pages.create({
parent: { database_id: raciAssignmentsDbId },
properties: {
"Name": { title: [{ text: { content: `ESCALATION: ${taskName}` }}] },
"RACI Type": { select: { name: "A - Accountable" }},
"Status": { select: { name: "Active" }},
"Priority": { select: { name: "Critical" }},
"User": { relation: [{ id: manager.id }] },
"Task": { relation: [{ id: task.results[0].id }] },
"Notes": { rich_text: [{ text: { content: reason }}] }
}
});
// Log audit event
await logAuditEvent("Escalate", "Task", task.results[0].id, taskName, null, {
escalatedTo: escalateTo,
reason
});
return `
β οΈ Task Escalated!
Task: ${taskName}
Escalated To: ${escalateTo}
Reason: ${reason}
${escalateTo} has been notified and assigned as Accountable.
`;
RACI Matrix View
View RACI for a Project/Goal
/10x-delegate raci-matrix --project "Q1 Product Launch"
Output:
ββββββββββββββββββββββββββββ¬ββββββββββββ¬ββββββββββββ¬ββββββββββββ¬ββββββββββββ
β Task/Deliverable β Product β Eng Lead β Marketing β CEO β
ββββββββββββββββββββββββββββΌββββββββββββΌββββββββββββΌββββββββββββΌββββββββββββ€
β Requirements Doc β R β C β C β I β
β Technical Design β C β R β I β I β
β Development β A β R β I β I β
β QA Testing β C β R β I β I β
β Marketing Materials β C β I β R β A β
β Launch Announcement β A β I β R β I β
β Post-Launch Review β R β R β R β A β
ββββββββββββββββββββββββββββ΄ββββββββββββ΄ββββββββββββ΄ββββββββββββ΄ββββββββββββ
Legend: R=Responsible, A=Accountable, C=Consulted, I=Informed
View My RACI Assignments
/10x-delegate my-assignments
Implementation:
const currentUser = await getCurrentUser();
const assignments = await notion.databases.query({
database_id: raciAssignmentsDbId,
filter: {
and: [
{ property: "User", relation: { contains: currentUser.id }},
{ property: "Status", select: { equals: "Active" }}
]
},
sorts: [
{ property: "Priority", direction: "ascending" },
{ property: "Due Date", direction: "ascending" }
]
});
// Group by RACI type
const grouped = {
"R - Responsible": [],
"A - Accountable": [],
"C - Consulted": [],
"I - Informed": []
};
for (const assignment of assignments.results) {
const raciType = assignment.properties["RACI Type"].select.name;
grouped[raciType].push({
name: assignment.properties.Name.title[0].plain_text,
dueDate: assignment.properties["Due Date"]?.date?.start,
priority: assignment.properties.Priority.select?.name
});
}
return `
π Your RACI Assignments
π΄ RESPONSIBLE (You do the work):
${grouped["R - Responsible"].map(a => ` β’ ${a.name} ${a.dueDate ? `(Due: ${a.dueDate})` : ""}`).join('\n') || " None"}
π ACCOUNTABLE (You approve):
${grouped["A - Accountable"].map(a => ` β’ ${a.name} ${a.dueDate ? `(Due: ${a.dueDate})` : ""}`).join('\n') || " None"}
π‘ CONSULTED (Provide input):
${grouped["C - Consulted"].map(a => ` β’ ${a.name}`).join('\n') || " None"}
π’ INFORMED (Stay updated):
${grouped["I - Informed"].map(a => ` β’ ${a.name}`).join('\n') || " None"}
Total: ${assignments.results.length} active assignments
`;
Approval Workflow
Request Approval
When a Responsible user completes work:
/10x-delegate complete "API Design" --request-approval
Implementation:
const taskName = $ARGUMENTS.match(/complete\s+"([^"]+)"/)?.[1];
const currentUser = await getCurrentUser();
// Find task
const task = await notion.databases.query({
database_id: tasksDbId,
filter: { property: "Task Name", title: { equals: taskName }}
});
// Find the Accountable person
const raciAccountable = await notion.databases.query({
database_id: raciAssignmentsDbId,
filter: {
and: [
{ property: "Task", relation: { contains: task.results[0].id }},
{ property: "RACI Type", select: { equals: "A - Accountable" }}
]
}
});
if (!raciAccountable.results.length) {
// No accountable - auto-complete
await notion.pages.update({
page_id: task.results[0].id,
properties: {
"Status": { select: { name: "Done" }}
}
});
return "Task marked as complete (no approval required)";
}
// Update task to pending approval
await notion.pages.update({
page_id: task.results[0].id,
properties: {
"Status": { select: { name: "In Progress" }},
"Requires Approval": { checkbox: true }
}
});
// Update RACI assignment
await notion.pages.update({
page_id: raciAccountable.results[0].id,
properties: {
"Notes": { rich_text: [{ text: { content: `Pending approval from ${currentUser.properties.Name.title[0].plain_text}` }}] }
}
});
const accountableUser = raciAccountable.results[0].properties.User.relation[0];
const userName = await notion.pages.retrieve({ page_id: accountableUser.id });
return `
π Approval Requested
Task: ${taskName}
Submitted by: You
Approval pending from: ${userName.properties.Name.title[0].plain_text}
The Accountable person will review and approve.
`;
Approve/Reject
When an Accountable user reviews:
/10x-delegate approve "API Design"
/10x-delegate reject "API Design" --reason "Needs more detail"
Permission Rules for Delegation
| Action | Super Admin | Admin | Dept Head | Team Lead | Sr Member | Member |
|---|---|---|---|---|---|---|
| Delegate to anyone in org | β | β | β | β | β | β |
| Delegate within department | β | β | β | β | β | β |
| Delegate within team | β | β | β | β | β | β |
| Set Accountable | β | β | β | β | β | β |
| Escalate tasks | β | β | β | β | β | β |
| Approve tasks | β | β | β | β | β | β |
Helper Functions
async function findUser(nameOrId) {
// Try by name first
let user = await notion.databases.query({
database_id: usersDbId,
filter: { property: "Name", title: { equals: nameOrId }}
});
if (user.results.length) return user.results[0];
// Try by Skill ID
user = await notion.databases.query({
database_id: usersDbId,
filter: { property: "Skill ID", rich_text: { equals: nameOrId }}
});
return user.results[0] || null;
}
async function createRaciAssignment(taskId, userId, raciType, taskDescription) {
const user = await notion.pages.retrieve({ page_id: userId });
const userName = user.properties.Name.title[0].plain_text;
return notion.pages.create({
parent: { database_id: raciAssignmentsDbId },
properties: {
"Name": { title: [{ text: { content: `${taskDescription} - ${userName}` }}] },
"RACI Type": { select: { name: raciType }},
"Status": { select: { name: "Active" }},
"Assignment Date": { date: { start: new Date().toISOString().split('T')[0] }},
"User": { relation: [{ id: userId }] },
"Task": { relation: [{ id: taskId }] },
"Assigned By": { relation: [{ id: (await getCurrentUser()).id }] }
}
});
}
async function checkDelegationScope(currentUser, targetUser) {
const currentRole = await getUserRole(currentUser);
const scope = currentRole.properties.Scope.select.name;
switch (scope) {
case "Organization":
return true; // Can delegate to anyone
case "Department":
return currentUser.properties.Department?.relation?.[0]?.id ===
targetUser.properties.Department?.relation?.[0]?.id;
case "Team":
return currentUser.properties["Primary Team"]?.relation?.[0]?.id ===
targetUser.properties["Primary Team"]?.relation?.[0]?.id;
case "Self":
return false; // Cannot delegate
default:
return false;
}
}
Troubleshooting
"Cannot delegate to this user"
β Your role scope doesn't allow delegation to users outside your team/department
β Contact an Admin to make cross-team assignments
"Task already has an Accountable person"
β Each task can only have ONE Accountable person
β Remove existing Accountable assignment first
"Permission denied for approval"
β Only Accountable users can approve tasks
β Check your RACI assignment
Version
Skill Version: 2.0.0
Required Role: Team Lead (for delegation), varies for other actions
Compatible with: Notion MCP Server 1.0+
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.