Козельская крепость находилась на возвышенности в петле реки Другусны непосредственно перед её впадением в Жиздру[1]. С трёх сторон её защищали обрывистые берега обеих рек, а с четвёртой — узкий перешеек, который был перерезан оврагом, превращённым в широкий и глубокий ров. Традиционно считается, что детинец Козельска XII—XIV веков находился в горловине петли, перекрывая подступы к расположенному севернее посаду, который, вероятно, имел собственную линию укреплений — окольный город. По другой версии, детинец располагался к северо-востоку от окольного города и занимал площадь лишь 0,8 га[2][3]. В конце XVII века кремль (детинец) уже однозначно находился в горловине петли, он был окружён рубленной стеной, а его периметр составлял около 828,6 м[1]. Стены венчали шесть глухих и две проездные башни. Внутри кремля стояли две церкви — соборная Успенская и приходская Св. Параскевы Пятницы, несколько жилых и осадных домов, а также административные и казённые постройки: воеводский двор, приказная изба, пороховой погреб, тюрьма и другие. В самой петле Другусны располагался окольный город, который до разрушения в Смутное время был опоясан острожной стеной с неколькими глухими и проездными башнями, однако впоследствии, вероятно, его укрепления уже не восстанавливались. В окольном городе находилась торговая площадь с лавками и три приходские церкви. На противоположенном берегу Другусны находилась Казачья слобода с Благовещенской церковью, к югу от кремля — Стрелецкая слобода с Богоявленской церковью.
Наибольшую известность Козельску принесла героическая оборона от монголов весной 1238 года, продлившаяся семь недель. Поскольку лёд на Жиздре и Другусне ослаб, монголы не могли штурмовать город со всех сторон и были вынуждены атаковать наиболее сильную напольную сторону детинца, причём на довольно узком участке (200 м). Защитники крепости в отчаянной вылазке уничтожили около четырёх тысяч нападающих и их метательные машины, но и сами все погибли. Монголы истребили оставшееся население города, в том числе малолетнего князя Василия.
В 1406 году Козельск был захвачен литовцами, однако вскоре они были вынуждены покинуть его. В 1445 году литовцы безуспешно осаждали его, однако взяли в 1448 году. В 1480 году в отместку за неоказание помощи со стороны своего союзника короля Казимира IV ордынский хан Ахмат разорил ряд литовских городов, в том числе Козельск. В 1494 году Козельск отошёл к Русскому государству. После построения Большой Засечной черты в эпоху Ивана Грозного в Козельске находилось управление её наиболее западным отрезком — козельскими засеками. В эту же эпоху были обновлены укрепления и самого Козельска.
В 1695 или 1696 году Козельская крепость сильно пострадала от пожара, сгорели около 473 м крепостной стены. Всё остальное вскоре сгнило и обвалилось. От земляных укреплений Козельска не сохранилось почти никаких следов, уцелел только ров детинца, по дну которого в XIX веке прошла железнодорожная ветка. Остатки земляных валов уцелели на улицах Белёвская горка и Спартаковская. О древних укреплениях Козельска напоминает улица Земляной Вал. Единственный уцелевший современник крепости — Вознесенская церковь 1620-х годов постройки[1].
Массалитина Г. А., Болдин И. В.Топография летописного Козельска // Мир Средневековья. Проблемы вещеведения. Материалы научной конференции к 70-летию отдела средневековой археологии. — М.: ИА РАН, 2022. — С. 94—106. Архивировано 5 июня 2023 года.