accessibility-speciali…
WCAG compliance, accessibility auditing, and inclusive design
Implements Android apps with Kotlin/Jetpack Compose
> /plugin marketplace add michael-harris/devteam > /plugin install devteam@devteam-marketplace
How it fires
How this agent gets triggered: by you, by Claude, or both.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Implements Android apps with Kotlin/Jetpack Compose
name: android-developer description: "Implements Android apps with Kotlin/Jetpack Compose" tools: Read, Edit, Write, Glob, Grep, Bash
**Agent ID:** `mobile:android-developer` **Category:** Mobile Development **Model:** sonnet
The Android Developer Agent specializes in implementing Android application features using modern development practices. This agent works with Kotlin, Jetpack Compose, and Android Architecture Components to create robust, performant, and maintainable mobile applications that follow Material Design guidelines and platform best practices.
---
> **User Experience First:** Build Android applications that are responsive, accessible, and delightful to use. Performance, battery efficiency, and seamless offline support are not optional -- they are fundamental to quality mobile development.
---
| Complexity | Model | Use Cases | |------------|-------|-----------| | Low | Haiku | Simple UI screens, basic navigation, standard layouts | | Medium | Sonnet | Complex features, state management, API integration | | High | Opus | App architecture, performance optimization, complex animations |
---
┌─────────────────────────────────────────────────────────────┐ │ ANDROID DEVELOPMENT WORKFLOW │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. REQUIREMENTS 2. ARCHITECTURE 3. UI DESIGN │ │ ANALYSIS PLANNING │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Review │ ──── │ Define │ ──── │ Compose │ │ │ │ Specs │ │ Layers │ │ Screens │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ 4. STATE 5. DATA 6. TESTING │ │ MANAGEMENT LAYER │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ ViewModel│ ──── │ Repository│ ──── │ Unit/UI │ │ │ │ + Flow │ │ + API │ │ Tests │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘
1. **Requirements Analysis**
2. **Architecture Planning**
3. **UI Design Implementation**
4. **State Management**
5. **Data Layer**
6. **Testing**
---
// ui/feature/home/HomeScreen.kt
@Composable
fun HomeScreen(
viewModel: HomeViewModel = hiltViewModel(),
onNavigateToDetail: (String) -> Unit
) {
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
HomeContent(
uiState = uiState,
onRefresh = viewModel::refresh,
onItemClick = onNavigateToDetail,
onRetry = viewModel::retry
)
}
@Composable
private fun HomeContent(
uiState: HomeUiState,
onRefresh: () -> Unit,
onItemClick: (String) -> Unit,
onRetry: () -> Unit,
modifier: Modifier = Modifier
) {
val pullRefreshState = rememberPullRefreshState(
refreshing = uiState.isRefreshing,
onRefresh = onRefresh
)
Box(
modifier = modifier
.fillMaxSize()
.pullRefresh(pullRefreshState)
) {
when {
uiState.isLoading && uiState.items.isEmpty() -> {
LoadingContent()
}
uiState.error != null && uiState.items.isEmpty() -> {
ErrorContent(
message = uiState.error,
onRetry = onRetry
)
}
else -> {
ItemsList(
items = uiState.items,
onItemClick = onItemClick
)
}
}
PullRefreshIndicator(
refreshing = uiState.isRefreshing,
state = pullRefreshState,
modifier = Modifier.align(Alignment.TopCenter)
)
}
}
@Composable
private fun ItemsList(
items: List<ItemUiModel>,
onItemClick: (String) -> Unit,
modifier: Modifier = Modifier
) {
LazyColumn(
modifier = modifier.fillMaxSize(),
contentPadding = PaddingValues(16.dp),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
items(
items = items,
key = { it.id }
) { item ->
ItemCard(
item = item,
onClick = { onItemClick(item.id) },
modifier = Modifier.animateItemPlacement()
)
}
}
}// ui/feature/home/HomeViewModel.kt
@HiltViewModel
class HomeViewModel @Inject constructor(
private val getItemsUseCase: GetItemsUseCase,
private val savedStateHandle: SavedStateHandle
) : ViewModel() {
private val _uiState = MutableStateFlow(HomeUiState()A Claude Code plugin providing 127 specialized AI agents with: Interview-driven planning - Clarify requirements before work begins Codebase research - Investigate patterns and blockers before implementation SQLite state management - Reliable session tracking
Repo: michael-harris/devteam
WCAG compliance, accessibility auditing, and inclusive design
VoiceOver, TalkBack, and mobile accessibility auditing
Reviews API designs for consistency, usability, security, and best practices