shiv - Terminalde API Anahtarınızla Çalışan AI Asistanı [AI for iOS with Jailbreak]

murat

fânî
Administrator
Katılım
28 Tem 2017
Mesaj
2,304
Tepkime puanı
1,490
shiv — terminalde çalışan AI asistanı

banner.png


Selam arkadaşlar,
shiv, iOS terminalinde çalışan bir AI asistanı. Kendi API
anahtarınızı kullanıyorsunuz — abonelik yok, aracı sunucu yok​



Ne yapıyor
  • Dosya okuyor, dizin arıyor
  • Kabuk (shell) komutu çalıştırıyor — ama önce soruyor
  • Markdown çiziyor: tablo, kod bloğu, liste, başlık
  • Oturumları kaydediyor, kaldığınız yerden devam ediyor

Bir şeyi değiştirebilecek her komut için izin soruyor:
bir kez çalıştır / bu tür için bir daha sorma / hayır. Okuma ve listeleme izin sormuyor.

Modeller: Moonshot (Kimi) · DeepSeek · OpenAI · OpenRouter (Claude, Gemini buradan) · Ollama · Özel adres

OpenAI uyumlu /chat/completions konuşan her şey çalışır. Birden fazla profil tutup aralarında geçebiliyorsunuz. Arayüz Türkçe veya İngilizce.

Uygulamadaki AI'dan farkı ne

Telefonda zaten AI var — ChatGPT, Claude, hepsi bir tık uzakta. Peki
neden terminalde bir tane daha?

Fark tek kelimeyle: erişim.

Uygulamadaki AI kum havuzunda oturuyor. Cihazınızı göremiyor, dosyalarınıza dokunamıyor. Onunla çalışmak şöyle:

Kod:
dosyayı bul → aç → içeriği kopyala → uygulamaya yapıştır
→ cevabı oku → kopyala → dosyaya geri yapıştır → kaydet

shiv terminalde çalışıyor ve cihaza erişimi var. Dosyayı kendisi açıyor, komutu kendisi çalıştırıyor, çıktıyı kendisi okuyor.

Örnek senaryo: derleme hatası

Bir Theos projesinde derleme patlıyor diyelim. Proje klasöründe shiv açıyorsunuz.

İlk talimat — sadece incele, dokunma:

Kod:
> Önce bu projeyi incele. Dosya yapısını, Makefile'ı ve
 kaynak kodu kontrol et. Hiçbir değişiklik yapmadan
 derleme hatasının olası nedenini raporla.

Model dosyaları okuyup raporunu verdikten sonra ikinci talimat:

Kod:
> Tespit ettiğin problemi düzelt ve make package çalıştır.
Başka dosyalarda gereksiz değişiklik yapma. Derleme
başarılı olursa oluşan .deb dosyasının yolunu göster.
Paketi KURMA, benden onay bekle.

Akış şöyle ilerler:

Kod:
projeyi inceler          ← izin sormaz, okuma
   ↓
kaynak kodu okur          ← izin sormaz
   ↓
Makefile'ı kontrol eder   ← izin sormaz
   ↓
sorunu tespit eder
   ↓
gerekli değişikliği yapar ← İZİN SORAR
   ↓
make package              ← İZİN SORAR
   ↓
build çıktısını inceler
   ↓
.deb paketini bulur
   ↓
sizin onayınızı bekler

Buradaki püf nokta talimatın kendisi. "Hiçbir değişiklik yapmadan raporla" demek modeli önce anlamaya, sonra dokunmaya zorluyor. "Paketi KURMA" demek son adımı sizde bırakıyor.

Ne kadar net söylerseniz o kadar dar çalışıyor. Bulanık bırakırsanız
kendince yorumlar ve bazen fazladan şey yapar.

Başka örnekler

Kod:
"bu klasörde kaç png var, toplam boyutu ne?"
"Root.plist'i aç, tema anahtarını gray yap"
"son 50 satır logda tekrar eden bir hata görüyor musun?"
"bu iki dosyayı karşılaştır, fark ne?"
"jbroot'u bul ve tam yolunu söyle"

Üç şey yapabiliyor

  • Okuma — dosya içeriği, dizin listesi. İzin sormuyor, zararı
    yok.
  • Yazma ve değiştirme — dosya oluşturuyor, düzenliyor. İzin
    soruyor.
  • Komut çalıştırma — kabuk komutu. İzin soruyor.

Bedeli

Uygulamadaki AI yanlış bir şey söylese en fazla yanlış bilgi verir; shiv yanlış bir komut çalıştırırsa dosya siler.

O yüzden izin akışı var ve kapatılamıyor. Değiştirebilecek her komut için soruyor, komutu olduğu gibi gösteriyor. Okumadan onaylamayın.


Kurulum
shiv, Node.js 18+ istiyor. Sıra ortamınıza göre değişiyor:

RootHide
  1. Depoyu ekleyin: muratkurt's Repo
  2. shiv’i kurun — Node.js beraberinde gelir
Rootless
  1. Önce Node deposu:
  2. Sonra benim depom: muratkurt's Repo
  3. shiv’i kurun
Kullanım
  • Rootless’ta sırayı ters yaparsanız Sileo “bağımlılık karşılanamadı” der, çünkü Node paketini bulamaz.
  • Terminali açıp shiv yazın. İlk açılışta beş soru: dil, sağlayıcı, API anahtarı, model, profil adı.
  • shiv’i root ile çalıştırmayın. Dosyalar root’a geçer ve ayarlarınız bir daha yazılamaz.



Root gerektiren komutlar

shiv komutları alt süreç olarak çalıştırıyor ve orada kontrol terminali yok. su parolayı terminalden okuduğu için — bilerek böyle tasarlanmış, script’ten borulanamasın diye — sonsuza kadar bekliyor. Ekranda hiçbir şey olmuyor.

Çözüm sudo -S. Parolayı stdin’den okuyor:
Kod:
printf ‘PAROLANIZ\n’ | sudo -S <komut>

shiv’e “root isteyen komutlarda parola beklemeden bu kalıbı kullan” derseniz kendisi uyguluyor.

Ama parola oturum kaydına yazılıyor.
Yazdığınız her şey ~/.shiv/oturumlar/ altına düşüyor. Ekran görüntüsü paylaşırken de dikkat.

Daha temizi parolasız sudo. Terminalde bir kez:
Kod:
su
echo ‘mobile ALL=(ALL) NOPASSWD: ALL’ > /etc/sudoers.d/mobile
chmod 440 /etc/sudoers.d/mobile
exit

chmod 440 şart — izinler gevşekse sudo dosyayı reddediyor. Sonra shiv’e sadece sudo <komut> dedirtirsiniz, parola hiçbir yere yazılmaz.

Geri almak için rm /etc/sudoers.d/mobile. Bilerek yapın: parola tek engeldi, artık yok.



Neden iki paket var

Rootless her şeyi /var/jb altında sabit bir yola kuruyor. RootHide ise bootstrap’i rastgele bir yola koyuyor — her cihazda farklı UUID. Bu yüzden RootHide paketinde hiçbir yere sabit yol yazılamıyor.

Asıl sorun başka yerde çıktı: RootHide’da aynı yol iki farklı yeri gösterebiliyor. Terminaldeki kabuk bir namespace’te, Node başka birinde. Kabuğa ~/shiv/dosya.mjs deyince buluyor, Node aynı yolu göremiyor. Bu tek gerçek üç ayrı hataya yol açtı.

Çözüm hepsinde aynı ilkeye dayandı: iki namespace arasında dosya yolu alıp vermeyin. Yolu üretmesi gereken taraf, onu kullanacak taraf olsun.

Bir de RootHide’ın çıplak namespace’inde /bin/sh yok, Node bir kabuk bulamıyor. RootHide paketinde bunun için bir köprü ikili var; rootless’ta gerçek kabuk olduğu için o pakette yok.



Kısayollar
Kod:
?          kısayol listesi        Esc     çalışanı durdur
/          komut listesi          ↑ ↓     önceki istemler
Ctrl+R     geçmişte ara           Ctrl+T  son çıktı
Ctrl+G     hemen gönder

Kod:
/profil  /model  /oturum  /devam
/dil     /geo    /yardim  /cik

Hepsinin İngilizcesi de var (/profile,
/resume, /continue,
/quit…), arayüz dili fark etmiyor. Ön ek de yeterli —
/prof yazsanız olur.

Terminale dönmeden: shiv -c devam,
shiv -r oturum seçici.



Verileriniz
  • Profiller, anahtar, oturumlar ve geçmiş ~/.shiv/ altında. Paketi kaldırsanız da silinmiyor, purge’de bile. Yeniden kurunca kaldığınız yerden devam ediyorsunuz.
  • API anahtarı sadece o klasörde. Kaynak koda gömülü değil, oturum kayıtlarına yazılmıyor, sağlayıcı dışında hiçbir yere gitmiyor.


Takılabileceğiniz yerler

“Bağımlılık karşılanamadı” (rootless) — Node deposunu
eklememişsiniz, yukarıdaki sıraya bakın.

“Node.js not found” — Node beklenmedik bir yerde:
SHIV_NODE=/tam/yol/node shiv

Ayarlar kaydedilmiyor — root ile çalıştırmışsınız:
chown -R mobile:mobile ~/.shiv

Komut çalışmıyor ama sohbet çalışıyor — kabuk bulunamamış.
/geo yazıp “kabuk” satırına bakın.

Açılışta çöküyorshivlog yazın. Dosya boşsa
JavaScript hatası değil, daha alt katmanda bir çökme.

Model listesi gelmiyor — bazı sağlayıcılar o ucu kapatıyor,
elle yazın: /model gpt-4o-mini



Notlar

Sürüm 0.1.0 ve test edilenler:
  • RootHide’da doğrulandı — iPhone 15 Pro / iOS 17.0.3’te kurdum, çalıştırdım, kaldırdım, ayarların durduğunu gördüm.
  • Rootless’ta test edilmedi — paket üretiliyor ve doğrulamalardan geçiyor ama gerçek cihazda çalıştırılmadı. Denerseniz /geo çıktısını atın.
  • Diğer iOS sürümleri denenmedi — paket iOS 15+ istiyor ama denenen tek sürüm 17.0.3.
  • Arada çöküyor — seyrek ama oluyor, sebebi wasm katmanında görünüyor. Oturum kaydı olduğu için veri kaybetmiyorsunuz, shiv -c ile devam edersiniz.
Sürüm numarası bir iddiadır, hak edilince yükselir. Rootless
doğrulanınca 0.2.0, saha geri bildirimi gelince 1.0.0.



Node.js paketi imcynic’in emeği — RootHide’a çevrilmiş sürümü
kolaylık olsun diye aynı depoda tutuyorum.


Denerseniz sevinirim. Takıldığınız ya da tuhaf bulduğunuz bir şey
olursa yazın; ekran görüntüsü ve /geo çıktısı olursa
çok daha hızlı bakarım.
 
Son düzenleme:
Geri
Üst