본문으로 건너뛰기
cccskills
무료GitHub에 공개

apple-hig-sidebars

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

실행 점수 미검증

설치 방법 보기

포함된 파일(1)

  • SKILL.md6.7 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Apple HIG Sidebars

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.

Core rule

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.

Apple-style principles

1. Use sidebars for top-level navigation

Good sidebar items:

  • Home
  • Inbox
  • Projects
  • Tasks
  • Files
  • Agents
  • Skills
  • Notes
  • Reports
  • Settings

Avoid putting these in the sidebar:

  • One-off buttons
  • Deep detail content
  • Destructive actions
  • Dashboard widgets
  • Status timelines
  • Large progress cards
  • Long descriptions

2. Pair the sidebar with split navigation

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

3. Keep the sidebar calm

Rules:

  • Short labels
  • Familiar SF Symbols
  • Clear selected state
  • Grouped sections
  • Generous spacing
  • Minimal badges
  • No neon
  • No large cards
  • No heavy gradients

Recommended structure for an agent/task app

Command
  Home
  Active Runs
  Queue

Build
  Projects
  Skills
  Prompts
  Files

Memory
  Notes
  Decisions
  Reports

System
  Settings

Width guidance

macOS: 220–280 px
iPad: 240–320 px
Compact iPhone: collapse into NavigationStack or tab-based root

SwiftUI template

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)
    }
}

Review checklist

[ ] 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

Prompt template

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.

Quality bar

I always know where I am.
I can move quickly.
The app feels organized.
The content has room to breathe.
Nothing fights for attention.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

aka-kika/akakika-skills112026년 9월 12일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

aka-kika/akakika-skills112026년 9월 12일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

aka-kika/akakika-skills112026년 9월 12일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

aka-kika/akakika-skills112026년 9월 12일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

aka-kika/akakika-skills112026년 9월 12일 업데이트

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

aka-kika/akakika-skills112026년 9월 12일 업데이트

aka-kika의 스킬 모두 보기

이 스킬의 문제 신고