Use when creating a new project folder, starter pack, app scaffold, or agent-ready workspace — AGENTS.md, README, TASKS, DECISIONS, PROMPTS, an idempotent bootstrap script, and starter-pack modes.
日本語の概要は準備中です。原文の説明を表示しています。
Use when designing, reviewing, or implementing a sidebar for an Apple-platform app — top-level navigation only, grouped sections, NavigationSplitView, consistent SF Symbols, and safe compact-width behavior.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Design and review the sidebar as the map of the app: top-level navigation only, grouped into calm sections, paired with split navigation, and safe when it collapses on compact widths. Reach for this on macOS, iPadOS, SwiftUI NavigationSplitView, AppKit source lists, UIKit split views, and productivity apps with projects, files, agents, notes, skills, tasks, or dashboards.
Sidebar = top-level navigation
Toolbar = current-screen actions
Command palette = fast global commands
Inspector = selected-item details
A sidebar is the map of the app. It is not a dashboard and not a control panel.
Good sidebar items:
Avoid putting these in the sidebar:
Preferred SwiftUI structure:
NavigationSplitView {
SidebarView(selection: $selection)
} content: {
ContentListView(selection: $selection)
} detail: {
DetailView(selection: selection)
}
Use two columns for:
Sidebar → Detail
Use three columns for:
Sidebar → List → Detail
Examples:
Projects → Tasks → Task Detail
Folders → Notes → Note Editor
Agents → Runs → Run Detail
Rules:
Command
Home
Active Runs
Queue
Build
Projects
Skills
Prompts
Files
Memory
Notes
Decisions
Reports
System
Settings
macOS: 220–280 px
iPad: 240–320 px
Compact iPhone: collapse into NavigationStack or tab-based root
import SwiftUI
enum SidebarDestination: String, CaseIterable, Identifiable, Hashable {
case home
case activeRuns
case queue
case projects
case skills
case prompts
case files
case notes
case decisions
case reports
case settings
var id: String { rawValue }
var title: String {
switch self {
case .home: "Home"
case .activeRuns: "Active Runs"
case .queue: "Queue"
case .projects: "Projects"
case .skills: "Skills"
case .prompts: "Prompts"
case .files: "Files"
case .notes: "Notes"
case .decisions: "Decisions"
case .reports: "Reports"
case .settings: "Settings"
}
}
var symbol: String {
switch self {
case .home: "house"
case .activeRuns: "bolt.circle"
case .queue: "list.bullet.rectangle"
case .projects: "folder"
case .skills: "sparkles"
case .prompts: "text.badge.star"
case .files: "doc"
case .notes: "note.text"
case .decisions: "checkmark.seal"
case .reports: "chart.bar.doc.horizontal"
case .settings: "gearshape"
}
}
}
struct AppRootView: View {
@State private var selection: SidebarDestination? = .home
var body: some View {
NavigationSplitView {
SidebarView(selection: $selection)
.navigationTitle("App")
} detail: {
DetailRouter(selection: selection)
}
}
}
struct SidebarView: View {
@Binding var selection: SidebarDestination?
var body: some View {
List(selection: $selection) {
Section("Command") {
SidebarLink(.home)
SidebarLink(.activeRuns, badge: "2")
SidebarLink(.queue)
}
Section("Build") {
SidebarLink(.projects)
SidebarLink(.skills)
SidebarLink(.prompts)
SidebarLink(.files)
}
Section("Memory") {
SidebarLink(.notes)
SidebarLink(.decisions)
SidebarLink(.reports)
}
Section("System") {
SidebarLink(.settings)
}
}
.listStyle(.sidebar)
.frame(minWidth: 220, idealWidth: 240, maxWidth: 300)
}
@ViewBuilder
private func SidebarLink(_ destination: SidebarDestination, badge: String? = nil) -> some View {
NavigationLink(value: destination) {
Label {
HStack {
Text(destination.title)
Spacer()
if let badge {
Text(badge)
.font(.caption)
.foregroundStyle(.secondary)
.padding(.horizontal, 6)
.padding(.vertical, 2)
.background(.tertiary, in: Capsule())
}
}
} icon: {
Image(systemName: destination.symbol)
}
}
.accessibilityLabel(destination.title)
}
}
[ ] Sidebar shows top-level destinations only
[ ] Items are grouped clearly
[ ] Labels are short
[ ] SF Symbols are consistent
[ ] One selected item is clear
[ ] Sidebar is quieter than main content
[ ] App works when sidebar collapses
[ ] Compact layout works on iPhone/small windows
[ ] Keyboard navigation works
[ ] Badges are used sparingly
[ ] Actions live in toolbar/menus, not sidebar
[ ] Accessibility labels are clear
Drop this into any coding agent (Claude Code, Codex, Cursor, …) to apply the skill:
Use the apple-hig-sidebars skill to redesign this app navigation.
Rules:
- Sidebar is for top-level navigation only.
- Use SwiftUI NavigationSplitView.
- Use List(selection:) and .listStyle(.sidebar).
- Use an enum for sidebar destinations.
- Use Label(title, systemImage:).
- Group items into clear sections.
- Keep labels short.
- Use one clear selected state.
- Move actions into toolbar or command palette.
- Make compact-width behavior safe.
- Add accessibility labels.
After coding:
- List files changed.
- Explain the new sidebar structure.
- Explain compact behavior.
- Give manual test steps.
I always know where I am.
I can move quickly.
The app feels organized.
The content has room to breathe.
Nothing fights for attention.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when creating a new project folder, starter pack, app scaffold, or agent-ready workspace — AGENTS.md, README, TASKS, DECISIONS, PROMPTS, an idempotent bootstrap script, and starter-pack modes.
日本語の概要は準備中です。原文の説明を表示しています。
Use when designing or implementing states for AI agent tasks, background jobs, local model runs, queues, and notifications — one shared set of states, only legal transitions, and a recovery path out of every failure.
日本語の概要は準備中です。原文の説明を表示しています。
Use when exposing app features to App Intents, Shortcuts, Siri, Spotlight, widgets, controls, or system actions — small safe AppIntents, AppShortcutsProvider, AppEnum/AppEntity, parameters, and open-vs-background behavior.
日本語の概要は準備中です。原文の説明を表示しています。
Use when designing, reviewing, or implementing a command-palette / ⌘K layer for an Apple-platform app — keyboard-first global search, ranked and grouped results, native floating panel, and protected destructive commands.
日本語の概要は準備中です。原文の説明を表示しています。
Use when designing or implementing empty, first-run, no-result, offline, error, or waiting states in Apple-platform apps — every empty state explains what is missing, why it matters, and what to do next.
日本語の概要は準備中です。原文の説明を表示しています。
Use when designing or implementing feedback, status, progress, alerts, errors, success states, and live activity indicators in Apple-platform apps — inline status, banners, alerts, notifications, and loading states.
日本語の概要は準備中です。原文の説明を表示しています。