diff --git a/README.md b/README.md
index c73337e..d6a8c32 100644
--- a/README.md
+++ b/README.md
@@ -367,7 +367,11 @@ xcodebuild test -scheme oAI
## License
-MIT License - See [LICENSE](LICENSE) for details.
+oAI is free software licensed under the **GNU Affero General Public License v3.0 (AGPL-3.0)**.
+
+This means you are free to use, study, modify, and distribute oAI, but any modified version you run as a network service must also be made available as free software under the same license.
+
+See [LICENSE](LICENSE) for the full license text, or visit [gnu.org/licenses/agpl-3.0](https://www.gnu.org/licenses/agpl-3.0.html).
## Author
@@ -378,7 +382,7 @@ MIT License - See [LICENSE](LICENSE) for details.
## Contributing
-Contributions are welcome! Please follow these steps:
+Contributions are welcome! By submitting a pull request you agree that your contribution will be licensed under the AGPL-3.0.
1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
diff --git a/oAI/Models/AgentSkill.swift b/oAI/Models/AgentSkill.swift
index 403ac83..c771ae6 100644
--- a/oAI/Models/AgentSkill.swift
+++ b/oAI/Models/AgentSkill.swift
@@ -4,6 +4,24 @@
//
// SKILL.md-style behavioral skills — markdown instruction files injected into the system prompt
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/Conversation.swift b/oAI/Models/Conversation.swift
index 04c8214..bd33df7 100644
--- a/oAI/Models/Conversation.swift
+++ b/oAI/Models/Conversation.swift
@@ -4,6 +4,24 @@
//
// Model for saved conversations
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/EmailLog.swift b/oAI/Models/EmailLog.swift
index 4e58ad2..b2af49d 100644
--- a/oAI/Models/EmailLog.swift
+++ b/oAI/Models/EmailLog.swift
@@ -4,6 +4,24 @@
//
// Email processing log entry model
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/HistoryEntry.swift b/oAI/Models/HistoryEntry.swift
index 20ec386..bac2029 100644
--- a/oAI/Models/HistoryEntry.swift
+++ b/oAI/Models/HistoryEntry.swift
@@ -4,6 +4,24 @@
//
// Command history entry model
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/Message.swift b/oAI/Models/Message.swift
index 67c1ce3..6b45c0f 100644
--- a/oAI/Models/Message.swift
+++ b/oAI/Models/Message.swift
@@ -4,6 +4,24 @@
//
// Core message model for chat conversations
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/MockData.swift b/oAI/Models/MockData.swift
index 078cfd9..d79a980 100644
--- a/oAI/Models/MockData.swift
+++ b/oAI/Models/MockData.swift
@@ -4,6 +4,24 @@
//
// Mock data for Phase 1 testing
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/ModelInfo.swift b/oAI/Models/ModelInfo.swift
index 1d6941f..3bdfd11 100644
--- a/oAI/Models/ModelInfo.swift
+++ b/oAI/Models/ModelInfo.swift
@@ -4,6 +4,24 @@
//
// Model information and capabilities
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/SessionStats.swift b/oAI/Models/SessionStats.swift
index bc0d46a..74a831e 100644
--- a/oAI/Models/SessionStats.swift
+++ b/oAI/Models/SessionStats.swift
@@ -4,6 +4,24 @@
//
// Session statistics tracking
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/Settings.swift b/oAI/Models/Settings.swift
index cde5d70..f2358d2 100644
--- a/oAI/Models/Settings.swift
+++ b/oAI/Models/Settings.swift
@@ -4,6 +4,24 @@
//
// Application settings and configuration
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/Skill.swift b/oAI/Models/Skill.swift
index 09b2cdc..de8ca91 100644
--- a/oAI/Models/Skill.swift
+++ b/oAI/Models/Skill.swift
@@ -4,6 +4,24 @@
//
// User-defined slash command templates (prompt shortcuts/macros)
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Models/SyncModels.swift b/oAI/Models/SyncModels.swift
index b05c9af..1648cc9 100644
--- a/oAI/Models/SyncModels.swift
+++ b/oAI/Models/SyncModels.swift
@@ -1,4 +1,23 @@
import Foundation
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
enum SyncAuthMethod: String, CaseIterable, Codable {
case ssh = "ssh"
diff --git a/oAI/Providers/AIProvider.swift b/oAI/Providers/AIProvider.swift
index 966876b..6be43ca 100644
--- a/oAI/Providers/AIProvider.swift
+++ b/oAI/Providers/AIProvider.swift
@@ -4,6 +4,24 @@
//
// Protocol for AI provider implementations
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Providers/AnthropicProvider.swift b/oAI/Providers/AnthropicProvider.swift
index 3c84373..9271d8d 100644
--- a/oAI/Providers/AnthropicProvider.swift
+++ b/oAI/Providers/AnthropicProvider.swift
@@ -4,6 +4,24 @@
//
// Anthropic Messages API provider with SSE streaming and tool support
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Providers/OllamaProvider.swift b/oAI/Providers/OllamaProvider.swift
index 22c10cd..0745c5a 100644
--- a/oAI/Providers/OllamaProvider.swift
+++ b/oAI/Providers/OllamaProvider.swift
@@ -4,6 +4,24 @@
//
// Ollama local AI provider with JSON-lines streaming
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Providers/OpenAIProvider.swift b/oAI/Providers/OpenAIProvider.swift
index 83842f3..b8ebd23 100644
--- a/oAI/Providers/OpenAIProvider.swift
+++ b/oAI/Providers/OpenAIProvider.swift
@@ -4,6 +4,24 @@
//
// OpenAI API provider with SSE streaming and tool support
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Providers/OpenRouterModels.swift b/oAI/Providers/OpenRouterModels.swift
index 46e897f..81a8e22 100644
--- a/oAI/Providers/OpenRouterModels.swift
+++ b/oAI/Providers/OpenRouterModels.swift
@@ -4,6 +4,24 @@
//
// OpenRouter API request and response models
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Providers/OpenRouterProvider.swift b/oAI/Providers/OpenRouterProvider.swift
index a0b0009..294ea8f 100644
--- a/oAI/Providers/OpenRouterProvider.swift
+++ b/oAI/Providers/OpenRouterProvider.swift
@@ -4,6 +4,24 @@
//
// OpenRouter AI provider implementation with SSE streaming
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Providers/ProviderRegistry.swift b/oAI/Providers/ProviderRegistry.swift
index 9f67956..9785a62 100644
--- a/oAI/Providers/ProviderRegistry.swift
+++ b/oAI/Providers/ProviderRegistry.swift
@@ -4,6 +4,24 @@
//
// Registry for managing multiple AI providers
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Services/AgentSkillFilesService.swift b/oAI/Services/AgentSkillFilesService.swift
index cee7ea0..8c01bac 100644
--- a/oAI/Services/AgentSkillFilesService.swift
+++ b/oAI/Services/AgentSkillFilesService.swift
@@ -4,6 +4,24 @@
//
// Manages per-skill file directories in Application Support/oAI/skills//
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import UniformTypeIdentifiers
diff --git a/oAI/Services/AnthropicOAuthService.swift b/oAI/Services/AnthropicOAuthService.swift
index 35d1c8e..77beb84 100644
--- a/oAI/Services/AnthropicOAuthService.swift
+++ b/oAI/Services/AnthropicOAuthService.swift
@@ -4,6 +4,24 @@
//
// OAuth 2.0 PKCE flow for Anthropic Pro/Max subscription login
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import CryptoKit
diff --git a/oAI/Services/AnytypeMCPService.swift b/oAI/Services/AnytypeMCPService.swift
index 056b866..0e6a29b 100644
--- a/oAI/Services/AnytypeMCPService.swift
+++ b/oAI/Services/AnytypeMCPService.swift
@@ -4,6 +4,24 @@
//
// Anytype MCP integration via local HTTP API at http://127.0.0.1:31009
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Services/ContextSelectionService.swift b/oAI/Services/ContextSelectionService.swift
index 939c288..bd94e3a 100644
--- a/oAI/Services/ContextSelectionService.swift
+++ b/oAI/Services/ContextSelectionService.swift
@@ -5,6 +5,24 @@
// Smart context selection for AI conversations
// Selects relevant messages instead of sending entire history
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Services/DatabaseService.swift b/oAI/Services/DatabaseService.swift
index 5b7e0bd..c8d0d2b 100644
--- a/oAI/Services/DatabaseService.swift
+++ b/oAI/Services/DatabaseService.swift
@@ -4,6 +4,24 @@
//
// SQLite persistence layer for conversations using GRDB
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import GRDB
diff --git a/oAI/Services/EmailHandlerService.swift b/oAI/Services/EmailHandlerService.swift
index daf2686..f0a75da 100644
--- a/oAI/Services/EmailHandlerService.swift
+++ b/oAI/Services/EmailHandlerService.swift
@@ -4,6 +4,24 @@
//
// AI-powered email auto-responder service
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Services/EmailLogService.swift b/oAI/Services/EmailLogService.swift
index 06400ea..b1066ed 100644
--- a/oAI/Services/EmailLogService.swift
+++ b/oAI/Services/EmailLogService.swift
@@ -4,6 +4,24 @@
//
// Service for managing email handler activity logs
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Services/EmailService.swift b/oAI/Services/EmailService.swift
index 6aa0a64..ded6288 100644
--- a/oAI/Services/EmailService.swift
+++ b/oAI/Services/EmailService.swift
@@ -4,6 +4,24 @@
//
// IMAP IDLE email monitoring service for AI email handler
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Services/EmbeddingService.swift b/oAI/Services/EmbeddingService.swift
index f2a5e9c..5bd4132 100644
--- a/oAI/Services/EmbeddingService.swift
+++ b/oAI/Services/EmbeddingService.swift
@@ -5,6 +5,24 @@
// Embedding generation and semantic search
// Supports multiple providers: OpenAI, OpenRouter, Google
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Services/EncryptionService.swift b/oAI/Services/EncryptionService.swift
index d027157..b23d92c 100644
--- a/oAI/Services/EncryptionService.swift
+++ b/oAI/Services/EncryptionService.swift
@@ -5,6 +5,24 @@
// Secure encryption for sensitive data (API keys)
// Uses CryptoKit with machine-specific key derivation
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import CryptoKit
diff --git a/oAI/Services/GitSyncService.swift b/oAI/Services/GitSyncService.swift
index a031316..068c4c4 100644
--- a/oAI/Services/GitSyncService.swift
+++ b/oAI/Services/GitSyncService.swift
@@ -1,4 +1,23 @@
import Foundation
+//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import os
@Observable
diff --git a/oAI/Services/IMAPClient.swift b/oAI/Services/IMAPClient.swift
index dce34b6..2c3b480 100644
--- a/oAI/Services/IMAPClient.swift
+++ b/oAI/Services/IMAPClient.swift
@@ -4,6 +4,24 @@
//
// Swift-native IMAP client for email monitoring
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import Network
diff --git a/oAI/Services/MCPService.swift b/oAI/Services/MCPService.swift
index 4b68c09..c8d01bf 100644
--- a/oAI/Services/MCPService.swift
+++ b/oAI/Services/MCPService.swift
@@ -4,6 +4,24 @@
//
// MCP (Model Context Protocol) service for filesystem tool execution
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Services/SMTPClient.swift b/oAI/Services/SMTPClient.swift
index 32caab7..a3aeac1 100644
--- a/oAI/Services/SMTPClient.swift
+++ b/oAI/Services/SMTPClient.swift
@@ -4,6 +4,24 @@
//
// Swift-native SMTP client for sending emails
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import Network
diff --git a/oAI/Services/SettingsService.swift b/oAI/Services/SettingsService.swift
index bdd0e1b..1fab9a3 100644
--- a/oAI/Services/SettingsService.swift
+++ b/oAI/Services/SettingsService.swift
@@ -4,6 +4,24 @@
//
// Settings persistence: SQLite for preferences, Keychain for API keys
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Services/ThinkingVerbs.swift b/oAI/Services/ThinkingVerbs.swift
index 465b20f..e99393a 100644
--- a/oAI/Services/ThinkingVerbs.swift
+++ b/oAI/Services/ThinkingVerbs.swift
@@ -4,6 +4,24 @@
//
// Fun random verbs for AI thinking/processing states
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Services/WebSearchService.swift b/oAI/Services/WebSearchService.swift
index 450ac0a..43407ce 100644
--- a/oAI/Services/WebSearchService.swift
+++ b/oAI/Services/WebSearchService.swift
@@ -4,6 +4,24 @@
//
// DuckDuckGo web search for non-OpenRouter providers
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Utilities/Extensions/Color+Extensions.swift b/oAI/Utilities/Extensions/Color+Extensions.swift
index d0be840..e36d750 100644
--- a/oAI/Utilities/Extensions/Color+Extensions.swift
+++ b/oAI/Utilities/Extensions/Color+Extensions.swift
@@ -4,6 +4,24 @@
//
// Color scheme matching Python TUI dark theme
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Utilities/Extensions/String+Extensions.swift b/oAI/Utilities/Extensions/String+Extensions.swift
index 2eaa4ec..69aed93 100644
--- a/oAI/Utilities/Extensions/String+Extensions.swift
+++ b/oAI/Utilities/Extensions/String+Extensions.swift
@@ -4,6 +4,24 @@
//
// String utility extensions
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
diff --git a/oAI/Utilities/Extensions/View+Extensions.swift b/oAI/Utilities/Extensions/View+Extensions.swift
index fc2eb65..a5d8d82 100644
--- a/oAI/Utilities/Extensions/View+Extensions.swift
+++ b/oAI/Utilities/Extensions/View+Extensions.swift
@@ -4,6 +4,24 @@
//
// SwiftUI view helpers and modifiers
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Utilities/Logging.swift b/oAI/Utilities/Logging.swift
index 9fd96dc..7ca90e1 100644
--- a/oAI/Utilities/Logging.swift
+++ b/oAI/Utilities/Logging.swift
@@ -4,6 +4,24 @@
//
// Dual logging: os.Logger (unified log) + file (~Library/Logs/oAI.log)
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Utilities/SyntaxHighlighter.swift b/oAI/Utilities/SyntaxHighlighter.swift
index c3ea18f..95ada55 100644
--- a/oAI/Utilities/SyntaxHighlighter.swift
+++ b/oAI/Utilities/SyntaxHighlighter.swift
@@ -4,6 +4,24 @@
//
// Keyword-based syntax highlighting using AttributedString
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/ViewModels/ChatViewModel.swift b/oAI/ViewModels/ChatViewModel.swift
index 977bc6a..ec0cb76 100644
--- a/oAI/ViewModels/ChatViewModel.swift
+++ b/oAI/ViewModels/ChatViewModel.swift
@@ -4,6 +4,24 @@
//
// Main chat view model
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import Foundation
import os
diff --git a/oAI/Views/Main/ChatView.swift b/oAI/Views/Main/ChatView.swift
index 0c0de94..84590fe 100644
--- a/oAI/Views/Main/ChatView.swift
+++ b/oAI/Views/Main/ChatView.swift
@@ -4,6 +4,24 @@
//
// Main chat interface
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Main/ContentView.swift b/oAI/Views/Main/ContentView.swift
index 9daf880..3b16def 100644
--- a/oAI/Views/Main/ContentView.swift
+++ b/oAI/Views/Main/ContentView.swift
@@ -4,6 +4,24 @@
//
// Root navigation container
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Main/FooterView.swift b/oAI/Views/Main/FooterView.swift
index 8675c58..07cef85 100644
--- a/oAI/Views/Main/FooterView.swift
+++ b/oAI/Views/Main/FooterView.swift
@@ -4,6 +4,24 @@
//
// Footer bar with session summary
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Main/HeaderView.swift b/oAI/Views/Main/HeaderView.swift
index 3c5190d..6e1baa7 100644
--- a/oAI/Views/Main/HeaderView.swift
+++ b/oAI/Views/Main/HeaderView.swift
@@ -4,6 +4,24 @@
//
// Header bar with provider, model, and stats
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Main/InputBar.swift b/oAI/Views/Main/InputBar.swift
index b1027a1..3d15dc3 100644
--- a/oAI/Views/Main/InputBar.swift
+++ b/oAI/Views/Main/InputBar.swift
@@ -4,6 +4,24 @@
//
// Message input bar with status indicators
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Main/MarkdownContentView.swift b/oAI/Views/Main/MarkdownContentView.swift
index 3c74d38..4772519 100644
--- a/oAI/Views/Main/MarkdownContentView.swift
+++ b/oAI/Views/Main/MarkdownContentView.swift
@@ -4,6 +4,24 @@
//
// Renders markdown content with syntax-highlighted code blocks
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
import MarkdownUI
diff --git a/oAI/Views/Main/MessageRow.swift b/oAI/Views/Main/MessageRow.swift
index c0be511..26675a7 100644
--- a/oAI/Views/Main/MessageRow.swift
+++ b/oAI/Views/Main/MessageRow.swift
@@ -4,6 +4,24 @@
//
// Individual message display
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
#if canImport(AppKit)
diff --git a/oAI/Views/Main/SyncStatusIndicator.swift b/oAI/Views/Main/SyncStatusIndicator.swift
index a0d8bed..b1a01ac 100644
--- a/oAI/Views/Main/SyncStatusIndicator.swift
+++ b/oAI/Views/Main/SyncStatusIndicator.swift
@@ -4,6 +4,24 @@
//
// Git sync status indicator (bottom-right corner)
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Screens/AboutView.swift b/oAI/Views/Screens/AboutView.swift
index a8b7773..744f941 100644
--- a/oAI/Views/Screens/AboutView.swift
+++ b/oAI/Views/Screens/AboutView.swift
@@ -4,6 +4,24 @@
//
// About modal with app icon and version info
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
@@ -44,7 +62,11 @@ struct AboutView: View {
.padding(.horizontal, 40)
VStack(spacing: 4) {
- Text("© 2026 [Rune Olsen](https://blog.rune.pm) | [Support](mailto:support@fubar.pm)")
+ Text("© 2026 [Rune Olsen](https://blog.rune.pm)")
+ .font(.caption)
+ .foregroundStyle(.secondary)
+
+ Text("[GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl-3.0.html)")
.font(.caption)
.foregroundStyle(.secondary)
@@ -63,7 +85,7 @@ struct AboutView: View {
Spacer().frame(height: 20)
}
- .frame(width: 320, height: 370)
+ .frame(width: 320, height: 390)
}
}
diff --git a/oAI/Views/Screens/AgentSkillEditorSheet.swift b/oAI/Views/Screens/AgentSkillEditorSheet.swift
index 1af2838..461f5ae 100644
--- a/oAI/Views/Screens/AgentSkillEditorSheet.swift
+++ b/oAI/Views/Screens/AgentSkillEditorSheet.swift
@@ -4,6 +4,24 @@
//
// Create or edit a SKILL.md-style agent skill, with optional support files
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
import UniformTypeIdentifiers
diff --git a/oAI/Views/Screens/AgentSkillsView.swift b/oAI/Views/Screens/AgentSkillsView.swift
index 86e9b3c..03797c3 100644
--- a/oAI/Views/Screens/AgentSkillsView.swift
+++ b/oAI/Views/Screens/AgentSkillsView.swift
@@ -4,6 +4,24 @@
//
// Modal for managing SKILL.md-style agent skills (opened via /skills command)
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
import UniformTypeIdentifiers
diff --git a/oAI/Views/Screens/ConversationListView.swift b/oAI/Views/Screens/ConversationListView.swift
index 93771e4..682995d 100644
--- a/oAI/Views/Screens/ConversationListView.swift
+++ b/oAI/Views/Screens/ConversationListView.swift
@@ -4,6 +4,24 @@
//
// Saved conversations list
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import os
import SwiftUI
diff --git a/oAI/Views/Screens/CreditsView.swift b/oAI/Views/Screens/CreditsView.swift
index 8ee48a3..2ceb49e 100644
--- a/oAI/Views/Screens/CreditsView.swift
+++ b/oAI/Views/Screens/CreditsView.swift
@@ -4,6 +4,24 @@
//
// Account credits and balance
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Screens/EmailLogView.swift b/oAI/Views/Screens/EmailLogView.swift
index ded14f9..aece4b3 100644
--- a/oAI/Views/Screens/EmailLogView.swift
+++ b/oAI/Views/Screens/EmailLogView.swift
@@ -4,6 +4,24 @@
//
// Email handler activity log viewer
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Screens/HelpView.swift b/oAI/Views/Screens/HelpView.swift
index 67995e1..2cc1114 100644
--- a/oAI/Views/Screens/HelpView.swift
+++ b/oAI/Views/Screens/HelpView.swift
@@ -4,6 +4,24 @@
//
// Help and commands reference with expandable detail and search
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Screens/HistoryView.swift b/oAI/Views/Screens/HistoryView.swift
index 6e5b883..53abc52 100644
--- a/oAI/Views/Screens/HistoryView.swift
+++ b/oAI/Views/Screens/HistoryView.swift
@@ -4,6 +4,24 @@
//
// Command history viewer with search
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import os
import SwiftUI
diff --git a/oAI/Views/Screens/ModelInfoView.swift b/oAI/Views/Screens/ModelInfoView.swift
index 5425f4b..21502e5 100644
--- a/oAI/Views/Screens/ModelInfoView.swift
+++ b/oAI/Views/Screens/ModelInfoView.swift
@@ -4,6 +4,24 @@
//
// Rich model information modal
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Screens/ModelSelectorView.swift b/oAI/Views/Screens/ModelSelectorView.swift
index 8b6b933..41b0d3b 100644
--- a/oAI/Views/Screens/ModelSelectorView.swift
+++ b/oAI/Views/Screens/ModelSelectorView.swift
@@ -4,6 +4,24 @@
//
// Model selection screen
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Screens/SettingsView.swift b/oAI/Views/Screens/SettingsView.swift
index c0c71ca..9cac34a 100644
--- a/oAI/Views/Screens/SettingsView.swift
+++ b/oAI/Views/Screens/SettingsView.swift
@@ -4,6 +4,24 @@
//
// Settings and configuration screen
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
import UniformTypeIdentifiers
diff --git a/oAI/Views/Screens/SkillEditorSheet.swift b/oAI/Views/Screens/SkillEditorSheet.swift
index d572f7b..1b363f0 100644
--- a/oAI/Views/Screens/SkillEditorSheet.swift
+++ b/oAI/Views/Screens/SkillEditorSheet.swift
@@ -4,6 +4,24 @@
//
// Create or edit a user-defined shortcut (prompt template)
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/Views/Screens/SkillsView.swift b/oAI/Views/Screens/SkillsView.swift
index 1b20415..8f13750 100644
--- a/oAI/Views/Screens/SkillsView.swift
+++ b/oAI/Views/Screens/SkillsView.swift
@@ -4,6 +4,24 @@
//
// Modal for managing user-defined shortcuts (opened via /shortcuts command)
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
import UniformTypeIdentifiers
diff --git a/oAI/Views/Screens/StatsView.swift b/oAI/Views/Screens/StatsView.swift
index d6415de..f94c38f 100644
--- a/oAI/Views/Screens/StatsView.swift
+++ b/oAI/Views/Screens/StatsView.swift
@@ -4,6 +4,24 @@
//
// Session statistics screen
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
diff --git a/oAI/oAIApp.swift b/oAI/oAIApp.swift
index 0515f7a..f932550 100644
--- a/oAI/oAIApp.swift
+++ b/oAI/oAIApp.swift
@@ -4,6 +4,24 @@
//
// Main app entry point
//
+// SPDX-License-Identifier: AGPL-3.0-or-later
+// Copyright (C) 2026 Rune Olsen
+//
+// This file is part of oAI.
+//
+// oAI is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// oAI is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+// Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public
+// License along with oAI. If not, see .
+
import SwiftUI
#if os(macOS)