Ultrathink
Streamline complex cognitive workflows and productivity tasks through Ultrathink automation
Ultrathink is an AI skill that enhances AI reasoning capabilities by applying structured thinking frameworks, multi-step analysis, and systematic problem decomposition to complex technical challenges. It covers chain of thought structuring, assumption identification, alternative solution evaluation, trade-off analysis, and decision documentation that produce more thorough and reliable AI assisted problem solving.
What Is This?
Overview
Ultrathink provides frameworks for applying rigorous analytical thinking to complex problems through AI assistance. It handles decomposing ambiguous problems into well defined subproblems, identifying hidden assumptions that constrain the solution space, generating multiple alternative approaches before committing to one, evaluating trade-offs using structured criteria, documenting decision rationale, and validating conclusions by checking for logical consistency.
Who Should Use This
This skill serves architects making technology decisions with long term consequences, developers debugging complex issues that resist straightforward analysis, product managers evaluating feature approaches with multiple trade-offs, and technical leads documenting decision rationale for team alignment.
Why Use It?
Problems It Solves
Complex problems receive shallow analysis when teams jump to the first viable solution without exploring alternatives. Hidden assumptions go unchallenged because they feel obvious to domain experts. Decision rationale is lost when only the final choice is recorded. Cognitive biases like anchoring and confirmation bias affect technical decisions.
Core Highlights
Structured decomposition breaks overwhelming problems into manageable analysis units. Assumption surfacing reveals constraints that may not be fixed. Multi-option evaluation prevents premature commitment to the first workable solution. Trade-off matrices make decision criteria explicit and comparable.
How to Use It?
Basic Usage
from dataclasses import dataclass, field
@dataclass
class Assumption:
statement: str
confidence: str # high, medium, low
impact_if_wrong: str
validation_method: str
@dataclass
class Alternative:
name: str
description: str
pros: list = field(default_factory=list)
cons: list = field(default_factory=list)
scores: dict = field(default_factory=dict)
class ProblemAnalyzer:
def __init__(self, problem_statement):
self.problem = problem_statement
self.assumptions = []
self.alternatives = []
self.criteria = []
def add_assumption(self, statement, confidence,
impact, validation):
self.assumptions.append(Assumption(
statement, confidence, impact, validation
))
def add_alternative(self, name, description):
alt = Alternative(name, description)
self.alternatives.append(alt)
return alt
def evaluate(self, criteria_weights):
results = []
for alt in self.alternatives:
total = sum(
alt.scores.get(c, 0) * w
for c, w in criteria_weights.items()
)
results.append((alt.name, round(total, 2)))
return sorted(results, key=lambda r: r[1],
reverse=True)Real-World Examples
class DecisionDocument {
constructor(title, context) {
this.title = title;
this.context = context;
this.options = [];
this.criteria = [];
this.decision = null;
}
addOption(name, description, pros, cons) {
this.options.push({ name, description, pros, cons });
}
setCriteria(criteriaList) {
this.criteria = criteriaList.map((c) => ({
name: c.name,
weight: c.weight,
description: c.description,
}));
}
scoreOptions(scores) {
for (const option of this.options) {
const optionScores = scores[option.name] || {};
option.totalScore = this.criteria.reduce(
(sum, criterion) => {
const score = optionScores[criterion.name] || 0;
return sum + score * criterion.weight;
}, 0
);
}
this.options.sort(
(a, b) => b.totalScore - a.totalScore
);
}
recordDecision(chosenOption, rationale) {
this.decision = {
chosen: chosenOption,
rationale,
date: new Date().toISOString(),
alternatives: this.options
.filter((o) => o.name !== chosenOption)
.map((o) => o.name),
};
}
export() {
return {
title: this.title,
context: this.context,
options: this.options,
decision: this.decision,
};
}
}Advanced Tips
Start every analysis by listing assumptions explicitly, then challenge each one by asking what would change if the assumption were false. Assign numerical scores to qualitative criteria using a consistent scale to enable direct comparison across alternatives. Revisit documented decisions after implementation to calibrate future analysis accuracy.
When to Use It?
Use Cases
Use Ultrathink when evaluating architectural decisions with significant long term impact, when debugging complex issues where the root cause is not obvious, when comparing technology choices that involve multiple competing trade-offs, or when documenting decisions for future team members who need to understand the rationale.
Related Topics
Architecture decision records, SWOT analysis for technical evaluations, root cause analysis techniques, decision matrices, and cognitive bias awareness in engineering complement structured thinking.
Important Notes
Requirements
A clearly articulated problem statement to anchor the analysis. Willingness to explore multiple alternatives before committing to a solution. Time allocated for structured analysis rather than jumping directly to implementation.
Usage Recommendations
Do: document assumptions alongside decisions so future reviewers can assess whether the original reasoning still holds. Include at least three alternatives in major technical decisions to ensure sufficient exploration. Weight evaluation criteria based on project priorities rather than using equal weights by default.
Don't: apply heavyweight analysis to routine decisions that do not warrant the overhead. Treat quantitative scores as precise measurements, since they represent relative preferences rather than absolute values. Skip the assumption identification step, because unchallenged assumptions are the most common source of decision failures.
Limitations
Structured analysis improves decision quality but cannot guarantee correct outcomes in uncertain environments. Analysis quality depends on accuracy and completeness of available information. Over-analysis can delay decisions when execution speed matters more than optimality.
More Skills You Might Like
Explore similar skills to enhance your workflow
Slime
Automate and integrate Slime workflows for flexible and dynamic data management tasks
Interview System Designer
Interview System Designer automation and integration
Benchmark Email Automation
Automate Benchmark Email tasks via Rube MCP (Composio)
Byteforms Automation
Automate Byteforms operations through Composio's Byteforms toolkit via
Certifier Automation
Automate Certifier operations through Composio's Certifier toolkit via
Deadline Funnel Automation
Automate Deadline Funnel tasks via Rube MCP (Composio)